From 78e918dcd269eebc474a65afafdffd44e8e94017 Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Thu, 14 Mar 2024 11:17:33 +0100 Subject: [PATCH 01/33] [logstash] add missing queue.capacity mappings (#9339) * add missing queue.capacity mappings * Update packages/logstash/changelog.yml Co-authored-by: Milton Hultgren * bump logstash service version * bump package version * wait until logstash is ready * lint --------- Co-authored-by: Milton Hultgren --- .../logstash/_dev/deploy/docker/docker-compose.yml | 12 +++++++++++- packages/logstash/_dev/deploy/variants.yml | 6 +++--- packages/logstash/changelog.yml | 5 +++++ .../data_stream/node_stats/fields/fields.yml | 11 +++++++++++ packages/logstash/manifest.yml | 2 +- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/packages/logstash/_dev/deploy/docker/docker-compose.yml b/packages/logstash/_dev/deploy/docker/docker-compose.yml index 51d81ff21fa..635700be158 100644 --- a/packages/logstash/_dev/deploy/docker/docker-compose.yml +++ b/packages/logstash/_dev/deploy/docker/docker-compose.yml @@ -2,10 +2,20 @@ version: "2.3" services: logstash: user: root - image: "docker.elastic.co/logstash/logstash:${ELASTIC_VERSION:-8.6.0}" + image: "docker.elastic.co/logstash/logstash:${ELASTIC_VERSION:-8.7.0}" + healthcheck: + test: ["CMD", "curl", "-f", "-u", "elastic:changeme", "http://127.0.0.1:9600/"] + retries: 300 + interval: 1s volumes: - "./pipeline:/usr/share/logstash/pipeline" - "./config:/usr/share/logstash/config" - ${SERVICE_LOGS_DIR}:/usr/share/logstash/logs ports: - "127.0.0.1:9600:9600" + logstash_is_ready: + image: tianon/true + platform: linux/amd64 + depends_on: + logstash: + condition: service_healthy diff --git a/packages/logstash/_dev/deploy/variants.yml b/packages/logstash/_dev/deploy/variants.yml index 5b5dafe86f5..f3861a8841d 100644 --- a/packages/logstash/_dev/deploy/variants.yml +++ b/packages/logstash/_dev/deploy/variants.yml @@ -1,4 +1,4 @@ variants: - logstash_8.6.0: - ELASTIC_VERSION: 8.6.0 -default: logstash_8.6.0 + logstash_8.7.0: + ELASTIC_VERSION: 8.7.0 +default: logstash_8.7.0 diff --git a/packages/logstash/changelog.yml b/packages/logstash/changelog.yml index fe89261f499..6775dcdba85 100644 --- a/packages/logstash/changelog.yml +++ b/packages/logstash/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.3" + changes: + - description: Add missing queue.capacity.* mappings + type: bugfix + link: https://github.com/elastic/integrations/pull/9339 - version: "2.4.2" changes: - description: Add link to Logstash monitoring docs diff --git a/packages/logstash/data_stream/node_stats/fields/fields.yml b/packages/logstash/data_stream/node_stats/fields/fields.yml index 1c23b97818e..b0dde764dc5 100644 --- a/packages/logstash/data_stream/node_stats/fields/fields.yml +++ b/packages/logstash/data_stream/node_stats/fields/fields.yml @@ -182,6 +182,17 @@ type: long - name: max_queue_size_in_bytes type: long + - name: capacity + type: group + fields: + - name: max_queue_size_in_bytes + type: long + - name: max_unread_events + type: long + - name: page_capacity_in_bytes + type: long + - name: queue_size_in_bytes + type: long - name: pipelines.events type: group fields: diff --git a/packages/logstash/manifest.yml b/packages/logstash/manifest.yml index 555df48d34c..6368ddcad3d 100644 --- a/packages/logstash/manifest.yml +++ b/packages/logstash/manifest.yml @@ -1,6 +1,6 @@ name: logstash title: Logstash -version: 2.4.2 +version: 2.4.3 description: Collect logs and metrics from Logstash with Elastic Agent. type: integration icons: From 71d905638e9be3409c559a4726e5fd51effbdef3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:29:14 +0100 Subject: [PATCH 02/33] Bump google.golang.org/protobuf from 1.32.0 to 1.33.0 (#9362) Bumps google.golang.org/protobuf from 1.32.0 to 1.33.0. --- updated-dependencies: - dependency-name: google.golang.org/protobuf dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f47c19cadf3..0ece280d900 100644 --- a/go.mod +++ b/go.mod @@ -187,7 +187,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect google.golang.org/grpc v1.61.0 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect helm.sh/helm/v3 v3.14.2 // indirect diff --git a/go.sum b/go.sum index a4209b2456b..1be2b2420d6 100644 --- a/go.sum +++ b/go.sum @@ -677,8 +677,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From cebb64f38a1ee86da5fac50d8d06f94c783ac0de Mon Sep 17 00:00:00 2001 From: Nic Date: Thu, 14 Mar 2024 06:27:16 -0500 Subject: [PATCH 03/33] [CISA KEVs] New Integration - CISA Known Exploited Vulnerabilities Tracking (#9240) --- .github/CODEOWNERS | 1 + packages/cisa_kevs/LICENSE.txt | 21 + packages/cisa_kevs/_dev/build/build.yml | 3 + packages/cisa_kevs/_dev/build/docs/README.md | 15 + .../_dev/deploy/docker/docker-compose.yml | 14 + .../_dev/deploy/docker/files/config.yml | 25 + packages/cisa_kevs/changelog.yml | 6 + .../test/pipeline/test-cisakev-ndjson.log | 3 + .../test-cisakev-ndjson.log-expected.json | 109 ++ .../_dev/test/pipeline/test-common-config.yml | 3 + .../_dev/test/system/test-default-config.yml | 7 + .../agent/stream/httpjson.yml.hbs | 42 + .../elasticsearch/ingest_pipeline/default.yml | 137 ++ .../vulnerability/fields/base-fields.yml | 12 + .../vulnerability/fields/beats.yml | 3 + .../data_stream/vulnerability/fields/ecs.yml | 24 + .../vulnerability/fields/fields.yml | 44 + .../data_stream/vulnerability/manifest.yml | 69 + .../vulnerability/sample_event.json | 61 + packages/cisa_kevs/docs/README.md | 109 ++ packages/cisa_kevs/img/cisa_kevs.png | Bin 0 -> 355178 bytes packages/cisa_kevs/img/icon.svg | 4 + ...-dcb4dd40-d17a-11ee-b159-799470efb549.json | 1125 +++++++++++++++++ packages/cisa_kevs/manifest.yml | 40 + packages/cisa_kevs/validation.yml | 3 + 25 files changed, 1880 insertions(+) create mode 100644 packages/cisa_kevs/LICENSE.txt create mode 100644 packages/cisa_kevs/_dev/build/build.yml create mode 100644 packages/cisa_kevs/_dev/build/docs/README.md create mode 100644 packages/cisa_kevs/_dev/deploy/docker/docker-compose.yml create mode 100644 packages/cisa_kevs/_dev/deploy/docker/files/config.yml create mode 100644 packages/cisa_kevs/changelog.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log create mode 100644 packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log-expected.json create mode 100644 packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/_dev/test/system/test-default-config.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/agent/stream/httpjson.yml.hbs create mode 100644 packages/cisa_kevs/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/fields/base-fields.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/fields/beats.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/fields/ecs.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/fields/fields.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/manifest.yml create mode 100644 packages/cisa_kevs/data_stream/vulnerability/sample_event.json create mode 100644 packages/cisa_kevs/docs/README.md create mode 100644 packages/cisa_kevs/img/cisa_kevs.png create mode 100644 packages/cisa_kevs/img/icon.svg create mode 100644 packages/cisa_kevs/kibana/dashboard/cisa_kevs-dcb4dd40-d17a-11ee-b159-799470efb549.json create mode 100644 packages/cisa_kevs/manifest.yml create mode 100644 packages/cisa_kevs/validation.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index dc1d682116c..4d88f0ac5cc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -110,6 +110,7 @@ /packages/cel @elastic/security-service-integrations /packages/ceph @elastic/obs-infraobs-integrations /packages/checkpoint @elastic/sec-deployment-and-devices +/packages/cisa_kevs @elastic/security-service-integrations /packages/cisco_aironet @elastic/sec-deployment-and-devices /packages/cisco_asa @elastic/sec-deployment-and-devices /packages/cisco_duo @elastic/security-service-integrations diff --git a/packages/cisa_kevs/LICENSE.txt b/packages/cisa_kevs/LICENSE.txt new file mode 100644 index 00000000000..44d36d98d5e --- /dev/null +++ b/packages/cisa_kevs/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 nicpenning + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/cisa_kevs/_dev/build/build.yml b/packages/cisa_kevs/_dev/build/build.yml new file mode 100644 index 00000000000..2bfcfc223b0 --- /dev/null +++ b/packages/cisa_kevs/_dev/build/build.yml @@ -0,0 +1,3 @@ +dependencies: + ecs: + reference: "git@v8.11.0" diff --git a/packages/cisa_kevs/_dev/build/docs/README.md b/packages/cisa_kevs/_dev/build/docs/README.md new file mode 100644 index 00000000000..efd95b44645 --- /dev/null +++ b/packages/cisa_kevs/_dev/build/docs/README.md @@ -0,0 +1,15 @@ +# CISA KEV integration + +This integration is for [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) logs. This data can be useful for current awareness of Known Exploited Vulnerabilities according to CISA and also for enriching other vulnerability scan data in the Elastic stack. It includes the following datasets for retrieving logs from the CISA KEV website: + +- `vulnerability` dataset: Supports vulnerabilities classified as known exploited from CISA. + +## Logs + +### Vulnerabilities + +The CISA KEV data_stream retrieves vulnerability information from the endpoint `https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json`. + +{{event "vulnerability"}} + +{{fields "vulnerability"}} diff --git a/packages/cisa_kevs/_dev/deploy/docker/docker-compose.yml b/packages/cisa_kevs/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 00000000000..c09fbc181a1 --- /dev/null +++ b/packages/cisa_kevs/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,14 @@ +version: "2.3" +services: + cisakev: + image: docker.elastic.co/observability/stream:v0.7.0 + ports: + - 8080 + volumes: + - ./files:/files:ro + environment: + PORT: 8080 + command: + - http-server + - --addr=:8080 + - --config=/files/config.yml diff --git a/packages/cisa_kevs/_dev/deploy/docker/files/config.yml b/packages/cisa_kevs/_dev/deploy/docker/files/config.yml new file mode 100644 index 00000000000..d8ffa6efcc3 --- /dev/null +++ b/packages/cisa_kevs/_dev/deploy/docker/files/config.yml @@ -0,0 +1,25 @@ +rules: + - path: /sites/default/files/feeds/known_exploited_vulnerabilities.json + methods: ["GET"] + request_headers: + Content-Type: "application/json" + responses: + - status_code: 200 + body: |- + { + "title": "CISA Catalog of Known Exploited Vulnerabilities", + "catalogVersion": "2024.02.16", + "dateReleased": "2024-02-16T19:54:05.3915Z", + "count": 1081, + "vulnerabilities": [ + { + "cveID":"CVE-2020-3259","vendorProject":"Cisco","product":"Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)","vulnerabilityName":"Cisco ASA and FTD Information Disclosure Vulnerability","dateAdded":"2024-02-15","shortDescription":"Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-03-07","knownRansomwareCampaignUse":"Known","notes":"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB" + }, + { + "cveID":"CVE-2024-21410","vendorProject":"Microsoft","product":"Exchange Server","vulnerabilityName":"Microsoft Exchange Server Privilege Escalation Vulnerability","dateAdded":"2024-02-15","shortDescription":"Microsoft Exchange Server contains an unspecified vulnerability that allows for privilege escalation.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-03-07","knownRansomwareCampaignUse":"Unknown","notes":"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21410" + }, + { + "cveID":"CVE-2024-1709","vendorProject":"ConnectWise","product":"ScreenConnect","vulnerabilityName":"ConnectWise ScreenConnect Authentication Bypass Vulnerability","dateAdded":"2024-02-22","shortDescription":"ConnectWise ScreenConnect contains an authentication bypass vulnerability that allows an attacker with network access to the management interface to create a new, administrator-level account on affected devices.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-02-29","knownRansomwareCampaignUse":"Known","notes":"https://www.connectwise.com/company/trust/security-bulletins/connectwise-screenconnect-23.9.8" + } + ] + } diff --git a/packages/cisa_kevs/changelog.yml b/packages/cisa_kevs/changelog.yml new file mode 100644 index 00000000000..d7eb51a79bb --- /dev/null +++ b/packages/cisa_kevs/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.1.0" + changes: + - description: Initial draft of the package + type: enhancement + link: https://github.com/elastic/integrations/pull/9240 diff --git a/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log new file mode 100644 index 00000000000..2463f40da5a --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log @@ -0,0 +1,3 @@ +{"cveID":"CVE-2020-3259","vendorProject":"Cisco","product":"Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)","vulnerabilityName":"Cisco ASA and FTD Information Disclosure Vulnerability","dateAdded":"2024-02-15","shortDescription":"Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-03-07","knownRansomwareCampaignUse":"Known","notes":"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB"} +{"cveID":"CVE-2024-21410","vendorProject":"Microsoft","product":"Exchange Server","vulnerabilityName":"Microsoft Exchange Server Privilege Escalation Vulnerability","dateAdded":"2024-02-15","shortDescription":"Microsoft Exchange Server contains an unspecified vulnerability that allows for privilege escalation.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-03-07","knownRansomwareCampaignUse":"Unknown","notes":"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21410"} +{"cveID":"CVE-2024-1709","vendorProject":"ConnectWise","product":"ScreenConnect","vulnerabilityName":"ConnectWise ScreenConnect Authentication Bypass Vulnerability","dateAdded":"2024-02-22","shortDescription":"ConnectWise ScreenConnect contains an authentication bypass vulnerability that allows an attacker with network access to the management interface to create a new, administrator-level account on affected devices.","requiredAction":"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.","dueDate":"2024-02-29","knownRansomwareCampaignUse":"Known","notes":"https://www.connectwise.com/company/trust/security-bulletins/connectwise-screenconnect-23.9.8"} diff --git a/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log-expected.json b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log-expected.json new file mode 100644 index 00000000000..7ebbac62ce9 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-cisakev-ndjson.log-expected.json @@ -0,0 +1,109 @@ +{ + "expected": [ + { + "@timestamp": "2024-02-15T00:00:00.000Z", + "cisa_kev": { + "vulnerability": { + "date_added": "2024-02-15", + "due_date": "2024-03-07", + "known_ransomware_campaign_use": "Known", + "name": "Cisco ASA and FTD Information Disclosure Vulnerability", + "notes": "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB", + "product": "Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)", + "required_action": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.", + "vendor_project": "Cisco" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "vulnerability" + ], + "kind": "enrichment", + "original": "{\"cveID\":\"CVE-2020-3259\",\"vendorProject\":\"Cisco\",\"product\":\"Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)\",\"vulnerabilityName\":\"Cisco ASA and FTD Information Disclosure Vulnerability\",\"dateAdded\":\"2024-02-15\",\"shortDescription\":\"Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.\",\"requiredAction\":\"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.\",\"dueDate\":\"2024-03-07\",\"knownRansomwareCampaignUse\":\"Known\",\"notes\":\"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB\"}", + "type": [ + "info" + ] + }, + "tags": [ + "preserve_original_event" + ], + "vulnerability": { + "description": "Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.", + "id": "CVE-2020-3259" + } + }, + { + "@timestamp": "2024-02-15T00:00:00.000Z", + "cisa_kev": { + "vulnerability": { + "date_added": "2024-02-15", + "due_date": "2024-03-07", + "known_ransomware_campaign_use": "Unknown", + "name": "Microsoft Exchange Server Privilege Escalation Vulnerability", + "notes": "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21410", + "product": "Exchange Server", + "required_action": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.", + "vendor_project": "Microsoft" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "vulnerability" + ], + "kind": "enrichment", + "original": "{\"cveID\":\"CVE-2024-21410\",\"vendorProject\":\"Microsoft\",\"product\":\"Exchange Server\",\"vulnerabilityName\":\"Microsoft Exchange Server Privilege Escalation Vulnerability\",\"dateAdded\":\"2024-02-15\",\"shortDescription\":\"Microsoft Exchange Server contains an unspecified vulnerability that allows for privilege escalation.\",\"requiredAction\":\"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.\",\"dueDate\":\"2024-03-07\",\"knownRansomwareCampaignUse\":\"Unknown\",\"notes\":\"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21410\"}", + "type": [ + "info" + ] + }, + "tags": [ + "preserve_original_event" + ], + "vulnerability": { + "description": "Microsoft Exchange Server contains an unspecified vulnerability that allows for privilege escalation.", + "id": "CVE-2024-21410" + } + }, + { + "@timestamp": "2024-02-22T00:00:00.000Z", + "cisa_kev": { + "vulnerability": { + "date_added": "2024-02-22", + "due_date": "2024-02-29", + "known_ransomware_campaign_use": "Known", + "name": "ConnectWise ScreenConnect Authentication Bypass Vulnerability", + "notes": "https://www.connectwise.com/company/trust/security-bulletins/connectwise-screenconnect-23.9.8", + "product": "ScreenConnect", + "required_action": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.", + "vendor_project": "ConnectWise" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "vulnerability" + ], + "kind": "enrichment", + "original": "{\"cveID\":\"CVE-2024-1709\",\"vendorProject\":\"ConnectWise\",\"product\":\"ScreenConnect\",\"vulnerabilityName\":\"ConnectWise ScreenConnect Authentication Bypass Vulnerability\",\"dateAdded\":\"2024-02-22\",\"shortDescription\":\"ConnectWise ScreenConnect contains an authentication bypass vulnerability that allows an attacker with network access to the management interface to create a new, administrator-level account on affected devices.\",\"requiredAction\":\"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.\",\"dueDate\":\"2024-02-29\",\"knownRansomwareCampaignUse\":\"Known\",\"notes\":\"https://www.connectwise.com/company/trust/security-bulletins/connectwise-screenconnect-23.9.8\"}", + "type": [ + "info" + ] + }, + "tags": [ + "preserve_original_event" + ], + "vulnerability": { + "description": "ConnectWise ScreenConnect contains an authentication bypass vulnerability that allows an attacker with network access to the management interface to create a new, administrator-level account on affected devices.", + "id": "CVE-2024-1709" + } + } + ] +} \ No newline at end of file diff --git a/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-common-config.yml b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 00000000000..4da22641654 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_original_event diff --git a/packages/cisa_kevs/data_stream/vulnerability/_dev/test/system/test-default-config.yml b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..7608bf4dee4 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/_dev/test/system/test-default-config.yml @@ -0,0 +1,7 @@ +input: httpjson +service: cisakev +data_stream: + vars: + url: http://{{Hostname}}:{{Port}}/sites/default/files/feeds/known_exploited_vulnerabilities.json + preserve_original_event: true + enable_request_tracer: true diff --git a/packages/cisa_kevs/data_stream/vulnerability/agent/stream/httpjson.yml.hbs b/packages/cisa_kevs/data_stream/vulnerability/agent/stream/httpjson.yml.hbs new file mode 100644 index 00000000000..35ba1467932 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/agent/stream/httpjson.yml.hbs @@ -0,0 +1,42 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" +{{#if enable_request_tracer}} +request.tracer.filename: "../../logs/httpjson/http-request-trace-*.ndjson" +request.tracer.maxbackups: 5 +{{/if}} + +{{#if url}} +request.url: {{url}} +{{/if}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} +request.transforms: +- set: + target: header.Content-Type + value: application/json + +response.split: + target: body.vulnerabilities + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/cisa_kevs/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml b/packages/cisa_kevs/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..4a47dd9e240 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,137 @@ +--- +description: Pipeline for parsing the CISA KEV Catalog +processors: + #################### + # Event ECS fields # + #################### + - set: + field: ecs.version + value: '8.11.0' + - set: + field: event.kind + value: enrichment + - set: + field: event.category + value: [vulnerability] + - set: + field: event.type + value: [info] + ###################### + # General ECS fields # + ###################### + - rename: + field: message + target_field: event.original + ignore_missing: true + if: ctx.event?.original == null + - json: + field: event.original + target_field: cisa_kev + - fingerprint: + fields: + - cisa_kev.cveID + target_field: "_id" + - date: + field: cisa_kev.dateAdded + formats: + - "yyyy-MM-dd" + tag: "cisa_added_date" + on_failure: + - remove: + field: cisa_kev.dateAdded + ignore_failure: true + - append: + field: error.message + value: "fail-{{{ _ingest.on_failure_processor_tag }}}" + - fail: + message: "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 }}" + + ##################### + # Vulnerability ECS Fields # + ##################### + - rename: + field: cisa_kev.cveID + target_field: vulnerability.id + ignore_missing: true + - rename: + field: cisa_kev.shortDescription + target_field: vulnerability.description + ignore_missing: true + + ##################### + # CISA KEV Custom Fields # + ##################### + - rename: + field: cisa_kev.product + target_field: cisa_kev.vulnerability.product + ignore_missing: true + - rename: + field: cisa_kev.vulnerabilityName + target_field: cisa_kev.vulnerability.name + ignore_missing: true + - rename: + field: cisa_kev.notes + target_field: cisa_kev.vulnerability.notes + ignore_missing: true + - rename: + field: cisa_kev.dueDate + target_field: cisa_kev.vulnerability.due_date + ignore_missing: true + - rename: + field: cisa_kev.vendorProject + target_field: cisa_kev.vulnerability.vendor_project + ignore_missing: true + - rename: + field: cisa_kev.knownRansomwareCampaignUse + target_field: cisa_kev.vulnerability.known_ransomware_campaign_use + ignore_missing: true + - rename: + field: cisa_kev.requiredAction + target_field: cisa_kev.vulnerability.required_action + ignore_missing: true + - rename: + field: cisa_kev.dateAdded + target_field: cisa_kev.vulnerability.date_added + ignore_missing: true + + ###################### + # Cleanup processors # + ###################### + + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_failure: true + ignore_missing: true + - script: + description: Remove null/empty values recursively. + lang: painless + source: |- + boolean drop(Object o) { + if (o == null || o == '') { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); + tag: 'Remove null/empty values recursively.' + on_failure: + - append: + field: error.message + value: "fail-{{{ _ingest.on_failure_processor_tag }}}" + - fail: + message: "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 }}" + +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: '{{{ _ingest.on_failure_message }}}' diff --git a/packages/cisa_kevs/data_stream/vulnerability/fields/base-fields.yml b/packages/cisa_kevs/data_stream/vulnerability/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/cisa_kevs/data_stream/vulnerability/fields/beats.yml b/packages/cisa_kevs/data_stream/vulnerability/fields/beats.yml new file mode 100644 index 00000000000..3c48f1f224f --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/fields/beats.yml @@ -0,0 +1,3 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. diff --git a/packages/cisa_kevs/data_stream/vulnerability/fields/ecs.yml b/packages/cisa_kevs/data_stream/vulnerability/fields/ecs.yml new file mode 100644 index 00000000000..c8f59ebea1b --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/fields/ecs.yml @@ -0,0 +1,24 @@ +- external: ecs + name: ecs.version +- external: ecs + name: message +- external: ecs + name: error.message +- external: ecs + name: tags +- external: ecs + name: event.ingested +- external: ecs + name: event.kind +- external: ecs + name: event.category +- external: ecs + name: event.type +- external: ecs + name: event.created +- external: ecs + name: event.original +- external: ecs + name: vulnerability.id +- external: ecs + name: vulnerability.description diff --git a/packages/cisa_kevs/data_stream/vulnerability/fields/fields.yml b/packages/cisa_kevs/data_stream/vulnerability/fields/fields.yml new file mode 100644 index 00000000000..4400eeb0e43 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/fields/fields.yml @@ -0,0 +1,44 @@ +- name: cisa_kev.vulnerability + type: group + description: All fields related to the CISA Known Exploited Vulnerabilities. + fields: + - name: vendor_project + type: keyword + description: > + The vendor or project name for the vulnerability + + - name: product + type: keyword + description: > + The vulnerability product + + - name: name + type: keyword + description: > + The name of the vulnerability + + - name: date_added + type: date + description: > + The date the vulnerability was added to the catalog in the format YYYY-MM-DD + + - name: required_action + type: keyword + description: > + The required action to address the vulnerability + + - name: due_date + type: date + description: > + The date the required action is due in the format YYYY-MM-DD + + - name: known_ransomware_campaign_use + type: keyword + description: > + 'Known' if this vulnerability is known to have been leveraged as part of a ransomware campaign; 'Unknown' if CISA lacks confirmation that the vulnerability has been utilized for ransomware + + - name: notes + type: keyword + description: > + Any additional notes about the vulnerability + diff --git a/packages/cisa_kevs/data_stream/vulnerability/manifest.yml b/packages/cisa_kevs/data_stream/vulnerability/manifest.yml new file mode 100644 index 00000000000..f0ff1745714 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/manifest.yml @@ -0,0 +1,69 @@ +title: "CISA Known Exploited Vulnerabilities List" +type: logs +streams: + - input: httpjson + vars: + - name: url + type: text + title: CISA KEV URL Catalog API endpoint + multi: false + required: true + show_user: false + default: https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json + - name: http_client_timeout + type: text + title: HTTP Client Timeout + description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. + multi: false + required: false + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http\[s\]://:@: + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 60m + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - cisa-kev + - 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: 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. + + template_path: httpjson.yml.hbs + title: CISA KEV Catalog logs + description: Collect CISA Known Exploited Vulnerability logs diff --git a/packages/cisa_kevs/data_stream/vulnerability/sample_event.json b/packages/cisa_kevs/data_stream/vulnerability/sample_event.json new file mode 100644 index 00000000000..f43c76a06c6 --- /dev/null +++ b/packages/cisa_kevs/data_stream/vulnerability/sample_event.json @@ -0,0 +1,61 @@ +{ + "@timestamp": "2024-02-15T00:00:00.000Z", + "agent": { + "ephemeral_id": "39957f93-aff4-4e3f-84f0-66d18441ccd6", + "id": "7edf8be5-ad5d-4c57-a6bd-b86bddc66601", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.2" + }, + "cisa_kev": { + "vulnerability": { + "date_added": "2024-02-15", + "due_date": "2024-03-07", + "known_ransomware_campaign_use": "Known", + "name": "Cisco ASA and FTD Information Disclosure Vulnerability", + "notes": "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB", + "product": "Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)", + "required_action": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.", + "vendor_project": "Cisco" + } + }, + "data_stream": { + "dataset": "cisa_kevs.vulnerability", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "7edf8be5-ad5d-4c57-a6bd-b86bddc66601", + "snapshot": false, + "version": "8.12.2" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "vulnerability" + ], + "created": "2024-03-13T01:01:09.893Z", + "dataset": "cisa_kevs.vulnerability", + "ingested": "2024-03-13T01:01:21Z", + "kind": "enrichment", + "original": "{\"cveID\":\"CVE-2020-3259\",\"dateAdded\":\"2024-02-15\",\"dueDate\":\"2024-03-07\",\"knownRansomwareCampaignUse\":\"Known\",\"notes\":\"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB\",\"product\":\"Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)\",\"requiredAction\":\"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.\",\"shortDescription\":\"Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.\",\"vendorProject\":\"Cisco\",\"vulnerabilityName\":\"Cisco ASA and FTD Information Disclosure Vulnerability\"}", + "type": [ + "info" + ] + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "cisa-kev" + ], + "vulnerability": { + "description": "Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.", + "id": "CVE-2020-3259" + } +} \ No newline at end of file diff --git a/packages/cisa_kevs/docs/README.md b/packages/cisa_kevs/docs/README.md new file mode 100644 index 00000000000..6ed2519e47e --- /dev/null +++ b/packages/cisa_kevs/docs/README.md @@ -0,0 +1,109 @@ +# CISA KEV integration + +This integration is for [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) logs. This data can be useful for current awareness of Known Exploited Vulnerabilities according to CISA and also for enriching other vulnerability scan data in the Elastic stack. It includes the following datasets for retrieving logs from the CISA KEV website: + +- `vulnerability` dataset: Supports vulnerabilities classified as known exploited from CISA. + +## Logs + +### Vulnerabilities + +The CISA KEV data_stream retrieves vulnerability information from the endpoint `https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json`. + +An example event for `vulnerability` looks as following: + +```json +{ + "@timestamp": "2024-02-15T00:00:00.000Z", + "agent": { + "ephemeral_id": "39957f93-aff4-4e3f-84f0-66d18441ccd6", + "id": "7edf8be5-ad5d-4c57-a6bd-b86bddc66601", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.2" + }, + "cisa_kev": { + "vulnerability": { + "date_added": "2024-02-15", + "due_date": "2024-03-07", + "known_ransomware_campaign_use": "Known", + "name": "Cisco ASA and FTD Information Disclosure Vulnerability", + "notes": "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB", + "product": "Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)", + "required_action": "Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.", + "vendor_project": "Cisco" + } + }, + "data_stream": { + "dataset": "cisa_kevs.vulnerability", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "7edf8be5-ad5d-4c57-a6bd-b86bddc66601", + "snapshot": false, + "version": "8.12.2" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "vulnerability" + ], + "created": "2024-03-13T01:01:09.893Z", + "dataset": "cisa_kevs.vulnerability", + "ingested": "2024-03-13T01:01:21Z", + "kind": "enrichment", + "original": "{\"cveID\":\"CVE-2020-3259\",\"dateAdded\":\"2024-02-15\",\"dueDate\":\"2024-03-07\",\"knownRansomwareCampaignUse\":\"Known\",\"notes\":\"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-info-disclose-9eJtycMB\",\"product\":\"Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD)\",\"requiredAction\":\"Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.\",\"shortDescription\":\"Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.\",\"vendorProject\":\"Cisco\",\"vulnerabilityName\":\"Cisco ASA and FTD Information Disclosure Vulnerability\"}", + "type": [ + "info" + ] + }, + "input": { + "type": "httpjson" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "cisa-kev" + ], + "vulnerability": { + "description": "Cisco Adaptive Security Appliance (ASA) and Firepower Threat Defense (FTD) contain an information disclosure vulnerability. An attacker could retrieve memory contents on an affected device, which could lead to the disclosure of confidential information due to a buffer tracking issue when the software parses invalid URLs that are requested from the web services interface. This vulnerability affects only specific AnyConnect and WebVPN configurations.", + "id": "CVE-2020-3259" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| cisa_kev.vulnerability.date_added | The date the vulnerability was added to the catalog in the format YYYY-MM-DD | date | +| cisa_kev.vulnerability.due_date | The date the required action is due in the format YYYY-MM-DD | date | +| cisa_kev.vulnerability.known_ransomware_campaign_use | 'Known' if this vulnerability is known to have been leveraged as part of a ransomware campaign; 'Unknown' if CISA lacks confirmation that the vulnerability has been utilized for ransomware | keyword | +| cisa_kev.vulnerability.name | The name of the vulnerability | keyword | +| cisa_kev.vulnerability.notes | Any additional notes about the vulnerability | keyword | +| cisa_kev.vulnerability.product | The vulnerability product | keyword | +| cisa_kev.vulnerability.required_action | The required action to address the vulnerability | keyword | +| cisa_kev.vulnerability.vendor_project | The vendor or project name for the vulnerability | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | `event.created` contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from `@timestamp` in that `@timestamp` typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, `@timestamp` should be used. | date | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data is coming in at a regular interval or not. | keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| input.type | Type of Filebeat input. | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | List of keywords used to tag each event. | keyword | +| vulnerability.description | The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description]) | keyword | +| vulnerability.description.text | Multi-field of `vulnerability.description`. | match_only_text | +| vulnerability.id | The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID] | keyword | + diff --git a/packages/cisa_kevs/img/cisa_kevs.png b/packages/cisa_kevs/img/cisa_kevs.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa3f18b60a002ae57aca77307ec64bb158588cd GIT binary patch literal 355178 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

l|fHR(f*C%^0l`Re5Yu z($|T~nNABVd>-78kuqvG#Q*w6i|;^>t3lAY7+5J{_Q11E8Lf)ZL#%C537sfKJ1Pl% z;*01N+($zUuk)sVff$Lr{iBc<{EqUNzM20VYwAS>kx%e6qmF zR7?BlN7cmI8bsFHS8T>dM5(TK1Sz)*X$EPZ8=jZrfbJ=aF=n^%!I7&OVH^`IHrW=B zXGsSc-L6#s$u$8K+sg|~^?|079m&cDjToz;QQ^dm4W#ZdS%{5gf=b-28H|!FYCuolSUWIzA+8Ugyy#GbeSLy<=YX8_x1T9PS0zFs z$(zZp24LGX9N@FKSb?iHxQqiK40c8FC52|T-;t1!A)I%_6CNfgLJ)CuX_+l9(? zElmZr{3(OEqg&VAIhTt^to2QB?e>-n9f#90Gmx@Ssx5QieeibRo!(}%#LE->-f{D} z>wW#>PBvLN2L**HH<7h<)fImERk(x^Xn*6)XEg{gW1@6a($iOe=ybp1my^rkhMvAX zbA2im+c-NTpQz0n+bpNh3QA=v3fH?TEzCE=yMd7i$BW+7T@T{5aSwoaM#4vJem_bl zl9N-Tr2ikAl}Rs9JIqrGKYOR@L03AhZl5{&y`z6jdrYvBMLI}wld*#Dp3%vsV}F%*RJ5BD`iRLD zr>L3;CnTtPEg1H&>k!&R8dN*{l#4ox6&LGRMOjY4Ta3$hHjGl3O@-HTwh!Fr+BgRe zvY=Ug5t%$@vK+x`j`In@pm@@ZPHs8Z6UZADr_6zyRXIm)jIub!gd!t}b$KU0-AaX^ zjJ``-xQn3PDS3ca91}&G-Btd9N4I(bQ5jpFT+J?D@#DL^XZLhUE27Nbyzh1#lj2%$ zxdi&>dR_z=(}gjP>kUNaAZXeIM@dDMEr^sG&IByuxh7RQtjt+N z_5_`v$7P3D#iHF4UBDs~3X9L#mj{6Hbez=zxx3+xAqD> zl%kL34aJ*!tLO?Fl!dO>Yd0k|UC%h%xPNyykxtq@Yh1kIz-fA1Y%H+UvDC|60;)VP zaNA&Po!84fPxd_PU$t{}rHmdN{3naLvzuY1d^kQc3_amPM2Y zF#)uFjpl)@>vlPGqK_5RR;C1LmhX-b5RhNby%5f+#D#=U;a|54H60^f&$4{q?-!Lv z>*%EZm2vz2D<2u6JWojP)F1cYIu+$Gpu-;UJPHJ!3sUNrXA$JZsZ#wvqR=K-!gu)o z83m^Dd9m~Kf5k;#?sjc2Zv^;_RNcmdDL<*JC($#yt#-WV`ACQ&uhLa4^T(n{ZGRZF z(he6Y_rc8UV}APqdegF2+Pe%P;4sMO?v)@IplHcY2E1Z9wCjL?$urv>*+YWKF1NTF z%tg7e-uP*R$zEPjgKh%Kk(xzmpzweJ#C^kJeo%PK%0dQ`+r#*pBSz5z{a`Ti-sxMl z5FMLb=dgLO6ZuP~Q!c~lW7-jH!ftT{T6@NB?dwEvnJ@Dk!@8D|zVPP3Y|Y=04xVuYg;kT}4SN z5)j7&+RabAYikGV-PM$aTG<*;fXK-b#=7h9GhhaXK^p7C({6L@ty+EFVJSHG?1Vt# zv85M{!HxccHn`PllKp#7T2ln)kSSM6P2)bbn6T%=VHcIHCm>;B$9GWD`2?s#23K8H z!%_MwpMN-AHHL_Ic#|kMdO4e>$qwt_2(#ziADF5P*V$@Fr9Ki z`JBf#HJV-DiK;iw z3FrMtfRm~o)wRILREfdK=^QEO>WcmG)D^Bg_AW8>vDv> z|FDMI8GvuGu-kQKQQ0Tc2ho{4HbJ5PF08eeWfQg5Gh&k$<+uhzpxhMxrULC|vDZMP z`?#sLX~q2gG)Pi5aj~@A?)KEn_6?N+$*OlR`#s{D*{Zb=MV?{zl!2SqtlP5NZ{@rf zgON=u@XfX+_;nv^I!2i(Sh}-aKDZ`IpjrfEmqiIDZV0PbdiYery));+8>2sSF7guH zUHcZYApGa(iwk#5*S1L*W88N??*O8|a$DIcB;R&aMjdbrD_*Bl;KA}4bc5I9Rc0yL z_Fp^tgf>nNqem({-4JuAY5j`wU{U&>gcNn4Kv|7}#7@2{yO=#(jOc6nJ(J1{8yEDW zzlc1vJbxq??-LvD3zUpf$F>-tIeT*hsp3^ZZ4LT&l-jZn9;A2Pk8q66VtwC|BP(Pz zm80U1T@3a^`1Ib{y1%|3*rnXK%TondI~bfgAGWawr7#A^tJnu4YT&q_}>&Y?9&blz~ygY-Y)CY{OHGsKez}MKMTd=rBDhQ0_GM z2xVh!bFnf8Fapn64LFrui0xw}>CUX?ay7=OOBkuZBl2e-VI=U(lynWlbjZb_L! zIO@31ODjH?%V~i8lT4GHi$h2Nw=l}7kgG7Zxp_tQ)Z$`mXe7KCkdfXZ)7vWu>@|W1 zPA|#VuV1pV2-)qKbu6>VVMX_M_5_M8*o_ptZp#ypVWY7yG4gG)b++6?5MxPfE#bCM z-DzivWO|PheKy9~bWpFeJl>Rn9LtxbtHm4bR-1PLcp_G{ljQjP{D*Y^VRS9)DmbsT z@CeC)>%C)5tc{|DvAc)=#s~1>ze-yoD9y50Owij?hd(tns?kjsK%uu6Pt?oTQ4h%Q z*lc{X?tkN9^KSD_xk>n~S4~?Dj=8}vtlh(suf3AE$0PzvqT5EBeJLNMjw7>PVX8V+ zbxa~VqHjL^Xc3}6yo>3Zp%<=@#S!$XP74dW?+69v`aY-oZokXsS3Cg%*>}>(#ko(w zn1D+79kgB#!C6{gU6Mb;?ika})I6dXe%Z4ggrc;s-sbx21409*JqL!ox=2?*@ zXOH0xczFqfM(9Gk0L_hAm`P8LMMNKna1;<;!Oh@JPsNdn7(?vy;1nKcVoDq?TM+h$ zZdy4!CZHGdcgtBclW_4lI)|~Ce}_q zxQ+MMkJa9p`NESAJ5L1YPUxdyD(c_;ds98~3ZIW4vFMTTAG}ebt5>Mc;_pb!=2T3} z5)8ax`LorUKmEaT4pW#7{J79y72gw>w#9gobXQ8vrR!eNsb5_)R2AbR{B-w;#B?Q& z`{g6bN-3KRA^4jFmExXd{Pv~9`hsI!VpEZX7F)VB_ zGDaf`LVp2^Q>pn9>R4~bWcIM}#Z}3%`rP$dHrm-a1w}aY znJZOIb61LLrn4L$ZhrNTWpxy+&A-u1ln}}O0!rb%@8#~eoPRdZS_%bJDKJ)ag$iGg zkYH_DdCk)9qDB+|#oJyCDNu?@<^49mi* zFQ86{AU-R_>Ac}~JY4zWaNZ8b=lRYN7bi2H6jYRR-6O>CaIsB4;B4v+NITil2}u1% zSw9CrBq}RUH>I7abYM@U*T=`h94*V;(v2AZ4=`f#Z&W6^F-Aj7+}-Fa$Q)Lr(Jx#0 zGNQo-o746TnZ>#s^sy{KKnSP7`6`B4Bbm{z^F?UjrN~+mr-k{fN|nE)g$F9qs)Reg zJf!&`vaxivsG+M^w}vI6IZUq#!HG^W%mf$dL29v`c`pZ>O$}HP{5^Hffx5B>;5H>| zSeqa*Sb}F9ZI}S_yJ5l-L}?jgM|ulFn6gOT?DfFj#!2AstW3GA*iW4rp8`Zf{2$O@ zjutVhy4Fb8HIw4V7)@`>a1)A*zZU3Dd|v0dO)NCd9}PsocHBoeU^?c6_qlN15gp3s zrja!Q7oBrMvhfi``fPr^Nn=1EC2AFlWYJ189`DFyI7dsiL09j~&u)S4v`GmRaG4ma zdA30j*s(Y3^tC1^pcn8c39kSll-t9}Y0J@mj77g7OKc4yi3dwURw?RF9x_~1spom# z*0eV3{U%@n+8Bs!oVs8-Xigm3j%R-S*9NiU`8?G9L}z=CYckTopNW=uRAIgwvr9_>W0>o?pP4wT$ zPu(YVG&7~O44)3#8eAt1>jF9#>D9 zl%ZS@PHtrGG6XSxE@Of59y6Ik$>F^^exYXp$SbujR>n4_$z9lPeE|ooJ4Z|LH3vr3 zCA_2?Tl(L-#VP!vIv=To@32W2y*fV%{y3X29zaGyM=s*8l(j|o=eiFT+$8>Ztt4I$ z&=3`uVT4^^ILyY5x;gE|#ja8BZ<_H|Ztbn5^f`BIwWjLRkGDIM&0Ts`RJ&V#wR=BX zr{=RynH!>gd^g#yOtAIQ`DG0s4EMOhH)qbdPQyNY4_bn<a$x%1zKHZ$oZMYo){uswY zGXK`-Xv8fB&$~yLyh!HU4>xOG(8yTX#Ffj^kRd=|Fb$)Fkf6VL^Y;F6K>1)aY7aK`v6NG8Vv39&jYvYOs;os`=eznzCL2l^ zLM!Acm1bHsCG$qMxC~{npM`ARYIgtR5aOQL0=iV7Ttvi~Q0ukBJYc9_X9+sOF_F=o zN(fx72sxrqpHr!jwG*%en)RBV?;)JK(%_ zx01g0Jbhg*D+>Yl{oX#$oZyvwCG@PX3InIPe|%II{uO!3;iuIPFa`TZp`sNkYFA_w zFaqq*q}lyOTWfXh`okhH$W~9y2$LaFUt>=hBD+VYz(Z5Gzn%75iH&s-8QQpiJe&5C zn`{PXO@!dYoE(NmHq-P^)tv+GK3CUgXK2K$6BSEd#7ZCAhAzZg&UCBwr@QxZX`srr zHHvO+;1w5E)b}cXzu;wk=zp*W_C{3{)zF``Q#+b_GrOL6EgoHqEZAJfa@cptq zw6Q)h(T7lf{(EMkBh=%(3!&5F_E+-sRqgP|NKa&Hv))oI$z(d;ge?%r z`u|_i*2NTsu0D8D05GEDGfv2I-+cg_?NMRzRai4s+RwJ@Jk1f$XKR%-gzg)>9gOEz zQrT`aRq2d)t!|G7@EcE{=;Q0_YYd3XZE=c$FMQ0wXE}baxS;j6);5ES90-yFDZiP+ znW{d(Dr@(gi4=)z^6EXXmm)jEs3 z&aYJIYEYF|aN@Wc1(aS|;INm~hkf_EvJs~vfvV$hZer5m2{I7rFhsiAi)4h=1)E2h zmO{BT2>dwZ8R>q5$nMsnKR{Y-&^sCvCZ&gm%j9}*0=I#I8~F8pEwne#h@r^l{*UU{ zz5U&mqep1DL`C8eB^N?Ae2?xY4At%zN>5I;`gk*1U07a4W2Q<6`%~wZCpW_tI3$)~ zTI;H&H9CL;*E?Td52M`%YV*MHQdTP`m8}y!AN=vo_~}Pyc_ZWf@Dq12=#V8=2rmOg zU5G@t##=1#n&#;%&!9&3$Otv}d-lS`gCUXu|9e+SX{ld&x zk23_lWc;X^=H_o`5sWb-neBjxU_h^qn6nc$0tr2*K!bh)&=t&&nzE9%(LzVm8OWPW z>U8DM*VYHvgxJQ;X}U8KeD!KuFwRnFqEED@lO7GM%TY6$TT05LF+pN`a5)Z)D_~|w zs^%w19w?OC!wN4)_bg%vG~<(U4@ePnoMWj;88hHJe53ksa&Q#cK^kU@^u<>!hltz% zHMdlO#A;t4w&w(MgW`LtP~U^yJK$M3IZKl@*8uDs8Z_+g?#?`dTovOVvX6FBuq^-UT2RJ1=b2~K zYo<#v$-*H3$VV66N=(k;0aCYe_e0K(J+q*vTOGv4JRV!?f#@s%sdnUQMnd?Un|KL>y)Z|-9s6H)7> z=`UtVoZuETsa(F{Bmu&Er;|5`)S`wuMZT#v9o?<@RoYnJ=26egz^X9xgJ>gQUEWaPc1 zAyWH;t5CJV_5)u!%5--z4EzkZo>|9E+`esCv}h=2j9ye;untT_aX+e9)bfJ|Wyrb0 z^amM`$#&8oAg7x6$3j~RvmU3=&5UwHDsF$)&hCB?%n?J{F|^@u=E!=`AeV$Wyzp06 zMBX`npY(CkxFm7j4(GU>a-^p=^F4=_Puqw+linQqM7-+vQi}n)>hWWNBmm@zCYlQh z32p2+KE;hIU4bXoRUuXXd!X1B=K!-rm&&Leh23o9piezp)Fy=qgoz4lztP3e^-s|j z{&%s?3xj62&sQLUaay#o7UbX6Pdcd!si6Jpxp8(*I?-rPTn#;c27gFrM3 z?PZ-2Ikp;7d%aEctH$$_Cy9_Sd94!}mv9tr=o*`p;GJJS_;C}7{h^PDBxl*>FS=_G zRK%QVhVIA_8G1_5vb-n*lwT(I3d(GGc?%!vN_%>X)!rKRiR-(^$-D7aM+pq~i4GO+ zrqRuv9%+E3RV?VY6mwr8WGIyIAyT_VV|~A(lcInNCmI~%Fi4(0WoO!Qz*g90i-y}Rma2V;zQM(~< zfSY>H8N#q)HE(RrWz8MR%l$rKpIOv!iudtBC@+%nKc3F;lpyAElr9Y42_p$KL|R|u zUk|^8O}O2BdhP7=o5kyep(Fqc-BX2&3yyF*SsM|<9U(~q*gH64kU~!!e`%0&B4?%C z*a-O}YQjSTlk$7MlU4_h#iueQcXdT|C^1zm_O{mEl9`CGk2O&XcEGzY%@o@{#ckk} z_fEBzG<@Jx#E}q#u0>2VEz+wN$PefY;K?X(!Y_C(&CWDWu-5h98ZnK_66(|-wcb8D zCad$ZqBN~cK99ePy1Se`&5Urc!jijSCzN9;nv3j=*4HJ13U2g4# z8!a=xe_)V9d^$BQnIlhSH#aUj>_86>dOlNoLGkqG(gT!KJFWYo)s;PIHadcKdtanF z_Q@b!8a|VqU?AFF-y}vuSbXTsS&(>shrXkI)o9aYA%8tqhVR(JtX&(}*gvBjd?gqL ziaw!hvM&CA{?12Yg^~r8X4;>n9!5(DxoS-_Z6KI8cBUt9C=0M&-pqObQaW-!XJ{c z5!~f5+seM_YN$}p|9^bFRa}r;7wt`VccUQPB@NONQqmnF-6bvEAR;M9gOqejmvnb` zclTMi_q%`R`!3Fnmw@Yep0(zhbBzDUkCsCnhk=YH5o-( zsggj?fOW-kpx~^Tp&?Jxro62GUiW3OHgs`;%sjkxY;{J$rfLFy=$mRSt!^s;uNOM+ zbpylvDiOSzb3|Dd#5S|4yGH0~5N<$j0~4>V(1qTZ8fA^(PNa zQ&tzeQB402CUo&8~4P?Ds$jrxvQ ztQA_d)P$0nOGI;JEAFDq3Dw3Qo^B}+8Q9zM)Og5$vc2A{Dz2 zV_0l1c88$^nCm$PjIb&E=Y+neZH)WcCxV`Slq-kUOvUe74SOYXA#62jAS=a;hOp%*_A22Zhwn$qY7kS%ZeWsu|5M@b2BND*nvkQ?e^5#8tX8Jl5`MemJzQows7AG&v)?7usUGcYpAozTd?E zNmu+Oq1tDrJL}{u-0}Ee4ZHKaIqz5dC_0&McrZ7dzAHS*`iU1EGIzlhD~zN|p!%Cc zgf_CJ2E0Z|1u^lV*5hMT(YFag+kzkYdXdY;)oh(5*yxceMvSMqMh}1vM;M0mHYz}0 z!_;2Q(lKr`S5z}O7?Xn>W2S1+*Kk|to(M+VMa87FXV~YTHm7QP1d(vxq_0GL7fxyf{iT}bBeb_30#=J+DQb1%Z3P=# zkDY6b*HO`1XlSuq66lbx-e^$)akywPx8siK|Af*-sm}}hf;yaQ>?&;@6!F1~$Up%u zmRjEpu9Mi>D8;_At^i;{+IzmB`!&@0h9>>>L}bbAq#{Pm_9rA4?_=l!WLd-E6!xy7 z8Nb!Fd~owXSHz8L`I*muGGN8I0@~}-XFE{a6GWJ-a&y(_4Z=Ur8)cYECYo*nU0Oo+ zj=Dja6mH%|I2Bzr zS$R-Feue~3Q|ops-Tj4ZcUOjO(N>l(Q7sgB&uB~7{KTFysDGP}8h3!c=b}fu-B8C0 zTj&riX8O7pj3$doO&&+Dy{RT5{c(Z*y9sFPa%ge)&J?P5(pjVzOR@QduF2|x*Cak3 z<$ndNprt2rhb(iqwQen4#ema(oljB$ErKohNHkK{t_Khmt)G7nduqVc0OAFcyeEDBwc2}p^dpn#Hm5N11uanZ>Pld?o5xZN{W=#h9b#kemx*Y6F z#Ir_X7fnqvNHH&{TlBkRlg=Q+>a<1H9AZ4G-SrzRf($nLF`S$m1T=(!! zf#K;qUk(k2_?M&Igq)4FpgzYvl?}X1b`Av?uLDw2gS^s&$4mdL?+l=WYB+BH`M?PX zGbuB>4YE5A{q(Z1&g3Ma*|9IhGVDGl_#k-tQFJ6WXm+EGfBY~u-8|EcECJcveeqbpmr?F~UY7*&{6 zfOk8HH?hQ5F~9yG|KFxk47!2*G@NSNUw&k^?u^1um9t?2kyclN%~Duhws1Z*{~_)<|DdXIuBU! zd+@U*<(LTk*xli+t2gera8&x{2G#I*ixk?R9$Mx!1{B~!s#D?iE~!9D24rv_Xe5k} zPHkgKEpaay?<6D8txRoEC+j`#D6<{ONwg{;g1PUbvcAW^-7Ch~$h8L57n{{>BTwxu z&Hlq3e}}a`b-5#M)ZjMXCn%DXl$8zgpz1>PWmnAp3h?^M=j`1U^FR~v7A9RjY7 z5Kty?6X{Qb;YRz%dt|aE-;kMFgtSF&nC52hyhP#CAb1Rn5mmj4jhR_kOXKhiu4Cy` z&@pH?V9hKqFBr*Io(MU5pDG^=eAk^Dacx%BZ$N6!sauA0v0C`W_UI+BYd!l1%7OWb zi`eA$kYS*$cYbZv7EGZejUSbR(4%ia{YUOzf!PqoQA*E^*+nfwR-@Wzs)yV>7;{?H zRn(WYZn>`lGzB-`#J@P^C=OQR**Wqa-diS#sXDDO(5_yh znzi?(knLgQDb~hXWH7Y-82uH|1en&i59jLY6@A49D^xTho#S0Mu}JOHY&Okni-xiGmO}F7A}%@B2K7wLh-qA4p`{Vf9)X zm8-(6h!6#iO+q3d%w)e;lC+**cC>TaOJy{sN*{^eLk?*t2oX~EWFnW5`OXz~oAl7P z=K%_1dFPdkW;sJR)7`L3QmQtDhldBC;fJmH(kG5m_>a(5p#x_l?#oGI_18p8KH5q| zuko`h=M2fuEtsmGt}NHZyN%mqqtp8)D2YFugl!yo`=^MNB_3y1dalxz-LKb^PM_bJ zJ`WEGE;<%UUG3g1t{6WnFj}=O)D^ss+;}`{d$i3TYIW^4R$L$pSvdIBziGLC6Y8_F zhO%H&)c4iAjWpY1Nypl~U?FTEi0UE(QHF!v-Q-Qsn}ra$qu z<`2t@g)8Ka4L}dYO-S&!_W3xN5+nkB*8`3P@PcZH%0S+_6oyy*nkjwvSXf5*p1Rj3 zmGojwnVk6@QlMz^ey8+V%1Pf~@2iLUCH?rofj~NvbCV*{^2md{aRP}tDS$D--qUy@ z1PR1qIK*{O(%5i?DfjQ2Nq8O-Y=-zT zcVwR@XxW6~7B1}W@STzzhU2}qPNO7$e`pXWL0zsZ?I1%WbhoNa5*mp=W&YR|sck8H z|IZ2zPHi&HVd5uzo~ihlZkaIn>EhxkES9DL`c-f@w-HC&Ep1S?>){_a8aHVEF%J-GaHM4a5 z{OWqMU+N_zwQZ6EHM!-aN`5RTQR*%=8FT-*yIMekVGN(ql+!+j8zZ_h%1~FEglJh*ztuP0eM7H9S7#_D|IxOj<4jcC@I)Uo;4HR zcwzlh#)#eaOO38C=;$;*{EkmZ5YyC+w9(}cZ`ql-+#2t;d+EExW-Ph-qrtYlG{c`2 z;M{=t&Mt)~iGl^TtzGo^kCIvKeUF||Cf&Sqf?n|tQ3)GRFE3mR z_4U@FDR`wA%s>78cyl?*LpT`4Uu?8BHABHX6b2Tyt-CvK<_?^nItbkAQ?ttqx_tcn z;my|b3-c0P>=`XKqM}#;>utAg=6UcK7avDS!;Q|D3Z4)nCyuJBOxZpN3+C~RC^J3WZprI)C8{PDpaA%e zsCB(Vke8j4b5|`sSx0fRPZ*kUP|IMGVTC56&yRQ?Y9?~6hWWukG(AHRg2(0J+PkA8 z`=f%J#EXNuZ5}l(sn&P4lhxaiAHkb0Zl%T*ar!A9)bPA+?(Sjbf4=!ze5d8F;;rOM z{nI7reGjv`hTZY)n-dlwFk515gN&j0r*a1;C!7SnMlzWkEITp~WV zce6gCA_rS~iNV~9?)nj!B$#ADEA4RM|0FLIT`VusOuo(03kNsQFRJZp?rbhpr8N~| ziP0Q~1f)S2>K@xJ9U?b74g|_)kidkpAEusJ*c#;b0moeRG=%{g)=t-}afOfsLMkDM zkiDaRzOR11>cpY>ET42Px~y67L(hrWD5;pFOGf*-VJ9- zsn@=>{tVRBMn_Hle+K&SjTgUe9xBMDJ50T771>@amd)~NxY(Srb9BTuDT0QEKJMH) zT6=Z~lo?C4PE1HFLjC=8{+dXL(oZ9`!;~@fHED+oBdT0={TJ-Ujxk_}Du;`B5e6nT zG@RhfUW>P@XuK@xBxu0Ok94=9@5-Jc37OR(T%;;joXkC4`#SH{LRQt(rx*pDB z0u&^2W2;uxD=ID!{&zycUQyoZT>f!Ek|Zj|8(NdmNM~92@s{|R6KE36FD?;gwFImZ zEmqYb=3q-6-n-Zal7RWep&@kU!NKWDbK-i}1By-OeS*MZZPyTMIC$+~ceBIC%5U~- zlE&@1#YSle2W$7_KAnJ8#7xEw`^!AV2%v1@x3=&No>?|Wx3sd!WdBsTmV{u(sOnd4 z_XLjbeTE(^9}ci%C@pxhdcAo8WvQZA!i%8mRQ?-=Vq3eyiaR1n0+ejiaUBM1&m04z z-ZP%zb^{ z4xI)&^2d3*@0Ej0#}^l^k=%ML1s;lsoByIuIy$7M!omN2;nU*`&GN?n#CO?#c; zbSVM*%0}9EcV@Gt$WdEpS66QDp}+k=F0ubtb?NjqL)4IEw&LD0Ra$tSi6?`xYjD*G z?UvmI*6wQ)1oahq%g;f*(mn>UflO=GjRY>jbE=?N-r+-OjEyux;{$S7cXUuw`4Fl@ z7)Ef#0}}6K2fNw1^O_<1Gf4qbu6J1Q{g*hX`aI-YEG=&~zou;7yD??6G_xi7E1hA_ z-hj>Y=VTf1ssW5b5I~@OM|!XL?~Wc991azGdt)pIk4~^QmZ4RPn7bP&#Nqwn``!OnjigBl*K zzDo=wCf7D#zE=-A^X&wdC4RqC?8izmA|g&d@7N)Y7oxW*kNvj4WrU-woLe(^+ZzwQ zgxM?^f4IWauZo!)Y%`#kG-XXH1K#*hH+nWk2*3nUbzStXNc`LWA+TiOIra$5V)HU) zIIa6eX?&oQhz{%JKO)#c8uZYeF+&0!p6e!}PYg~e8&mp%FV8<7n~!jRtFryid-Wc0 zmhGSSs=_fwGmA$?$qN0~)h&jF_bySy*%ky;WNQg?RxXb1!jch#1IHu7#}0mbs~fmP z6iGMf)ZI4ad;2Yp>#edWAY!E0Jh(emC($cKkvyn_P15qK|BVGYP2}EbX9Sm?)e!D+ zMCNnoZ-7jwq*Y@Md*di zLCEE41aDk)QwhfrPevag)7SdHDVA{&*K*4d?jMQ=+4pgwXp3itN82Hz*gLG_DOlHK z8j1u7FeZ9z`=li6NpB2Fn2(PpAzhFH1@fHB-`=Iwo3PNcJJ?+mMjH<=R4B#71$*f~ zAXS9&S7^+Q3y)&gM59Rj)C^9}X-HrAPRqjU)74M0eM!}txppE$2PlSiXB z2lThMm}_*xvpwSo?*0b){O!*%g+n*1r?aOL5hH)?+_(uLnN)y@o-hH|R|bEz@O@~h z5yO6r+D~r1j=narU72I5?df(!$Z$21IP*E(>r+%nB8~NJpbaNrMrhgB<#g4VV%U1D zs3z9POceA@z^x}RdsPE%rH^|=cvHsL{9Togct2&(UGQMWQ`R z5szj?^pI3c@LxFZ>4`^@p*WlKQUqQ4SLE>Qv)#xw!%~O5}H*z8EF<_di zF#CXL85@(LI(SO5`>N__Pd}!PM)Cs+zgumF02A`a*;C7-t&f<^Ia}@Rr&f+v z7%nc8+eHOGRc040_HWmvUX?7-9d?&Es#v$oP>>D)V>q zf1AD?oB~P#NorB;L!H4Da(ezs%OGA3v;PVXT68jZKE$E0F6T967NEc@LQ=LgN z6*|>bNBIoJ5J!D0a<_5nQjPxOlgsi!g9E54*vU<*ml*}yB-*h1GOYluK|<6>h)WM$ z57W@vS>~*MW4M)DE`ta<3$)q!k3%p1okiV6jxYK!{M*Q#uA^sGfBC1Gc``XA`Q_7u z#?`OX_5T8lZWlh<+R{8wKhL7}kz&+z!+?}DvuN$c!NE1qXNp#31E+-|!6_@G|&?7rRQ^ zJT3^5!fxpG@+5&u(F;^iO_bz~*sWd-_EK<`7dj*dY`NcAx?IkDDY76`$?p-vWgM0K zo1hxgWDC-@DpBzS6Fff_F=g5w*M>puGYr(H1N}fmOoTG(!C87^_v>`pS=tLV1wx&%eN43i7)pY;*7U7x4=6!jun4V1tcjU zL~I!Chs_c&LBJL&&f3%3gP7VC{U*V{Tx@V3<5CJsgQ9quy1F6!&8zsAVb@H_YE<8 zU~@Vg*k*GUh+@)(w|0*F^TFlf%C|6@8>+$8Pk-y}C#gV@m37));f9;{JEmZgG1)h@ zfLQ?tzm|Ns$VxsWI&cbrCbHe%-a{=68kcTIf^S?yJ0^p^`)iQ~+AwPubFvp*Tu7f< zTmRYv`~TX%OnzWT3L(lO1NRi2?326wWn3~wzsgRU(GC(-L%Mxjq-*DVhKKoYt7~-N z2IH%s!n40$ETXc6wzAD(i6!87-{DMuvyZus&L4PjoNe#=j;|5uh#8820`7y8-O^#^ zD?ncKyGciTHB6cftWx2o%>qK{4q*@@} z#R@jB#1f8=C@A7jZxyy(Xx>yX6Kxg{x$WfS@FydQIsEdBWShkMwrf%P`U!@UTFBg= z&BgveNYfXPJLGhv|09qz?1SSFHXUV2%!HRmPnB_~&JM@y;%E}{MheSdcvmq#9`z^$ zgDv+ciNJ!>&dD*bkz||-XB%~Qq3U&3eEf(2an|CCu4t^YU8;FL9{wUgNbEBxV3{3LM6H|k1;wULE7%J(h5$j<4Tt@Xz8E((n+cZ_PkhBog0K?HGd zP`cDlc#Fqr$bqQZKD=|PO(fj&5gNl^D$mDmanhny+u|r=c46-ZFSy>Fd{fygS}5e@-ikDZV6xW<|F{+Jq_=knpvCD-P4Ep zfp}#lBa>XbaDwa8ef4vbT?jX>Ah&0ObA(+hk9X+hg1Yzzf_P?a#41TjpzVA9=B;t1 z8fJO@J0n2TGBbOvb90Uj%Eo)~PiPdrFs&zr=mu3D{%|8UrwOi+oSybE&?^Utojr*! z#)wa`0MXw(crfd2}_N`o7HeH2f zp5?Cw$f^3>{B_=LMT@V1ROWlDr>v1~N`8-|2v6?y!Dcq*qfz=T#XFgTUZO>D3MS%62*s z)Bzv%`Ce6zYz0}aOz~oY?pvmgW_502&PEeoxPLh{TAPA*cV;Zg_U zX9qb`mD(Zvd@!{X^XgjNV~AwTXneCjnK05HO?!_yj`n-g1syPbaB1w^L}kG6GWebt&v=VSmv4T3x<{VQ&G{r=4SeMOaA?nsRZ8HY{W0gR z`0+4fo05PvodpNfn)r!q*6c1v8v1wF=I-Y)b$0glUBo5L8vM40Uap}%E~)V&eA(cA zE}m=D#^0awDZTvQ_IJOYd`-96czgT3T9Oo$YD8=P)V3uR@Mju(-wJ=Vft&`z-*0nB z=y<+2J$(N21NCqL^>Q>CGq3{N0lhP0tajzu-{ErU^0R+XNjh2=tF5gErBd+B+5S}wimB`Rr$Cp55KN-mcnht1oA>J@E!N+< zQ(Dh?cd+P&gPPwdjZ+QA+PvR@C~vA+76)lnf#R{G>d&+rhLBPQ!O0)eV-!>@NS)r- zE?+MFp_-%%YueH$jasZZhRyHoc-}_)mxr7gMTL$I#ZbbvEVhbRslQhWG?tx`_GzFf z^)Njln8VureXza~EVS54a7Z2++Nx`(YvwA4up3e4OUkB|ED0xW7|`sT>CE@(x<%97 ziyyu&LqC89fGXS4qx1+CXNcPyt_`v|BM&$IA7g%OW9d;2}aRSgv)ObC}vwU=RPvh{Xf(H#6|fFJ z-xT4|~zFM82r}{nDxC--Y^;-g!{b%Ua+20Bx({-(mpTE9>JS#0r7t?S*8Uj-K~&75ZWx3iMd z^NK49)hNtD@DDljQ-b;38T86yurVygKjTo;UNZ0q7 z*`1hah?sxs@-niE_&0@~Rp+pX@-5wbP+YeP|2a)Phr8G2q2 zA9J+yX5FXj8d|Ko5O`3xb?~_W)A=E``K^nMuNkePDSD&(Io5x}!D%FpSJN{}p<8LA znK1?Qv0J5=1ypme=e(mT!`%j)Sw&r+i`Y>|!#QcO51_Ckl)rzDPs*O_Ar~nk&5Sty z9vmDZXK#aBDVQ`OS4E5j$hg-g}CRcio+aG?t3Sxw@EJ6}G>)F0|Vs<<6?t3glk$CKq&fYIlzP zC0SHig2U;xkz8XneLiF*P+Yy&bU0$zLXI@ID5y)%?r;c2!!V*J3Nj$eQKa6SbW;lxF9%7FVk z{Ji5cEz3FLmH6ji%6oy7<@8eQX#XgAB$$c{|%?IdJ$d?HpDRU{J=U@*MEiLd(T4apX)^kS!J#4b-{_B;Rq|G6 zxxCyVa!Vrqw;-DhOG2V^d!jJ-o_1I9@^~ccr1mlyu_`(aYLegOFeYA=f|*%_Q9(|? z_qbHCwyrMJ*=mq#Z7TQC@vRy8&-wFfdt;*Fe?nacmo^5kH+=c#2*b}yG_?I6ax{k% zlZ6*iEgyc9>avcrKygc5wx^Q9uP~d}H@3f#Lpz9ST6~!~R^!c${IH{{&U7|QgHm1p%CZpcKx?-iG3A$DU!(}Oa=BVUfD;8M-R|Ip053k!3ztWU{ zt;=LIW-0+@wbpVgCDec_a_fBEH?G=Gzi>xgg-m=e5$y5B@a4$OtcmA2841*-5B&5D z$&Ou|Kc9O9RzZVMRB2fH^?1uV%@%@&?Vm=vqM~0BX32PoqPN?nI#smPq5uME+lkL@ zfN!8NGPdHqznnI?zU@ecWX;vp88(gZ{nA~U(bA(B1#}|2SN_<$tdSQ~RPTyBc&OE^ zzBA{iaF{^N6&$9@yfS?I-pjkGX?v;!9nfhQa={qlN3{;;Klj!E=;njr$8yH?{J2vt z0LH&OZa*M}TizivwwG1$i9iSubsd6WlO&I`w?Y;-t+-GaIgw3m{I)ShGY=hm3$y%d z#PE}o5za4i92kWuj%Zz{oQ$pA#j=$UC-pbYlxWGtWu<0Bu6mWP@ftB_1raF_J2iCO@Z%RyU9j zNDe29KKk8&MN{THCqHjL1%17o#gaa0X22;kSMp0z@}rCYK?4teIQyuRXn(%I{DR@P z%ff;JnIFcu1j{TkO7GQ}-<{Vqc(hwBohd!>Rw@;8Wk&GB7X71cnCmRAbD>r*?l@eP z8yWGSQwq)Q-S;f=Tt)TdI)`I>aJzD(9r_a!pJWj4z1{Itg{P1HUA5u&W94DslYf1Y zvQ;5{9)#r&uNoK4d2&mGFWz=Kp>&X!rT*XBFkk-qkqDxbOD-DWhRzAXl^{tmmiOWC z1N{jaN(Ajyrdv~G#O`>ERn*DvO|@v|h3Ij-CFA+O==0|Y1J8(tY=%qgkFT;z%mxWvansD{C;PfNq4F?$q?^7C z-2rQ%(xj{zd19_XzjWr-7)HM37L!Y+4z8(Oq(MlFKk9Drx ziGMS8zW!PFv>C&pp^;L;OX}))Fg}6$78kd++}chdo7i2k#Qo-dC z(43#*=cLo|c;+~rD{sDUev2M+vaXWv_tA?JrMqGy$2y#i zi~M$)^M=TH-$9x1A|X$=g&AOpIr|ZEv0H!b;eW1MqwE-l2ZdXB+0o7`y26*d&_U4MZ!m{UP zKDQ~6vh4cm>`YNhi~84lH&gnJ{j~!osJ|Du6*Tn|}fSJOZQrOtt z^?Q792T8oxrzzn_azigoM8r~T|d z(+7O!D8Ibc%+1}A9&D14OuR9bYYzRD^2FAUA&nlZY-Rd#LgUA#9mrZC0Rf35MPU9* zl`!0mz4SJ_JUkUW3lrVh8rk|>d+_wg&e80)lg+mxkKMwz6_?_0^|^?V``orJYV(I{!7uo} zN@P%Z9{p{+A#4J`c^27*&$>GE%x3*+_x|kOJL{!;@Nl8AS=5)8V%g2eDWo?v@3hO; z#Chp0YS%f8i`+oMFe?Zri6HPo&DHfm#$$R!MxXaV2hmzDZ}Hz=+321OLtm}Lx!D@u z_G{axR(jj$HEDD|a^hwWZoR%hB^gG~l0xk+t{LhqcGbwUU+YTuc@i?Z0f7UoCZ|=k zwui>GhL@zHUh`1G!uk>9!fK4Ry~7#)cI>>WFs3ZIn*zZbxN)=$EZq=0_Wx9_)dTXy zTpHW`LPme9(#|Ar&R_8FlrS@l2rU<$yNy(9rM17u%@_&9A^|g*&!aXRf?0Z|l9+hY z%kRf~n&pD6!{G3myhH`y8JvDPIO3_c5~Tip&3fD4goalE3*V$4(1H7%6=Xe*+yz-0 z<|!@@qs!U>Pb$IHz5h19smuX-%w>oC?NsXm{8W&WgekgDEj>wwS#b235r<5-T;yax zVn02}+d@AX%Wnyl)s1VWGg=uZb@_{kYJfxE3Z8`}YD5Hxb|dYEC{hOcx zL*Y+tjziyoy--d5kO6C$l|GTHdWM+*wctgG60l(^2x(I@72nNeHV;=hN<|QIoR&AH zZM(M2IumD1>;h#>(!J1MlY7IT|5yE(S^ZPg5FO-Knci2!tF*D@3ZQq+_Knra3PaIO z%bI+*7ST_YiS(<*&ZKD({6mg*;lnC@CZmuW&bWBo>NV`vhA_>2;vX_xeXzgZNzhub z%5FI%$}f^yKOQsJ(~ghsL>QFk9wFkBrud16$9~I(W8_owq753w+0{sB48cq%JlR1u z3}>X~r=w}Rb7V(r5+xfk}s7 zpii52pdZd%&4N3noh)G+aM*&Fcv@^SOkkW4FLKKmQq1@!Ne@iPiZN@DnMtaU1$0To zA?y!p?R4h4$(0_N?No*<`m`7tMWf;{>q`j7@|HoJs55!@PkSu^4&HmtSEmZgKJJF;bx@i} zmc(fgDd=l!>!9z?5Qe!6TL4vL`6YRvQlZq+%v7sji$Z^%^L>N3^qDhIGW#`2QogeQ zXqB*ygV2O5j-cz{wZka?;}2J5+gsQaT}Q@SL!imc0S~{@WRGc7Buo#vpyrbW=f=Cz zmC?Grd4#gi8msu!i2u=K?en`I_*!PK>${{{<4^X=nZN_jR;nrLBFOx)g^z`2U~ zFsA&ouW_~v)Hh%N@pi77d~WFuPkZqmt8V1v zbo4SKK^?;;bT|4tI&>Hn`BBl+iG=b3-a5Du{W2y^x8)lSV^Eo`IdVy-?Oq-QpQss1}o>9wzG*9e5S!Yst7B=$0U@w#{Y`k+$4QcXcl#Wc-qVA^%yCmUYwMF)Ky^m3f} z*wXR9k3rf=@{XkXA9Fs~0WGCTuC3R?oasqu`|#Ens{;B3gUgQk^p)N#N1&%$0o`q_vK8mUmp`V9qpk*TvVrze9`Q>(icr70I(s@rP=49?@)7&V@Ibykbj!cCbNdg z-eQ@=eE+Jc={G@RY`4^Mvb|0`o(_{x6Hff=a2y`V1Gblw-YgRC-swXF?Umd%Ow9PH z=K$VsE5+7FIpkAr4Zi9MtlEFS^hF=%UO+j|L?%;@!uQqBqXG0u*pY5JBl8WqiSL z)RI2-(qjBYgvTLd?akdE%W*n6p3vlShfjgQoCs=|^iTWSn_>CnO#w7$5B{18OGhV&1=zy$1eoX__?`#FTOK<{Gb|7G2cfn2;J6E`{iP!3UfvGWM{o$q=yCp zZ-?CEQO%-wBeSAV=4A1g&$2;DOEkAY#N1tUYvy(1wV+Kj0-93#bxrNUC(CY!h@D|< zTZP}SJGhm8i*P6}h_f19|6h@F9IKVc-` zK-wS#-u=*Wucsc_fXNO*r(#6FUymx*Wwm_EYC}jy(JNfj<Yy<9^vDK+|9xOgTY3O1wz48 z-Oc6<_a}Ylfz1Iwl2|)mIQz(1*MMYpO)~=h7JZ)`D>v>FnINho{JWM8d9UNu=_CqD z9%^Ayb6kn(wAhH?AieMgc%8s9CBc)nL_#By6>{V1aQ5*n(S{=)M!v&!lYJxE61wh~ zFwYwzOLI_S31*il*|$xk7`{|)Xn}tui=v?I*9!LEiDONwlLtf7zvT>@3!B|?P2@Ak zP&b86zu~u>B;{$;t4tm`Rh=n1ON@pOT-8k%RMo$4V6oJ#{6wr#VF)X=euniegK-zU zDGggmQ_Ep0#(W+>((2bzAP4OvXzr9Y-+pb*_&cj@y-G`Xw?7qg64}*>B*3@H(5`ap zWL*nd*i}mI5I=;_A4>aOJh}&Qq8+Na@zkAHDo|T(=6~uM zl5%}fR|MfN#&0Bf)v7o>LzySz9z8pkWvdwAi5#-OYAPu&CYAQ)Rl;UC%F<)2(y4OG zd%n$X@r#z+%1__M!Nl!*FuOM@jpI7_WWz;F*^NAu>i^uDFoEt(F|yagnD~KT{sXk# zL;8!sM{9|wt$fAo@xH15?f7giFL{pVB&q1aV~T%$E78@vB|<%orWVap3EeX>*W{_Q zf&V&bh5i07^`t1Uz>U=H}f-^7! zkixGOq(>Ru3r*JZ(C-glJz}Z{T+XAv%L8 zj$*&3OccnCa=fMShnIox5b?98H+#fvn;88 zZ2e?7EIxvN{B)ojywfMts>{&aqHk~7`JmF9Sz&ptL%%+ zr+T=u?|1GeupJQ<_nmtSU&KcUa+5-+r%&S@Z$d(lMx@srj*Ib$y~u-PQd3MTS*@c% zIG-@H0iNa!97%HuvVRPV&Of|l@M;zS=?to3lSpvvjC$u%{qp8sWZ6;U=REY{R*vAQ zc*3sVcLF+IzdL>lWenI~mFOGXx*loEaO?Zu-lLk~`w|M@H(Z~@7zc|?K=?JOw3X%Q zBMU5f(`tF#hA)#8rqO0}4`_z=2>KrnhbY3_)s9<)O6j}C@wCo2=D^Fb^$g!v!gdvE z#?QvOq({7>?@LKc2zA_%&O~3b)b0Nrw)Ofc;-D;VosQ~U5_~{+!yNF2%Bpn6y>@Jf zT_4bt+0?L+BHYDIs3?ch!com*w`Zfg|)9R^XSo5f8%Hs~VC3c~t^zD6OBu7kh+x;EXA{;0NP zAxYL@Dz2lSBIWm2(<3hXf43-Lssi`k*Q`zw_pK2O!**&4spea_A^dF~25&3WGWAs^ zkFS-MnsuSsXh)BNeypROxpo#m_>BxG1ZI*d(cYgWdPc9!PcYY3?7dLZySWhd?zA;U zU$xSrK%?ng_VKZ83p$g^xeIskKVFc;_CoUIqjm>Kn33i?Qt?gtc>>$1N)!< z?af^Tg-CgR6pb^qS3_p(god2S*{ukTdMrW5!+5JgYQnE@)|bZ|8w_i6*XbKhellLX z6R~E^b$cbCGT50!QM58jJirt8B{)*aoOYORQo-7UukyI1gKPj}`&S1HabDU z6^Y6!Z^KUr;vw?RqXhX72qu%`D60j+F}@3_t7W^|f^k~T?c;?EYokS1$wg`z_B5GB zzd)si|?n?F12oD@2UIto)+0&23{1Z+GEUM|Rc%XZ-$MHWFR`wx1`I zg^KareHyISBr|qyO%}9yAWr*&5-17@ z)Tft@Dp+xcqr@nqC%%xyZDO6CMc(OaehS%ZewMOj6~xie$VB8>JrT8)qKtxHbk@3I z`-PzAZj59~Ubsa}z}uf7Dk|5I)2p7aL6Wi!*FnWPMVJffzqu2iYgWrAbbC864puu3 zcm1fxI$#2M9#8Y#N;Qyg776H5${H0DS6e06#&Mb7)843UYzr`_w&#fCtH}66Aq9Q~ z`xBzcg{RMnZOVp2RMnvFMnotRpV8Y21bcRWg~QimPN%y%4nnU<6eL`H^&-^at0I{* zek4vZAlOhtpKjXvv-t{F;GVc!QK%I6#{c|S+wHr24zcd;-_YzICJO0On5VJuPKSnH5dC5Pt8}PPn z@(9I_yiu$^I;`Z0S!lOV_*}tngM1YA2x+LuP&-u9#VFA7?i(J-=psI|MYn4t8M92p z?tZknm!I#o3Qo}ix)=%khke7^#12S@E)sDmXpimMH-qC~O`?&Lqc(+@6Xz>-yJ3rV z2dOqFIrLe;NA&N}+>hyrm*xAGv0tKy`aPL()ys|r;^-RU5N4rPMZOcM96E$^hprH` zM}jdb3}&wRN%(k}gP}c@OD1!)w|T6XjE3dmT%|2r9T(UwwT3_&l<4HeT{Y z3v*Y6g5OU@?ur{E+YKv5@j$}IY%q~U$G$2fiK##RpVCYfGOg7Nf_Co8Ngk=(Dex4> zg;Hsz>um|d{8Bx---1A0fHAfh73p2oNoy(EW$L=KtCEq{k-<6omEXy<#QMMjileVu zQ_W>kKQ&1+Q7~fjJ^bU77Xsvy7r|NdLBOQOSKe4~00mEa(;VilWHs)6QT>_UfL-KH ziGq)1&^!4Do4^=1Lt(dWo^z)*y@lO(LD5rZxN@WnXu}@~m{C)1wE2;8*8CDHp|+oM zz5chal60D~5PfF!dda+*({8Z2-#R-yP*X>{Ha$Nf`=c$HsA?4PVeU3lUpo!y?h^UJ zwR2ogWP7roa8@u+vGnA#r@{hn3Ql<5>p}n6SZtd;c8mjP?d3Hu;^Xd|Sk`2@KNEPX z{>^H}PjO~)2h;emeCJ&XQm)HO4O1_&SQYeS4me(!v?O+@q7qa{{m=_H+o^qH%HI2a zIuh)P5mCrN;RxbHSs!fbZ?B*Vg&y8)WIVB^&?3dqSabPhZ8itA;EuU1nC51= z)K5Lw$By7B5-kwPE;8Ichh?biQ2uj#lpntXaEwaN8L0S!?T#YU$-NqDeG}|_UuzZ$ zWJD`AI+UPBbX<>o_;LEXt{v3yOhlu zhXf~?uNi$!^Vtr?>@AS3n{%)EShC62E2peLdoj(qjX&z+P?$5;^h*S%pM>Ncn9fn{ z+s2F!Z|l7@!~nJb4e~~(RX$J4=GTcfQSn-n3UL3;L)3kSwEGP_?ii8=TJe2DEeRaDnUuFwnokOmaLj5hW^9ZBzZ!_`p%5a0jYQB`;ug#~>8V9xu}$vJEZQPTu(81cyG+sPMa zB;BnXK2O&GmoLd$K|b~mKfZlSJSp^4b-Ba2Ipa1w{gk`2qa(6NU}Oi$-n{IuT}EDi+?pUn)k!a>q1d z!E%MjKN4A4p`i(6B^GI5w9@JO4(ktUl$w#SD81I@Bz|(<30wGQQaCuc^SH`Om)AD7 z7l6NdkCTZB;b?l(2NE?c99-NVOZOwU&TF#jErWg43J@p{Sn73b;bkp7^<;>HE)>4R zJotFZq=v)c(C=1FVfwht{atT~Q3m88%dh*>gkp&q^oMiF1GC8#iyl&6KBxyb^Du8fOG}OFrdjH?FF9W!QSUmiPMD z=hgz@8^CKwT-|1;Kr`Ms2UoEN>7QHhB#WExGh*tR(+EHPQn!BcNzt{^)+Q?|qAzYz zyXl#(4{m$?0`5}f_me4FsbV1D1qKW3;yR)_UazgMldZ_<95seJJ+!>&jJJE7UR=fZ zvg>yB(&2OIeMn79+iKWHRQofPOFQy*v${mF96;{yn5cV^~t;X*)>~5 zd&UEr%Hd4N|I&>AI?o|rws5nsq>u(g+wI6d+(%^D8n{6z`Qzz+M7jD_iN%s6Y_^oF z``NOqcjav7x^28%%d+C6y2fe1<~@%cw)?|%_bh+yMwUo=2RPJ&jun)Oy*pQz_!x9P zv7_D5ndfxk8)>zFsY3gxPXMqC$4k`=3ua85=~oZuFPzr$*a618h1v5H+TqIs`u+9Z zTgRIiQHsFG_kDjQYP&=tbvL$4C!1Zz0sP`^+{MpGADaxfYn;|+2a7Yl2Bzv!zNbS| zx0@%o_q@3NcauA!RPMjH?9H@Ho^~%?%$6%r$68Ja?YP{N?X@*-UY^>IukNfMyjvr+)f6#1+~T@Rg;r_q zuE%F=Kl!}4-4bMHONKZbY5h@Lpj2%$J<@1X?2F9k?uz79JLYO7ab3WGbIWjk#xYx| zP#dnZnIQy(z=Hw!nsY>mLaoH1`2}Dhn2~2-f{rbXY1(4NsMxBY_~1~wr52xaQE&Gy z5q{x@24pS4mA=Zne}%4p0NKg2P2M5$t8@-vF@?i}d-2j$$dzwza5b%exBp41fb>zF z*UEDYV=@v#=~ij!yW4gX>wYlNIfPaxeC?NCMWcGhhUNZ9A`#J33{41feh%UG{Z4$J zX<8-i{M}yM5_>CsBt_5}R`)RGGggE8_Fcf=oM=9IWAVEV`K#kQfFq|e0(5-e24}OS z`vk6fLtxPiN7EDgM5PVJM%%9Yb#Wb6Sg|rZ9$|QR4-DsM>}*tH^E>`9<}es(dje8& zlE?3PJz(1`m*_2+AI2MVv{l8;Qh6XISkBI}YMhk6C@8h!^9A*qCVCL*)Y$M~B3X-Z zL)*e;u;@f>zv;@ zGYdA%Y&S>zUb(r&J$O2QbcYi7bM^Nsb`wb%PWs9jUh>N;JYNKii8W$&y!!c`R#!;H zrgW@MmgxJJ_T>hSZ}j|L9I z<4FF{&>#bTt8$*2>-j28z@*OWPrVbZ#$!&>PBECTGe*By)Lm<#>OGAr|4_oqXV{19 z%6wv()8vJTB|xJS$m@|i>D}uTG}I$sK3|(*xi0Vka&nU#r)p@%mt5T@m6_~k1K}xO zDeWzh58m+udVWYiXj%CTomyBCD0}*}+1a0tm^ZB*1XulFA*y)1^bpSL-uU?)?T4~3 zWptsnIcZz*===8AC%`!f25XgSNl6PIllgDo0N8Yz6Z*bOytu1h{inpj0`2%_#`Y`P*>Ka)5b^O*Xp~5Q-Uh@dx`TBDRRrw> zlPbN8GNCNt;C8ltoF;+Iaxl`*XO`r6%Ry0({(OnrPW zD|JDw+i$qw>=I}-sE+g7W?!MD`DtDsP^U(=f?9e@Z|!?bFvf39=QIx&YS8+!C4&x` zQz8{2d~^YXVo!tZ1ljIa(C+5m9u@3?;pWkI&;=M&K)}Px({rC^Z>cd>{TwNhMr(nf zM^&%rHcf+73P5CARF+ImlQLcC6=fIQFt>L zlsET%jQ7XmNKkm5O-sVDZb4ck2`{V$mm~T{+{fu0H6@t}FQ1}XBSL*<{_|7X+l9ke z8bLf=Cs$Y9{W!JNV*}3FUt`7(*GExNQJ~(pM^%QSNg+EK?y%k?gJY8?ixscaoel-g zG~d#d+aDPmLdObIOb77TH*MFnc{g+djv4cG06kaqVp9;%N#z{JZSQ|YJUN66(ocUVq-$( zVD5aqHYeWyJCybJk*xAE&%q+w_|#h*P3Br}np_6u@QdNOG64l)u4W?nQXe`)w*wfH z9qi4ggO0lByM3vCr!5hbcc$Q9YBd*@5n7h6nu}6he@BpA^Ld(ArpBXSpEaGz%i^F1 z^B=TAKO=7+&495FHZY=K9eHaIcCw7}1ihV3?DF{vj13~YY3YXDl*d6b$veeLa_FR< zkaQiYhwm`;-(!2p$3HjGK8yPFpJsUxq9WtbbvHRHG-^t6d^r1x3n{<_0915Ys!ebrIKfYHmv6;(oeSk{r-P@Q4xNt%^hcXXlBIEpF~{t`>#Ct`7su=!sOyr!+(#X%lIUT zhCA#{$_)1%Vog^1gFcETxB6K)8m+uz567pzZ=T+>%O)0vq+uQ?(mnAFO&JM$`95Rr z-^2|1O!7?SOJE9wDQUW@T`GJxf=+V4g%?UlXX}a$>hoF9?7xn6thi_zeW({5X-m&piH4Q^|PU`jXdo(mE(-~ zms!WtNaCYwQI{t!q%)J5HcRO>Lj;7KlnZT|JtkYJK74ouxHjpeUVmpc6sKZEgPR2X zHgC$vu5EA`fe$0(6h9m~glv7bB;n1L51_h&N@P?dOd3K%s5!XOT_U)yVKbK zou3jGpkZOQqbDz9z*FI(w^ogvmPDHH)N(C1ILGca3FsWdve13_GC$l}teN~|w^KI0 z^&4nxC9sI`#(T7r-PEOXfbM$43uIOB$!-eZ-myUzEXW1D#Nc$55ru#~@LJ!}pnbIZoCvQ(cW(3bniTy$K0@Q&L%3RblaDz;m&glbt4`NCangkyk62++DrY zlsOU=F(QSg&KlqaA~LOAEN#ef-6Qqb9k=dno*v zW(x(sIN!`?v(=eH-!by*e^JfLHzcFw5hkh1oXeM`j*f{TlcEZz_fZD%Qfh#N@MM%_ zIG=%@&e)SfoNJWo;hCyy>DqolQU5n2gT3*C58qsL^xR9cq96Tc^3&4uSNa9R-k-^HU}{|&B!e?&3KX%u zq8sExF1>neYi1THyE}<9C|tDWCrc<@DK$RlTnKw%3V}?Y&_~_L);850mBQJ+_D<6p zuhNRlR!>-W3>+2%LF)TANWY2tWBD|vG5#(EFHSG6SW1LQQhEIfVqPbtFxKL+>wop0 z*X8{lL9)&yV5|*c;9xktcmFPn{)v|MO^1NMId%{&<>0=Ztu4+5$uS8TP2%|Xv(O2~ z-KApJ!eKHbGT8)q2Sv6;-bFxu4DI>i?epSuBI4p3c=(VHi1B=R&$xSMKyC1pN4qj~ zrX>6-W`=g~joA|QdpvqgK?jH0KP1&HpaRiky|-___qabzIy8|Wb<4K~Q zxX7mQrmPfHmB6%G*x7M)ub5v1Ut3;fe-Okp--KNPJ%7ju;<82p1g9M1nJxBgZ@M?o z*1T05L&X92R}08|d2s?5`>9(NE{I(-!#AC`QDJECc6C9dp#%yQoTsu^!*j*43@=p@dP2EmLYqXF$vYv7ESSd_}XTPkL_5kbU*^#LwAvYrC)lb2Z3oPQn-uy zbncLD$>&pRn5K!{P4_wmDLW&X=eM$oto~f&^m&SO+ zbO8+C4#e0?*QKEDGLqZUzR$ul^_AYr3Pu)VSidv@201_H+c2* z%10I_%Ul%3b+Dugk|$CcQmu-io{3pm>*nq*JPWRXPb+M`ozSHej!N|Dh&vNY&c<%a zTE*WZTe`Vuw(N$W@;_IjV^OZq-^Z1eds7)qG}_nq2hp9_O3s&7uT)-xB_FVmDv5b9 zDPUjZlfCX4YOcFXATuxpNU!u$)DTPqC>7xAm)#Yym46KndbXa$^jp>7U{1m+VPcBa z&@6b$Xw!4l+udm+9eX_PDdBS)eEJ+lD(8j)%j+=ptCTECOn;7QD1AA9SsNXXQ<;Wl z+!op@iL|c*uKrN{zA-8wfL+V8VzETdRpvA`-M3PS>Xo>_-hqC^r0MQdJ|2BvPv~U- zl?3F#|GqZ=!M2P_K?3iCOt1yiT^=%&1-P7st62}-R%Bgh}}e(t9|joq;cbj&Lc{=x`Ke|9>elZbnXzRt?i%0W}STkF$tt z&htdWq2I22Mb*5t##V{2`o)u~#Af03&MSm62K|zX;6cfNbg}d~e4uix@m@$!Eo}EY z9ud9<7jq)e>)YPEgkz_@B4M@RaCoi}x%A)PIUx7xz{xrviaYvF*;xt#3C%anz6zt` zl96=Bk;VO0ddV^brwH?$fI=BB>)-0`vVOOd-d>q^(H(3_tszR_G+q8N9-{`L&;Io2 z2Kh=_>>RfyMv-;{v~JhY=8*A3X{-4Ale|MP(mN#z-Gl@PG{R@FR!5i4oeOJFerRwo zA%NC7Bri<{J<7-1Z!lRl;Zw_3q!Q^uBP4jahFM=(*LP^hRP@fGFxZW^UiVnfhq0a; zp)c-1fJhvUA$`?-p-|wrR37)QmpkU6wL1WwmC^E(iGXrW(DOxl3+>PqxMhz99&@|lUFU~?VMC0xssS&7!yr?ob@5t}wo zfB40ju{SJ(K0wVf!~f|4EyQNX(`vE=aHg3Rr}0HjXZi~Yk^VAxIgW52Fq208N~cZ@R9-}sO}iyJ7nm4eCrC} zSs323%Ky0Qsa&ncsp)ivY7L_RIW!lkmQruD%iEoMOn0>?mzAz#im&-gYR$7= zts}|G`1LR)_7bEwGquc(F7&e|p%1^wJJ;7rp((+NcoCA`ZsJ2#_bMQ1l2QlXRP>#G z+|f{|0x^JvSlC=E>Mj_Ck*2z1@=dX!s6s4kNI)T8A#<(dNm$LKseP)Dt5#c>ld(!!psFzzEPvU76C1CD*z#DtEb05? zV5>jQsg$}|_<`tA9+hAh*NNp@XLzK~cNf1O;-pMKFfrOyO4_2D&7 z2h_=0=6sX5o-Euhjw0({TDiAe>9%wV z`6qZJTK{;k1A^lxtr>xMFK5;L@O36LTK#x^Z7Za!wH1JxHJ7LWb?5zK>e-vazN*WQTx;gg_scraJOqeC~uYiy!-V+ z&WoCkSEIV(95#}O?J431yTq3^@0^f8fVJ|w-tYXXM59hcZ;9{jGW7sJv3V{womip} zuu1B<+}}EF95-3eygN7Vn2JX(q>B)7*7iyN||dN z)UAxf?i9T*6GB*D4bq|}%X;ywWPbBX%&u1w@ z@HO-*xaFYd++Ek1{|O8kMYRp50+_J{Klq0x1h1Y1MPrGzMCkU> zJ*g`t{wIng;UF%|8fiiWl5G=4m`Vq`S1ycxfeG*XD~U`E_bDD7wyJr0iw+VJh#700 zKVeS_km=U+>S1~h`e-?J#PvOm&%CiuM08r_RwdD84KE|9{SR#A<2_?e3+0jE9{v8% zfDuckf>S|K02T>3KRb4U zwer(!H+!NK~eDn0`XqUP=svoo=&#TG|3Xi9Ok$A(c1O zoCkA^^d@l4OY%lIy8$910c%HlN2e!hKGhPSWt|5`c+D%j|Te@=><=S7=$*oA!cI)&%V|;9E9E4)U`H zWP<hU*Ru$(Zqs}3t}NiSo(;7Bdfoq|gUZ5hA+Q$k zdOR)2o001EHf-smQF~mTH&w=i`2RRp0%s}f@m_Js>@N^$RD7M2T&`MP*7}^ayV~Q; zrpOO^vyZH`z`r*j~Z~w5>CgK->Bk^IG(Ib`Go$ zb#0_xJ1FZVo_z2$w;^ig`Us1);F{AAi;yh z`-rR^7EHjPzdi8pqPiEqYTZbfH;P8`bQ@@NiU7b}(x1v4o?c~MZ8o79zBl`9benHW ziiZ6m4EkaZ-y?i0K7W|Y#BqPD++PEJAX3Pi`Yg4AM4nlvyZXZM3V#F_h?B07s}>In z8H(-aYC(3ib~-B5g%-o8HZw|_HuccO^4Tn-G2{-)T_RgKJ@DRLMGLO^9j|GI*KXRLC@v@c$w}VLQM#OiwsH0bG2@C)$aE- zDv11{5nnt%Vr-klnQpiLqp0{7>7e*GaJ{ih;o;!ZfDrA}$oneQmLSc=S~}@m0wWE| zJVr-SIM_aaqo@#Y%aSDF=99>30WAB2{W-^z!_Ki4aop6~_i0R`OJNts>HjP-Wnm;u zR}ql3P@#aACJAF*;eJTxlB#mooj|WZ$}LK9R&3pQ?Qx|rVKZ$}p^?b{ zL577@R0126K5+xAb(UoHmg*F;7TAf&5j7Is5)T=thK>f?H>r!MTT~^~;wsKw%O3#C z8jj>#av%J?dar*fh5KPh>6e{^^z0RAfZsjH!SPqCi^48+0bwj6y#0ZhoDsB$wN~a8 zsfm2Z@B2u~PJUChB3*w}Kr#MPO?$7nE}+UbJa~^m--`dgZXHQ~|65_?EAA1^H$ciH1<(@?cZWWCAMIn-6Pu2TIZM&UUVp=UvbnaIXNb+PXbU2L? z2*Ug=aFbs=?PVAl^0ubG-5H4NZOCn@{rlPYx~}K)eVbt(EM)QHX&2yw z5|Lga-ULK8A&pYQElwlJEUP%)!d~LVYS*X2+D4NYq@@qy4n!8INsdzAwla&6=&}o{ zyTQhZ;!OVoD>Ziqax+tM$QT~SfP0bJi)x<1=0{dJ0Gp(!7}Z8uhoK0zQqyDghXOE{ zigUYg+Ta?CKb0D-3bVOqIh+68Cg;ggp(25>MS%dRImv$MO;&G}Z7C{9-Dq0s4QUHw zeUswvY1Oc9a_-@R6!*~^xR>dHKLxLRJ?WcYWN{AT3<2(bp{i{oq<5Nw(S0TeaJCvV zNCk0{(%-o63R`^9Nmk+Ul0by0w$bkb{OqC!py&}QZknycNc>X3%A|T9{$HS4Ng+2* zntHLf7X6ia;4Z>Nyw3vf#MGZKB#S;uN0qK0Y+YBsj;(AqJSdBO@9*_X7y)CadiC}v z1x19vzwa+kBCUe>8Y~d$0)wMh|)tpj6w5^^u*yg-QBia1X z4>MewVCcLyy*zWbX1wKpFEqeY+a9E*)DHxwZ>X$449pK82vB{Q`q7F`0c5X&f4bCZ zEs2L;94X2m5PwZ+& zt$GI=#aez;#n9R6^^b3(asR)MEM!n>?I|LgqxZW;ok1xkb z9>XfB4wvf!WENIod4~oqBGUQ-lVd{_uY5uPS?j&iSJN3{`T_O9=0)Og5gtchx#8Y@K;vZl`hp*qkwlhOX zKU;czcHYgF#9W5c$Zjj}0mX{n=3QgF=f|BRttfU!=ISP?j<{IMfqmAL%{&$}gEW|N zqOE_Ap<80SQKf4Ss)&+0RgBN5A`)D37rx`_B_xD+;U&73!B?EEu8kF~;7D#3QfbBm=NMQp48zXHX2*uo+r}sV1+FIxrJV)Rz4Con9 zLDgs0`cfK~&mf{Kd1}*OI9qRo!o~Qz2*|3lQ4O3l=oq`IKN@z>`SJe79l_IPt4rRR zqA}vkX8YbLCwAEqc#u7m&z1eX*Rwc}`25{@4iP(&2~iab5MKW|z-;y3yHW1|Nk$KV z;tyk(_+ze-cvvZM4$0x0YGX@gXK49H2J(1w`iOGLCX4nG#sUahJ77#s@%MrFez3%= z=S*z*U?zC;g@=*){S6vwM^c&hE_4tf%`Hxvln-rW?jZASOA6bZ6Xht{2wx}W$1L_> zq#4&RJo)gQ#EJWVDQ#P8?Uuv?(>PyDH?f)(*79rwh|u`yclrrgknX7$)i)Wp(S0#~ zH4Cn@j8h>FB`6InSeK&JfP#2ikUn&XFw!jgY)ByVpG=`FzCZsrbtBz4o(oEU z{fyEF&a&!)G4fc19q}y>2L9%Iw5=tN)=NOH9RWmebMKDfBE;++j2>c3AO^o<*~X4$J#0wKC>a#9J5y3mEE zEj|!qs57TK*zaHXHlgAFswla>P^42;^>you7UzZ=dbx#G1W3%sKy4HNhB@t4I)Uk% zUBTb#Ex4aCU=1Qn4hTR%8icWpdA5}S;H>WgZsoGpEXXzz#d!bwxPVs|8S?ct z3p~AyDvl^6W%c!CVjsTgDz>Dw?W|>d5_0IP(Odm+;b@si9$!V^(gKJKwSQv<87MiL zybB1+-b^wij~E!S+<`##9&c@1mc14idGNP9PUYmLtgaW~&i>pNNpneR)Oj#_Xx3vZ zmH!%)OU^O+xwB=g%@n^p3xTLkSeQY*YUn21RZDUEBGS-3i$fNcYQ{Q}aE_{s_~W9I zJ}rdAn{(4f+IxOAPuU(A9i?KHujX&Yr90RxWL~$PGcCSMWn{GeCN56D9H|+)opmEO z!J~NDXnr$rojI3~p6<8x~=O60TUvV{P-ey>)a zix?|u_YcdV&w7ZL=$hU9EXRR?YG0_PLF#P-$IoE>&BRy(> z4OUpkUw`AL+lV*4srn|ny1NX+=g~@7P zoV*S^jpQsRXS=pZemK%_WKZEe@Tb?jGhPPYjs<3Xq~6a>3cU6=&vVbdYMNcXGPQra z{m%3Frz*ZoR}GjwBHi*`JkkJ;19eH3TSct9;~z0QIt0$&O5&!W9eS|FxB@g}U+f%}^b_>H9c= zRn3Ap(@9FO z6#w(9^z^HX+hj>e({mPJn}iLIdWdET9vVo?>62Q$DTVf!8<46xVvC0chsWlBGbaN} znb7QXS8r|>pUVfCu{Yvp=?`s_tyUP!=$s{1qzGml<%ubU)YiJpkkM-1zE&(%4nli* zc!&E~DgI{q8=ymH_3@sJiCOGsOzNSE96*QmufnW%(31|+o=%}@>D*1;t=kiG*~zDOox1@W?I21Lcl1zPw@8Y%VaObP8iQvC zCWan`@uV*3_w6ocq61CdLk91;@khVuJ zXMPX=JAU_YU=<>Iup7e@NHKKd>*+}=5!%t>xI!;QN7`}?{0AS%vdy+wTt;j?A63*p zusnFXZWZRuR~?)9@*d~|(riKDp?#A*{2|V*_v_@eDz!z^H+j5671?YRW_Olkzb(Ok zF{K%W#7piw;*4mhFHXnb0ZXdvNff=ws9GWbYxfDr5U-~bNi_yW-_P|V0u^kp|NVs= z>rVi#7Xy15C7mQ)=V`LBuFO#Nr7uSk zx6T*b_MA1$Ce@na*RzF7`O{7W|s~nmItv(%%{viaPTeC0FQK=uT6o0P5oAF*m5zPc6+iV z1tH^2j%a6GdkvIfZ3Gn+@@4GbhlP&ZE_X3@CmVe6^HH)$mKsAs;QambXs{<)1`Rwm z*Hlhx<|&o@=zCAEuY0Gd>e`n^B*b(6A3!~7K6n6_@wy0?(S1SKS@dm@BqTZer1gRe zu-5vYIJ97KokiAHI$3TZmHR9OYV|6R_^DX$JdJobU!`>@a;VYfx4qJ6&ducz)C~w6 z0RnPW#l+u_T9w8~@W%l?_`rbc$&2xWp;4-Nu%?vIyaixxG!C%;-$}35{U%9MHwHD& z&?7pmO>UG#M|-GK3H=-(9|r16*gYj5o=)Z0pXm_+kbU4CXVb^_yj*}K8SVo#C#-hr zne2qo*#j5?ONZHRpEeCXu=3~M!pb-D%cLZfPmw`V(&hB_PQqJNjnk(e)w_3c$y+{@ z%WMBJVhVOfzEovIgEL0H;?l!5$&4ov84?>E5{zL17%%I3Idm?XDT$hBykOphZ3eNI zU3&w(ZE_K{4+-WhKWWh_eN`x1zVgupbu?} z`M~4`%KX~Z2^nH|*@57*>7jpJWu3-Zd8bnd>Kn$I-SVZ3i(2ug_#3xeUy^%IUnV= z!12t;xM)P&2lNrMQVf zyAFZZM^;loS=nP^X_Ax+0`k*T6&5olIOi;c7^|6We)lc8m6==5SR=YtUImr$J)#bN^E#1AUgO_r@ zGw3CiD{LeN4ib*J?QTKp8XDbjsFsfx?h|~VAgAX?2(4;!Gsm~#eagmHeuIN-rnn#} zD(j2gpQn?lhIvokn4^=1t)6Ym+3(A))?Y1<5_95GEJQk@+U1Mr=bHOEUh-fY{X%gr z4o%cS#~@KGdS9MVZHa`4_{G7Y3_ss}a+p9)bVSIT1<4G0oL^vGrdb7(^YtCp1Cy&v z!@y6GNKpI_(I^kg`4$Y{>g{nWP}Rt}&QC=YNC3cF8*Ax= zPoI^2I{B949kFJl|GAG@{@%xs&%U6W;rCO$T^XbPjI;e50&73^eui-Ns`pb6t8|Ib z)wdV;c6hJCS7myJ-zB!skmFWKCAajMH%Kjr(AxtCD?v^MqXZMeIF`yD4-af zrw;hr@GmrxXnl{oJ4vs(9V=tyh;ouqowX_9az*F=7Wp(c8t>$AG3K-}re#gfTgY+y zGoP-rJpU$GzxDQkY>(5U=jELlE{p*ZVmY5H;=w3s&ul1V_rdT?!YD^k5F>BCcvLbg zN{7G*aF zeczb-gckE{`7@_`Zv9E82`NUntKCi3D;j8)doBlo6lEoqSm=K+g<0Yh1{t_?DWR|A zRg0=4$BC@&FFEaEXH9ALhuFChI5`_YAW-*AoP4$AoT7)k%Eym%j0dgUJ#0-ctxe-) z=0wt*nn*@6Q3%&pauRkb+RAcs)#l1-~3s1ivjncBJ9@zhg~qky3N+bS3oYf8MkjwvW0S%faV z>|R?iVh*hp8kQo6Qrz21Mnp!7?xWqkDvT4&&CTrxa9N=ra7D+y;|-2OuodMa_&+j! zUm$%)bMxmX)1tXnzPSRt+NE<2GTE*zF@f{bn5pw_MX`q(rO$q;+MM|B6PJUs+W0z6 zmb*LYVtM_0nO|XQ_s2P*nq~GaS7IyX(+R&M(v+z=Od)v1((!Mg=HGCbzbPzWl#Vs< z)1fDKXlkbG5Ymk~+|7pIE68a5eMM#*-Skw3c15pwS`xrt%YCHLNI_+`Q6tK}6s*RS zV0Mm%rhcrX763pzDbV&eM?m=1ZLc7}NI2#8J-m_C$7L`#Z{p0NrzXILlUzQ=I5{1J{@}9gUp_xHbar37aqLU zY{&a-Zvta=gxi{C%a`g8<)bAY<=ZNp^#90LU!dVq!p>#z`}BKhH?yuQJ|6s1gTRC7 z%G)!s=9`FeB6Y;Ai{|;f=Tq6K6DDY4s(;e~<6<)cT1E5fc~JXEig%LJl+(T*o_;isiFnUmW?&i_k3PhD z{~~4q{>qSm^66-?!52|lhSLPeLOLp$=?YQ5z;=Vq95&1 zl2XM=n4KI@U<*GyhFV(pnNLAh7eb0YNyGCfaMWwA?90!zU)#%SUoRYL+>cak-SA`B zuVa%mzZ@e~aSsWpTrpN8LXvM%?n~sWk4?k?eA+SdymMzx_7=eWz#~aN-i6jB^5n4; zi3{K$0$4QjJX8RS2AACS2>eGfC`+y>xlg8ff-zF zBVmL~iwPvUmPdwW1rfV33P^CUi!Fe5OIP0vu_nF6xBj8-=v-y-y+3&Fs@1q1 zYXUz2$-l->7G8KbuA%3_sd*fsF7C{5&)>>rfh>|-@U`849C*?9k0Q$i*6JxLDKRf9 zh2I(tGHE*4koJDRi8Pyn@RZ3_p)bzrXMzOWDcE1P0tV|!++x1Sk4rpRc9kzXMVunK zcNIN^pZ4*poG-Ki8UVKYFIi4?BzUFjjIogs9B)MGauYPb#qmxHX>-9Q-q%MpO){0% z^LW1R>`xBb`sM($)8hah!%iN%uynUJLnp9?`QHG_>{n=Ty`U*}Mkvkjb)OAKlzgyOptvRt!AW z$J;4E@l>~_UAYuk_L66lB>=Y4op8gMf2g=%sq%oA|MV7aK7u3|)7!I1{EK^%>cfwk z?EP2ra9&I!rM|3PvDB~CPxxq%XypvH_*b01>qSBVbh$Up+u*zfoTD}n1KxY}MmGjH zNB-wanlNH!Osw8Ws&^%my6ol))UXZm4r!H#d+z(F@Yd13HI=Zubw>xendw)8$bv&z z$i_xa7gu;gBV473ygM=aG>~Nb3Cog8uJelvNQ2frNx@)iUADcF8nr5Tx{h}#LwCxN zBMUjIK)CLRuPA$K{MoRpx3pgWQCVifXI4YzM|3}aZLP}vat;zsEp*%^+J_t<;Etp< zy#g@wRx9p~2_~iSp7s z4r#UwQ5*cCk-B?CG+o`T_j=tHVJlO#`fC%}Kp7a0(G%m{&MaCBAdkg}Ga=j#5u@%(Ppy zc$+!yUS?vLYg7p#?NIS2JZ!Ro8JOhIho7o6&NS0OLdxIS331m^NIpmU*h1wT#>!#` z>oncJ_UCSnWCE`!qdXE3Ude9|ELTgJhFFK$vBV=`{i+u?4V2%CM1?%1=%U(qOSEb^ zU?ux~h0*=tvio9;*IQp~Cm3r*zA=vJv_Pw?e&|exkA}Kw58%==-7AmeplDI=H9M}r zR7aZ8__P9$yJ=6bzNd^;J++EgHSK}}wtOuPk?G!4vh*)iMa5bcy#YDeqc9&YY?M#( zqj8m=_E=@L{Y4>i3`v7EBykJ2PRie`2jq}4$9oW_GfoXN9*MLbPlQU;YsxrmlV_xe zxrEm@_n5Q!E!C=d=gOc#&KG#!>%>}p3wWhJ96C)?$zXWh-;{oze&&06B;q+Ae+n|2 z`F#_nXwOOd) zkC$iPB!C%ktNS47JQ^}#7$^EoF5t61l$)BI8EXO$yw>2^toq3H%(!DekqD4rdBF7b zR>Jx~wwJHg+!e&#mrA);ug$J?_;??K*sXTso149rE4pF{NXPd+Rb_xQ9Z5Yd`Ds-v z--DZP0}xY{x|bb?(*g#FJe|Zrr#>F)%c0?w5&NPcJ z!ztnqM(`lkryuW3RjTp$fnN*;1X{ZA{5Xf@wuXVd^n{Hp)!L@4E#+{@e7&MPo3!b4 zhrDDIYd(ndu8|BQbID;ZS3ig|n1+*J7ZV#kZxMmwNg?rq;L@H3>PQ7=Pt`A;m-<%! z9UfSXFyeC`StljB$FUvlrqgOKuKnu{LVBdQ@qw)yzFS1{uPCLL-HdS7RP9afee`FE z0arwIt3&0UULDG{p5K|YzmPuGxPr66y+PK4f7ELq*`rlNygBzhug>zHz5o0fTK8y? zj7&}Cxkb1Qwi)XRc-OhlN)+;NoZB|!q2Ujh;KmKMQ%iYxQwW7~0{Xp;^+6tSrCTv? z;gqO$J)YgF5#K4nnKLgq)I$FcZ*Lh__4c;=E>RExL8Uts>FyQ~P`bOjyHk)(X{0+R zAl+Tk4bmmu-EhWSYx#fne)fLOtMfT;m!CD6bNT89 zd<`V1-pU;L!O);R+ncHi;l|9KODWUeMu_a)-Crk#VT*BLyX=A88qG?A7nj4m=f_EV zJSBNeo&iAp8*M_aUY71FADX5pN${9*CAz&H51C{#ld4H$5teGVogmS(8!^48q6X|^ z57~M>7gr}mgde$n(0ta?`24x|>aPFrXh1F^c(3u9kqB9_`r`+CvemkK?KBCCsa(Tr z9WlPrr4j;%;y=GQjRz2OIEiplZUBBkX{D^CXmSVc0S{~=Ee0WC` zT-HyiMJMZLJ2S--u36sI+k4Lsx3f8R``-2OFzH7*vbGLAEP1cuI z$Z6gLgKESd>RViOwCc%2>3&%J%ul90fANWw$l^AkkpKb0bN{;o8Z;{$_MO^aqu~N- zw9sHP7QeUTy*Ya7d>`h-VA+l&o^0Ddp5y|YQY7>uZTLHDCv}*bUHDGJ7?;msVS~-} z8PmN8LkXRj2omn!bxS1&H5|G<%MuAApN!XWfx9@Q615D+=hH~eH@c{ZbI66LAY7=* z0L}S~#dLKTSYqfF4Q*eaFJCkebWUtLttDA`bpqQI#gZAt+-)nQAu_KQ6981p#*ct0 z;b@gF6=P;uu~;=ABvjwD;NuU50x_&fYVI2K3Q#4fwz{MfLA!(_nUL!~e|{>VjfrOj7`<5tXx zos*odO`1q68Klq4AvgA8oDY}V_&+C(C%3}4R#8K_-nzDm47LH?j|rgRwbKM>Puc$U z^ECmJe|w#l8&od>OJMQXP4-TZ|GPRMc|19McOP+(*_<3I{8ZI1AoyB&a0GCn2vhG7 z3xr75E0ovkMSEbKpab#FU`OGMqX<3gZ2RNjaj&)BmwY;h9fz479}ttpq}oT)7TcQx zmQdGxMJXQ5ZV{fjIrsEfjTcg1jQD4 zITpXhZaxf642o&QbGOk(%yrtK(PoTgD!V~F-H&7vB5Xc$-5^{D0x+YagZ#PCz8U~!Z+uxN`j(pz>#0LPp}|Ah zNmm!y2MP`T7fs8*)Zr4t1J{i*Q1@f)Yha+S^X40E0^;kSKk@tEH- z>;P^SI)il`>``b`HwR5kyF`0| zJbsURsv%251f6bNUV`F^l$QJRgp_%OghkS?t_z;%32kq(J*tP3l3lL0G)(Ip2Q?+k zmJtdxQe(TN4wd|JxTa>+V22AEDnrtgb8L1GVPQc#s$$y`+xpF6fEAB9L25tNnR?5y zHRn81ook^gqwNPn5c5O{)mzoHl%lD6%gtXjVA^0L-kM7n z$RYfmwp4|dm`*2gNUy+iR+gO|_wyC1tmRlc_@ma?1lSOQ?|_`qW_kMcYVC)07$ew2 zCh)IEHkhPo`1~{FPL8-pR+wTOhJ;E^^OF{zj%)o;U8{`!B)v1FIVhG7_Ci&7{6lyv z=nOT{?T`=;15t#Rf{0M8?y&6;fShz?iERmNrZgT~bzBYUR{gBT8!M#UK^13LPcrra zJ+ivJ=_vzodAu`H(2P?S z8@Bgky37M8!qC-s>MW0Kyw{)#9aw<=0c5)`6iia7?RzVX=}+hL6y~QX?ZgEs&IkS# ze4L}lyIOW`J!d>W?k97?&vKM)6f zH>v`RjE!PL)_mc7tohmOFIUHn`8dSf0W0&BmGrB3YFU1s#qBEQDO?u@Px7$f|X3>jBm67{(dVu z&e;i#AszJZ`^cKEImQg+&~FCCI8*b~UDgXuO!m_!O2j>vmrE^q)j*dfC@FJ)_prVO z^G8=KfuF`wWB{g5cA+rfWhG)+EP701mEq=smRev zs>3f^28201sdya6PaOplRP+g^hFZ~yX(3QtXw-W^iTfj)DZB9O%e+|J*K z3Wt=*Q7->pr;VU@`)+#*)PF4E-8cx{%utn#vI^ zdkA!xHH=@A`c&*WqQTUGm<d(klHZZ>we5WnprBf`qgI_72Wh}NJQ4- zxSnm!?KWK#EhU}BhR6Fqq9H|MUNgo1GrTJYtXTWs&3DRj=|}d_KwOrHkR@U5I}-qO zsdjj<@+f2)?V$!~+G~DUt876-#;xUYw?}g zyRI&dSYQ7|ivk-uoy-+l;{@px8@nsDPzxTuu;|>b^j!^xTOydJjJqsgzMtfa)783j zIj;3k8d_`8Xjz%G5IYJ!J;8SFJ^BdJUmeMvqG^zy)5SO${vfFG{nD5 z8v6G!Ld9Q(RpR~LS^*p~hA8p&;CW2J%XH(~ArWHID^5jbW4+GyFkNeu?O;mU2r*Z= znMXnj>D<$NTekO`w^KiNS$dU}I(YUgS3R=u?UxPfH!f|j#ziW3LL<5tLV9k(+eUx0 zo7bT!P|77pU+gQI+!T&Kr!Ub!ap%6!Y-Dif1Qa{Zpjp47>lt0%zKN!9k)faQUDx>7 zmV$U`=9V*=c^`jCf@;sZMr6_dQe?sVpl#)9_<)5yC6S0g@Cq z*l=@Q`lsfuKTDKF;$PkA3*kg@VXUzCCiDWO(;>v%m43Amlc5?WWy;uIvIKe;#s@oo zJ+m)Ad_lbQ>ce3hT-_f@3y$td;6ZC9IC5D>2Bm?Jjf%vzmAe2V8UpNuX%+kv_Ro)5 z4QIe*;jaCm=t!D@un0SV@y(Igyo^ie48T|_%gOw3C9Hft+zXg*AtL0;^&B_s!d2S{ zO0lZVJw85lmzQ|qaUfkKx$k|;Ll0wq_Px71XczekuY%TO*INGk31q3cTVugrJMIi? zM=YrsJ1%WD!b6F6xk^V)==+9~Bc#);Bair3$8#x*yBAq%P9676!f2OG9t@|HyfY2_ zXEg41a|c(`7wgt?Tx&Cc1hcXSQ!En!+v7yc%7kte)~FDZ`5wpOwdTFu3(jYiogGag zIx_`Lzuq;K9+L4Pc(I`{NErZD?*_CqD3IqbmPIE-m2OD4gMA-eaOM6)LtXoJnv&%$ zO2Ky=AlEDRx#Ot|`{C+6M^Z#F9|xX7Y~KHLgpTy{X^a?%RP{{ zw=IVAtedc-kvm4w3HYwnRATwDQs(NPlV(%P(Cp zt1F_xu2np7;5Qi2FFw2KgYf{Px1*{dk^9TB({96@)rf@XUyi+u&?90l$vggawm>6Qwy&+1ehZvN6Ompzs~jC9T(Hiq!J zz2aIMibI%xKzD+h5sKTK!hZS7Yn{8@9cI}{0(+YXg)lT^FDPs?f<#E}4K=SP3$oDI z8Yi4TfX182c(r>7&Mup)!q6J3$L7HpWgmMTs)pfNWNdw{r9@l2IEVdHC4{mlLK`EZ zWSZ;Y#?r`wx@_@y_ zKP~*=)%^j1WMg0{%6)i41B#H^57zWA(PLPX8&6@0nf{btqo@8)aj~kozcCSZ5 zg#qzUE}5=tkLQte{LqyGRg5#_(zv!D<@i9WMW;82=W4YT!`*2MCDeQpdp~=V9Oa$> z=gkyDjDU7?DF|H?fIlk3h9a7e;eHWGqIi0pSW(ndyNmAfT4qDUdt`g4yk`wTW z?0@rms;q7P*1YkhtoX`gBv$S}sM6a58=i^SUi${#>?~9kx8`j{N_*DA*N)LFmuHL! zC*Km1R1DL%;i6vy*12=~rUcexeaM!R62(g=NBq#pG3R>b2$=`H~f`J9l4LyM_mI&2@7uT7V%wh8*^@r7abpHK7KZZ)nflsjD^k&7Nmc& zV#T51XNm5G&l-LAQurT#U-hfYvP2u1Xm7fq!&tDxG|JP~zRi4Ie;b#^(yFYd6DZ|J zLDR#i%i2M`A2BGzS%32cC~OmQJjyBZ{u;prs#5>D9~-w1X2!{GRenADZ=pqJ43Ehz z8!s_7f*%ZUAv{Cd;^tY%Vf(Z{Wc=qWP(rXh8l7qR&0vV4RYi4RGKq-anA8gd#qI-s zoWJjDvAeU8T>8S|W8(c(T0FvPM20#?j>1nS{Dl@cU{Wu`;sB*HFhuH$Y=Mtz4khou zmcV~)2i_jLe^AhR82@i3y%^CPX7Y4ta*nl{>Vm6ahk&2~0w771_|TlhcB1OrI$yw& zd|MqL_K0kaKZRb>(a>fgpj9h{13%1V^@fbODJ=;uE#4|%ID~11X;aaekL#sogoN+( zThwKnIctWN{&Y#}1JoA=OoZ3iz_JmBXmrOpK#q^OB@R`&ve~S}d(YKnC98u4^>5u& zmK(<8X{KVUL-1f{7y!2Om0Wo}VPz#Gc=+f%`l%~@4VumemiUa`sUVxGkT<4Au=9-* z(uHW&j&ki?g0NCrM&z-Q){aVTLO90i8RWe`(hmd*w7BcLKZdG3idL|OyFd$APv`4(D zGN+QVP~P%ki}>CFwWzSK#s4d8FU+fE^5g)$eP%cs&4?QfP-#euy>!q8mm2hWdZ`Z# zh7qBiFn3L~1lJsKt)*|(=c#9COqEF0dE`l6?d=r!h+4eBqKX--4Nwg&N=9GxO`a9H zdGjq-EmvhDgZ8I_X%6#GvOOd;qNz4>#t!kETnE<#TSRT3GZY>4Dfpmfdl69{MV?N* zKt>?A#+=3+p(1CjviP#qduaz;T^1=_|IfuoIPw@x$zL9|iH4riZEfQ>&|MR&6 zp0QNNjpql*Pb@q{PPEyX8u%Ly_lDGlwHhX z%hNdUad6vo1~_tx3d>?sAPjmmqeJ_lSYXOC&<6KH16 zAhr{(F7x{8+{UIyut{XK_d##v zaD!slAQIezj93Q+%@uLL0rvz6DJwGb5_6N+Jwv(1N-J;yA$oe^IX|6W>Ifl1UxmSfP(Bw=0INL zZ8r+4VcA4Z8l`9PFKsAR^=oe{+pMuiM$5SsNx_>`vsXVV0XqNw9#~}TSqOS=fFn9c z0%Z}NeLG4%Z{2#rqul>+dHH^TryQRSCB-L6)uH>=>;An@D`8j@=A}I$@XF^Cj>}5d-APtW7H(tHoFftJI3Pm1 z(*t6dknP|`&-4UGa6hfnsJj`WfRK5c=F*5f1v#IT34e^;~`3E~OvPs~1imSsSX zBTl~~K|hkt6!gJ?zl0!>n#Oi4ovMFEJzZmHqX; zf2z-p^yk)BrxCEMCg9+J`;Gaj|LYq`OIrHE6dhX|@0szZhJ+~Wu&^Jn36K;5=<^#s zwi=-vg#cby|N-YUkOp?qi!aOX_s9j|JQH?&g zJyoqAAD1pCff%GC6cvC zW2*$4G;aoz(&#MQjJC@-fia#!P{lu zPv%E+h3F+p%PB1DeuCy50{1R7n zQsZE}$PEwdExLELqt3<`9@b7&9IU)<7u<`F!(^+~{5Ley09ev^Jd5`XE>1n$;p(SN zBbkSzd(QBiCQN`*Y`o~>dqw-Wk+l>EKpyRwTAp+p8SCFJmpq;ps|f|pU2r`+#aCq9=R@|>yOc_9rg7Ohs?zeuI=oQ zOfB4msU3Bo@QLlxVgdSNPHIuLv|6Tv>(TP-V|+V>S*d|U2TaQb2h-!-bVNi?%^%Np zS@*s-%eEPWu-m39|q~2+lM5+J_ zHX8+x+ZToJhS2qVOSAFMayF_;Io`cmXM?D2HOy%ADmikBW=->(HI{j#F)AvNyD2Iu z^NDg#W5%dJXqbuUv&(9CHI(R0VJV7{GX=DQlMLvIq#O>duV0tlp2D zj@)uN@v068w(-mzz5tAj)r+~@EUBebFh$)Ut{k9Id+3z1Yw2txY@zflX>r^~znqQ( z|M3;3G|kQW^JC79$1|3TLq2lG+T#C?6^^RzqBJ3N)=ceaURTzz!i5f4^_z%R54el~ z_WG*FPD=MU3Z0~)o^c|4Fs$`Cu)}1_p=MFdYE%NSey`$am%4 zK~Gy0L{!>BS@gk(wHNdNfum5`xH8#X8&bw#c1~}CuwGV=niLzno_7Jgu z@m8^MD23}1Elt@fn4EnoOGGJ|3zNpj@*Tx?AvrOp;{Z9J=}U^gMN39NFolysk!qM; zJFotG$gfoLE|93Vzw|*&pIi1~VabcIo$vA7>aNk+q@XqRoTKI8LWJS5aA_)pT3=T4 zR{JHOmgc8O!_~L6q$LQe#4pr4c0=3_Tc`LO13jevF&sci>kJW->-|a}lPu?|Z!pDV zw(r#d@^q*+d#u63^|BMNfukbhX}f}>S^)m@RcUmpTl-bgYh2ub&dzrXCBxwtD}k$rJWeCygx}9r@B5k- zi-8W%mtf}A)9lYK{oq_whvt_B;DeW5KXGU*y!p=}`|;Keggok@vQlZVL`#0RmS)+W z1Mk!aDoI_S8At#(9>kr8T5V}%H~q#N)aJ%@{yWeZI($6GJrjNl>}$@P4FU>&5BHYu z$aciSL3k8w*4bPHpxDNa$&T5NGD4K=aKM=URmTZ>QJMBi)T%a7?DL$q;9R*4HGjN> ztlNBQQ=rnf@kx`^Z8@2p`y^iZ%!}gF?bO^O#_5tvPcexzlhp%VW)dP5!YmKpro-#b zEEm9_(DYct&(6saB=ax?Tv3@j_jgiRZ3jHJT^@=(;UYnQEla%h*9Ej;5;v36IE$_& z1GO9jD5+^{CJXny1YQ7*+GFQ@9Uo@Pa4z{r_1xn?^y&np|^L|C{$qSMQ0N|XQoLmq<5JJG0FMsJ9Z3f%) z3Fk5PRG&&8CBV#0C{Z7uo(tuL?}t>xbZzeYp1JJKzt+^eaOlFob;Ew1<8ku)^IAsC zR3wcmElpZ#59PXPFg&%~w{q??&+SzL1XZ=KN7Iy61PF$5EzSG0Rp@JA!M8_7CsBE5 zhWw^r!*D3FuQ;nWXR_KBc#Tl5+Q9xZ`oaZUMa6iOL^)K=A#RE*wmml_`p+T-!UEIr znxO>s!ZSNvA5wB?R{MjZZ*#Pp{h=z}72W^3Zw?7L7irME9U$ITeL0XRLeY(b2}0wB zR|Z%_T;OUyaVhY2^y9Fawk03$vU3uAq8(TxLNSXO5OPg85jA=-m9z3X<>OKlumxCi z^h9~95OQ2Qg9MAGB2Qou@{5;#z!t032xwP)=+yfBN+oWX_q3M$i9`oLE4M{v$)Fp4 z)u4KpowLSkd6KdASQv zBoa4EfKA1NJU2Hd#APpIa{G9z<1*yZdR#(Ks3pC{>K+x)TQig2!=h~7tx?zz4xZi= z(JhM#Lr{R%|{=CXsOe$DR!qRd3aEDR)|j$V4HYjWhwTJWSk}2+dS3ys6$1} z@B+x-;4B-~o*cWl10zH5*EV^DHlR&zjpZ%%?fYx|Hi6Yax1d$q1%pn*8z2sYFtuC| zBY183W~(XqxNh$1j3Y-?WvZ=QPDg~WV%GO|-6ZH`XU%cKg!lM%U_361mFtA}4oTk9 z@S8|@HgBmdu@Xrdr^pE*)o-nlhO%-BzZaw2QZ9(4iu%ieDUKj%t=B4$_fyLwgp% zW4O#!?I~Dz=R*yInMp?wG+%ZBwaFW)1dBL^H`rIHw0 z1C`g5Urk=hN^3>PBQv$6e@G_J(?&25S2@gE+G9RA(CM|#q%I4=qzn2|%JM_-G`!9w z`=@IKChXU(Dzz%}Q5afUS`zk;{3Lx7q7o9A>-r|?NW43Qk-01isi_3UP@-@4d0I*e z%@jJU$Nl}i(0dgD0a+WZ7PP$|PCSa0G!O`O#K#QzK-;1zZ7hS@0(r{U$z|bkpXVz! zX_trhy@Hx)3LfSAG>yUnfRf$n0z`TM!6=#NK=kP*UHjis_S}{UxNQOdgM|hR6wSrB z57^{B^SEX4zvm%u7rA zGouf&^6{Nc262w2(eBi1l2?+z`-q4l<#ZN%krs>1oSx=PSR;=0wX`{vO0-rhgwbW% zYTk!IPgpTw->u2zqo1Ga*{!$caNN=(n#u$e?OPD42w=T->F6|hHbr=zE!ztUg>w8GCpPE!7^ibQ6k7O!*?C=zHcI?X#um?o8!?(X$xjQ zu61J)E}R6I!{2wM+f}@J<|40IURuIlKw;c-JLbQoW!2;(=w;QjxX`i&Eo5D+t!@5# z3y8hRwMuizM7g$wXs@zcEgWQ)efk*XMustX2o0D4pqJcdbcz?PC|HxJ$&m^HufD!M zn7WdrSWzEVwxuct`%}kE#pY;{5!-QXZZOO~8djG0QfIdQCW z3A^}iFHkj&R$IrAE}uL%9B9PEWxJ>COGCz)AOxq zauEf|e>$Fhiuq~E?S7T8m3B7k0U!J3aG@xmHouconTfk#X>oVKNXXlu4|2DOONV~h z1{^X2(k8aAw_?7F3%^c4jJqhS2EjPT$9Y;hdkK*V^q%4%|E(HQ8sOtn+I+_ie9V-h z2&k@>bJHd?FC|pQfY-l^X00cf+O=l!Qc`r-Gs_R&-J+nruGZ2OT)}o6UtleB)1>V|aI~a!0e$0Hc zAb;}s$yd?i5j>$D+DYz?y5MKE8F-I@6W_&-n`SY$P8T!xD6FnYtiPexi-3byd>ssaUpiCHYSxIgw2t=zrW5$ zy2v62NqsmZoG-WyPMpne?Tl=4m6Vn9w{{~LS&O$i*$i&|#V#XTTcZZv2`nM{+xjrA zXGCw>N8PM;VYvju#*S6S-DeMQ?F@g*oyq)ye7>@?2Z=kNyT{q8&o*mGBd3UN zG^T~QyIF|ET z(Tdk%TL>NZ+najxaZVWFZ7e?)f`3)tweHu!++9Arn^2BJ<8?^(9O+zgxgo_XNA4Xo zT42|?znyxAAmDX#&F1_&<5p;CY&!G7lY(9h`$!ROImeL@PhJ)@$=9Zr2GIM{(@R<8 zrh`S#4(99fCLTg*laEeL1U&hBjqTxP_dXi>#=zMLFv|!<4UA)%tipK zWQKe-k4GGZ^rtj8vtDD_1#_)gCutS0LKy8^Px7zdZ&35ntt~P=Fk`23sf`K+bV8;W z&dDS^Xw^o|nqPT*)|dZB4-OU!rLGlM=3n-UH4K7J%~=epM6p4v17LNfT&EjBo<1x8$+r1+utBxvviZx)|K&t3{wa1Oya+Gef6 zxcIUtPh46aYA!%w|28BXB;4ZqOAl3M5kJK@(v ziJxyWN~;|v`1%~Bm2mD+pc3yc=daGvelIHIFVZecP+Bhlp$C6Ojghzj{V5{Oo2Z{8 zS+aQzj)y`zI+5hZV)qoX^rILl?s?Oahu%J@;J)}V|EzX{#z#mI-JoHVxjtfK*X3lJ zV?B<`LiD45X=Ql9p%KvKR+-PJKU*74i@<2p(LIEg*X+TwdGUE z=sI;rOjNXcQ_C~JDAiS7Un;KW4W4~hHJ@WJYigPnk1;t4X^V;%dZ1gON0GX|!H^@LZz`BU-f;)Q?PlzNVc3T?Y8qul7wm@0#yNeL(qIl&t8WNxP!#~&u z3GD-i^$|P>yu(nDf*Lk2_ISR?=)DgCYihyy*e@@n-_{Y@I&xoh85YFiaZEIZtM))t z^k+OhXgQSRzPzJ?qIU1ry4X6+(nDE`p4{ICwze)@^7tI18m*?PLmF~*a^(*j`NJ$tdX#vzUSNfq{SWoqt@>Ebv({s(}(YT zoWsU&I#ob&wGgAy&lwQl7pPr|eqJ|MCYW8T{KcoE^PdwAt*O~${QatzmS=eCn# z0nxWVM#JEu!iYz)ng)-5=3C6VL{6I-lijyT-kXJww@<{DM$TJIQTDme5e%v{%`6&? zD0jt4ea-ZiMAD}3?%cO44i(ouTr4sUQ+#{`WP@aA=Lc*L(^o7_qH6 zpzunFH`8~HEj1y@16pg_l@DTiB5ifJ=x3z%nZD(LR0uG?n4}E0vR#A@zaHdmE~i_a z|EeIMn!^ZB-^|!t14v&H%v$O9`hqXM$l#V9m=%Xzil?Q_&R&k%Npl?R?Dd-=HVL~H zJKU#8qwWWS&#?~$r=^=K5LQto*P<3u)_scy^e~7H)xda&H^wZZWSAU=Ia4jB5j>Lh^y#CyC43N{p>m?uB#S8@EW zm(+p01rgoWmVc27?PQsI5WhjFg}gPpD(SZUzFBB{F5foecbNe>K2mH59MIaRrPd%G ztGb4=u;L%)(V_1#x|A%LTm63__ie9&kA1Ar(B=npa-UN*1F$48*lPk<^szs~lK)&E zI4?{$t(}nJQR+7e3!>9_mAh%lbPVyxz-X6*+i2eo(sMWy%VytQ&HC_zw{{ zksXTU17tTc=b}zy))i5H){`?;5JUG;%2AZK(hm;sCw)Y@Z=cyHqL`_}sL!utLLWZ} zj(=6u>pP_nczsi?2?HZ(O)zrEMkPwHvCfKD&d{jse@DdQK2KJ%IDN}ybNiI<(;7?j8nDFqCL-=O`Fp*DDz={uHRAXL&XZ| z;)w!VL+bu@(qvLP;nube{*1qr{ySKZ@*~FY9TRLFtN|~ZR<`7ZEfwm8GlLrw-?Wl zb|M5%1}$ZZCnXvNHEr48<+t~8RH8f;g&D1-Kn_zb92kLE7+&wq{@nvzUBsJ(eXI<^ zz<{4S!0iHK7t=ncaYOhB`Hxf&{!ySr@HK&Y6oiv@!+wiEG&mi; zB(4=Fj~@9>v43V>9u2Ebp4Ln|-)kwl>;%3D!H@3p@IQhm6#z9vmMJhoi3Moa@Uicq z?B57Lj`|e+?_A6kQ);7g`GA0k3Ls?b?plKCRSSugw0zf8K0_DW)APfk2&vc}Wrcjz zE5NY&^V~M%rL);^!-N@h8L@Sk6SLdk{}+s_yVvm-a+QI?ZiRw&u7&PaiC(fkl@9CQ zm(SEW<0t^eHR0-`2=c=eky%>)RLk*;UMO3wXfkt2g>2i)K7J9{MNp88(FrIw^w_#< zMsICc*(AU_KT&L0-M3^DT<@G_E%(nbHbO)2;v)escjT)3Mt+4Kd@m;dY_oO$$2J>u zPb$UWQ>#VfB$}ldSd4w+{}bN)Kgy{iwdv|S_4Y*Hap)7E zAWpHd`xj8FY1X+je08dcPgw=Sv|$gvE(uUt-=AzwhA1aF3j^tijnYRcBm^V?1uSYA zP~|CKdH{=EA>-)MXIQKTnsS|Q`5)0tV!hmGZxznfx_uxg#x^=25Gpt@Q@!T6Apz3b z8!A(`a`zAgg->o)*BE+Xa%5>ludR&~oaomO5Rm4l>53kMs|n++$_i!uj;tvD`H^Ai z{f!n^X2L{qE&%XIMfB}i_vE1s+Zl*w|L`a=53v?_H|y)ew_;PZu)xU#b|>g(j3IeR z``ZBgSSO{rW2nLJ3uw_43b<_15&pN=O%ToaAO`ZEfi^mF^oyNK!Ow9sFeje`-80+B zw4!+MKUHmG{|ywD<>Vl4?*Km@g-ENBRddT=c3y2r^Oy)(dou8pD#X{njduW<#Q(hf z-=t!SRx)QZ7|@bJ-{=ExgbtR2^PN_opNv&h-j70f%k>vVN;%+(u4P->3Q+OV=40%* zF{*OX)~d!BeQ#Cf(G&0Y=cR-*Y?4WBFBDkWeUX1%`{m!)$EpB`aZX_}=eP6s>9(s9 zGWZkmS|A-g)R1$bU->>NR@E00Bj5tLVTR>kx4oe2e4i4XCr>L99b{)Cl2KE!B$jx1 zx32eTP&6iQf`{d~hYITQyL+>h4Ok=Cn#-MZOQOv3C>>}>_|hkfu~$hXU^m#2aYFbS z9pxqX=RN3EU&Y(lxdO|~9Ud%o<;+U&}%WwA~!pHirJs9ilomd?~I%*?-Nh)~kh3;RGlcM&Azvx3) z-zE3++lmju5{SP?)qOKe!q~`FVyGVJ?|hxwJ=nhl>)B>$y;@6W1_Q*Dpb7Z|XS;T} z#?}59L9a6=0a=gH=vFa4Is^y7ij6Y5^*_4@R4MhmabgJG@f>X(U*#OH?^A0X6lGji zZ!q%xRTYzp{{0jh*rD|3!Xx z)voeq+3%_Lu>oL|MaBFh_I(v{jDqmjh?@A?hy`|gUAEzLq00A9T~Xsbib}*ahyh)@ zL#UT*TzP@BZkMuTO1qkFKPe(*iAI!XX~KvSO%`{_Rhz?A7}+~Mpp+XkonoNtKo9rF z{gEji&m|_Kt?W0gn1Hk7qOD0C^5n^qpK%v#Uic~jE#V~{8BAQ(J7Z6>4d17K*Fvmq za1GKv2->=*PefwJbwaz9G=F`Mpe4%fhv8kkvb{l*N<~BUV(vjRe4&SJIp6-VAVKhF z|FH1s7y4}%^-gXUV)Ay>l@yN*`Qvj@HdVXaohk69|JenM-{gQV|RQF!|C|r{?D;BK=KE(7~83jg=7$2 z$IUZ8N=YJ5Q1l=3AFE&c=NpOl_pygY4v?HAHtrZxunCC>@FRyClD6xY)KQCdg8aH^c@sa-F+(FmHs5+h6iuA9Ekh0yCGf++k!Cc#+s^LRd@fyy zdYG`MPDyRr&EbNFJx^w7a_cXCr_~IKQk}68l~2Q;yXzMaflXktH{@2x@R$en!F&5H zA-|y{t*z&eryKgaNnz;gga)0=OF zG%qw66qD?Qgw;7yy?y2rU%0E1W^1;4%Xy`Hd_>7tpoKp&3D?9ASlyb@_(}B>;}k1w z%#JKsAaBZ}b9vX~#Ve;6OF1xrj2e7VP=>W=#z@jp-?l`CWg);Ba*Q9~i8`z|Str4F zw#$g%-At41!l|d7nCNygBoIFjam0RUsLq?>=Yz+yb@Q|k&eq-S4YGyg zhid+p@y+`yE{|BXixYyL&x+t--O+guK8ZF|j%h>&d3mvRo zaXvNSAnIaclX5kBSdn?*>u1+~?Sox%`VYAVq=9o~pEs?Sf3x0s*cM?$jnjqLj>n*@ zqpI^L93lTk)KebM{1QzrHDKDkerJx?``eTVVwtVg+XG6#Rkzu`bfy(kbAoER#=x&? zZ!#DPSGemj-Ip4l?>N$|{N51P8akODh-;sgi*Yr4N$ByOInf=AVq>t+ZpsaY3k8cN zSAUhEuF{#Y=i|pr^X4!7I*>CHFrPQ*>>>N9N4mxG?%n&9y*fm|-1?Rmry!q=e%jgD zIq7^0l7p(A&Q49xn%7i0qzPMOa5Gz3T7vUo+o^$B%Eh7~lhu(%b*fj+sB^94(j|Q} zoArA_0yXU$I+Q`d!@Nuv$d<$SsUm9{jjP4>Ha5H6Mx!zxdd8*KK4<<`LuR9g_jyG^ zObqpugUg=EKkU|xjA`cscYD9nUk#on9wTl}*(t99a8n}h-dN$%`)qdGL$Oj~r^69Y z_7gK@DMkwf)k3j2|3dAa_l@j;%M{DI&~=rtrX(LrD(14FL^lQY@FCTI>|b{=dWxr@ z-+eXw9p7EH++P~*JUa60M{J93Q^fNX5p3>wDFYzqgoD*<(K@f*N}9%LC9SMU|7-V$ zCMtu?&!)`Ale=?5-A@rOwq|tT(In$`-N=padfH;0wa5BNKHc?XC?qiMdHTZDpkJaQ zY?gr|AGUreolbvX4>Ysaw4n2$Q2hZNQGD+~iOjfj>+zDT~S=b3%yhfRe1G_Boh zpTe_aF|tj*yO!ZHo$~YS83BR^22Fc%SeHq z8$&VYR&pQ zC_+?2{1D?s_ldDoQ;_TG>YUeeHW~Df{tDnlg?LhtQ+G<8dbah&n!U!s@M-rEFyWK) z<)GsZlX)8uVsSsWbG{1W10Z+uXH`aKD|G!Imv@4CjPymEIW zRit0_dXBRUrQVeVeXS>~Td?BrYlGV790(MLeE;Z9Vkt-HL!-vrgIhYtudUr%cC_-g z=Xmk<@wpbC*0JW@{oTrlD#7)NV@2O(1RWPjVC?3y?QGJf?q4etjaf_(|@N%GV>ec(- zpLaP)NFWn#)lLfw#upIGdg*Nt{Px4L14HH_dc)=7dk?+k-qz}UaMSK|FzpxD?a7)x z$XYP8;kJCcp+@*qZ_It{!hP)=bF@hf)1~ixlvSn02GR3s#i$HL;!|I zZzIZf`XO*$_%8y37I%k646W?X&vOt%&^w@5>fntV+Q=YSg$ zq9hrdP9JOM=yd+k(lfUxFse~OZd-9oy zddozhACpCD3EoFA8Afy>*2Thk1XZ^Zg%cxNh_@CrnUEtO`0U2;AJsZwO=yrT|L%^Z zgCukL_17rt9setfjK?WNJtGx~NNYV*tLfK!)wak|gfaaIBu%DUU!P0{hBS~!>9C1L z9B7nT^zX>-f1MRq_}ZLJ)biKq2AzPZY9dzNhr?tqZc?~<338(9<#>auqn1PM$zVU_ z#-ryD%_{iMy-FaL+xB%JQ2;Vw2MFOk0&%7Ehdrg8?)KhK2BQ;Vs5f+85?UNWwUq;+ zrq3%=3N)l|(;aOA`I#Nr^KGD3~0 zsxHm*>P>(A5N7G_NJiEPUfgEV?YIE<@zz)6%4Ij|YXjPP$8Fzh#JE5rs?X5`g5G;< z0MkWnww;+qZ#hqHLoDcmopgIa_(66|;n}mRemTk-gMPwQfeb)vCgLSL^}4~iy(C1# z98#9K*na-_pqz;D)$OoZ1HhGdcc(q2_7?8BEL$u%Z_f5r8tKxftKHXe-0wzjSMMQL z=SKE>uYwF(9u#*@RcGppUV^2Lpxe{krMJCG*u|~oar`=tTFnp2%C`GegGXhG+8_65 zs6;>2_kYt*#u^f#_MI%0uS?xAUy246TNB_z3$BzYkoCM&~`j+J~2eN}uwCo)Cs{=y%w ziUvE|q=^d|6&o|CfI+$_IcM9#`u)X^pF>sL&3_rKg@2GUe(~wnh3#tv^HSMqgV6uO z*E@#S8FgF3jhY6H?KIYoZMCs&r?IWZw(T^wZ8o-@G`98LJ?A{<7KX2~Om?Dn^^L8orqM$p_rzY>-Uun( zddr8ca7|8-SRkj{77bQfA2LmrQ=L$FEvSu))BYJ)*n_7}8t)wv3}hwy%mtCA@24NIrD|pmOR>NZJ_8 z+nmU&sd2SsfwTX|Tbd}CKvv!BFrVIF_Ml>>x?+t8rVM{^Rb~$mEc|m9!{fyWT-@|T z{5_e0YNZE^v=3>+qqiFRI?x04Y|$az6SlA5;r2QWJzZgOxU&`nMG(VPz?;*Cg^}l@m z+EX%XI>4inOb>W8ZZ=wJjwzPPl*nx@U@L|(gGw^*j@D6=4J0PKv|G{OOifL1&)0?9 zW!%qUc5S{}(k7lXIG%|tr|18O7D%4J?{5Z%Yyn2m-vB=B3L!?A8E}u+H@JB<+*h}C zVyN2-o0a=zTGDG$_Kd-UZtlDu6jOhVPp)v zmcs%7iH~IPhUcO;J2LQnSP2QTky|;mBa3tzA4^n?_VrKn}$%>svifzaadpGZ*=fx8- zm}X~H@W?H=G?P0}wV?kBx8m+rTgHZY6Oh8pczkJPq%Gn81=JFa+4EGYo z?83Y5$C6-(A`yF0YxJ0%-Eqt1d=43928`Z`fH z8N4sGFYhmZ#=(r$GONKeNFoS^My(%&@*9{{7Lf)_1Oq^*CG z4d&S$!kJTwl}^IxKTxR?VO=)t%D&upJ`Zw>NlFGwRA5jnl#o(G*=aOIA%UT)yi~5s z+&(;UR)rI#H-AX@4XfnGjmMKm36CX>i+bd21xGirb2V2haT6BO*jl=xMCPb{-^g(K>4Y`Dth)Mz$M7`*77{D&dR_moliCj8;u zQ3FhT7;8@Z=HiB1x< z1K7$Voh)p;QFiFIZUy-*ED-T%-wLPZ*URz|I4LBE>D-@CBXbmNwX?=={?DGczP^r$ zO$@}KlW@tLZ*lk`pQTYYzue(1Zh2}9Oe95%r-%%m@$DozGy5@DWRuC*qI7iF4=E{^ za$kp@3kPpdu((jEEskjvFnW2ocObDkX)lOjmF;jy9|Gqh=I!k}oO3Z>)`kVNFjX)< z%qvZ`63y$csxM&KO|mVuiQn7Zk=18(2dyEwT0ES6N;$+mNd88;J6f$0X0F^O{!Td9 zKJZU}mO@u=*6<>J_42blTr!<*aU#q>Q*S43en`S($T`6}8Y-^)QqX9<41*}^fl3G7 zYe#j(($4#OxfIbfUH67$$3MQ9t4wc}#m>#w?uDph`LeY7e8nGCFp_ zq=N3KWxFlMHG@h+Z=;$DNbgQx&X^Far38d5`R4jOx^H4(Y>zgP!+wRy7O`@flg;6` za48syEVn3;&j56*pHx2|9yWt7Pnn|)FLT}vT+Jq!IqX?VIe=-#_Zxf;IDknpCAbxu zZGJf=tPBex!uJau-qG>af}u!4ZXCdInl|ZW4;3*KzUa2z5xF3@`;rcIaH}y@ak|Qe ze)?l~OAw;kW6~RWDOVwR92{aQ*URYYrWTjv$s87-bIO-S%5^6<&K}UMGI&15?3{`C z{FcIrzQb)qOLqQhwu~3e&!uT;3fr&X@pq+x8MrN-E_4{$@y@X_24r~UgV)bd1)Cgb zv_(?7LX+H9$D}+rr(-F1-Mc9dH{YiDDg^ZwIHrK%0;6}{y9!e??z)FE_#(Px31pI# zCs+NUida0&q}+*e^PgH{_E#FEDZ53{;YQmgF&gTuR-Hqhs32zko55O013i7BDE?BK zkbveUVFnE3QKRIg&?eRYnt(#>A%l)$jl(FVMBR>IJi6LBaiT1kGr1R*Xdz-^YGiaI zkWDg?9gcxr(YV~1FfI9_?`}Q%`r9foG11>N+XD&{q?K?;edZ4MNB);v^bBLRgz~`- zvU_yBY=OW-LuHe92^w<)*>hI?*9nd3Kxrl9K4)Bo21tcOXORH_imwz(#{{l(* z37rDmFG-zw;mU|_YppTKQ5|M>4A;^0&JaL%YQlJElY~B@11Ax=KlhK<9q7+} zATD>~X3U)O%zu{o@p4Jjvz8e(Y_Y9tg;() zYcF>WvT7|b~StLSBd;N3Z54F?F(gk7&w8_M&kRy;bC}pIBU+ZdGPPx zwl7n_h-i8n*_zDakFkvoTFgR}=hYHLXsxI&KR@uXz)ga4f^Vox@}JGPb?IHp=99E8 zC4I44#q{1*j9p)JtHR72bUYP}Vidap#v6IQ*XGIp_&pnC#r-c!mR$KOFwjRbwNd(~ zkH~*V=~+5u$o*}6bixREa?1I<(KvVN>|6AR8 z|LEpI=#X~V|CsDLW*>3Al55}PjPe?2mZsFZ7R;8HA`^mC;7CjjQ-%AwcG z8_zU*o0SRcKL_($&)fC@9S`Hel)v1m;DZnA4ip<+hfX~Ae<2>7o`9aZvrv{l~ zY;jt^1C|l~@ecDcd2DDC+M2WT4A)o|Qk0jH>f8(e!XiDLM&`84N=8qSN*R`K4|A=# z^y_DT`Gnd>l~nDRTzE2^Yr_&Pc|c_M(_eXann6-E3l_vT4jH^1?bf^8=k z*z>27b@`Y4h&qdDd#aZ@rxRO%RoSrIXr*BYh&FeEFZhN4!fm0m;YgYxP!HOShR{`M z|D(&2V?2=1G(f@D;`5@A)#4x$@&)-qyd;hg{VoMlO5FN)UNOJ9Kd8&=r83ccJPk@3 zGc6wFr2@XoNjYf|eDr83a0sAGOQD|iX#O`?!=Z@&fGfi=`huJx>y>(CNPA(8MqngF zlxsFHp!3$>>dYrGYxUkqM-$37>E`ghtN-%gggz<#pVRbx;ioFAM*7?f7}x^EBi$4C zqKD~1NeUw)qcCd3MrsY0hQhqNo!woM^U2tS7P{80KnX|1t~M2Py5M`||B!E;1Xiny ztHq4qHCJh&LQAyj&)Dj93bw?!^UNF$K>{~hL~AaanT0E#{u42vnTOKgU}z@GXA=td zOoGZ8=Yn56UY#mc>me_u>tqrV!9n$C`|~A)cYy0DYWBa&J7eHlodDMHN}!qh0ZMV! zai(X)FNH*GR;BBdz%bx>D|{u3c9fwuZGWfIPq#Y#)=)aDTMhN#;xx(@5xA!`bCh55 zTgn#$)h8esmbaRpGz;h&^%w49FV#GvHSC(O19= zTV5_)KtKU4;tiF$nu_7@gq~ z(OH1z%q@_I9JYRS_6|7Qi6mvtYv(XkK&y)=WQ;rph$zaC?R`#MgJX+XLMv!R9vm*YEujn(g6fTXsWFsmY&coVKj$j z`1yu9MmwR9--ijQG*%QO%#!tnE*m$t%GmD@{vX?mPvMt;9I8TKK&pA2cOm2=v})B@ zz$BpNy9L}6t7+*&LAz9{3H!UoBq81@BM6j0vsF?R?)kLGEvif!n58{Xnm$%g3mS$u z9TIdPtKXScP68K&)U1NZoT1$gwC+Mnj5j3eDi|OL{{BE#AtPbpe^Wf9N>Q%`V%Bf&hVu~VMnwu)9 z=8uc|_G65BAa!sW=gsdLg%`m_s;9Fn-tOHMG`hZ~=dsIBJoMn(yNMsul>0jJi7b{r#dR`Wdu+E*`e<%o%$ z9hCOBY(x>M<>RRwH!J-ZGi6sreEdchqcQU!@rBjZvH6~EE%ecUOu2JApJRYj#c7RJ zpyv(%-mQAVM`-+SQ4f(jzvCeQ4KVcE1YZKd|!exVam{Q&_O)Mv5qMslub zo;>1pH+gdaXkj;$txHcF&NTeWv@ua+f)R23$b8 z8>v&yKbcJeJi#TAWb)bl+g&P^-=jvDQpf||=y;=r{rpRJzA(f0F|g_zPlM+|>lSCy zoTB5c)^di>jAC4Qk3}X?I5S!WM+AJ!*s#K`?1PiMt~NN4eSD5yyqw<|t=Bs<6`QQg zi1g%fmR0sXt9L*2{CS6IsH6@Kn+R|1-6&V0zGr~Ntgq13EjaS#cR-ZOftWr!ncLr8 zH;`)aoAm`MReYd##`R*9G=nn*&aLXpPm`~KCJH{oYb(BL5=mSepqORtwmX7Zwp`z5 z3IY!#K)&BI%or~UL>q3F$3acmpdsE=RkW=gr}L{LBg2NA7$p|JHOqPHA+l5^A8vfn z8YS(Yps%>!lH!S&%w{-VAKqlI=9oW9^}i0(JecypGoy{+|>+^_4?PMr&cIG!6`4rehyn z(?)P7#P_hf&KG?G9oO?vcWF7jmCs5WO6N-N^j+5&&xkl=$58W#r4$XK>>Akt1AzQZ zp77)vt@`?+0gKDiubBPd_M+)sb6@Dmo>sR;Lv5Y!dZ{k?jjka(n%6!%C4j;8FNgk- z_?`DX9lH`tJB4f}`a=8WpC|D-%^T;U@pkmXUDSTANZ%;qtDXI&wu?{JXO+>m-lfTcMqIKFHhg z0Uq&gkgAbE$Z1{*$^72y?8$&a9=9AE|tTKmSR%Xtjff2A$aB~l&U+A@ipfZ*Li zHGob?6!zi5F2qIXRhwd?TQ$CCoBD$VZd}j>q&e{&)Og}#nj9s{(q~AeakKL7pDZeo zm?tI(-Y7mkFuW>AXOBmU++EGgfcX*O}UAmvLR$LX@fEhlsb5dQSlXh4nsm-GY zfiSF}=@+BeT{I^d;Ab=NqQym%FN+p6%o}DU-)UJjOA)Fv5Bzf^SDZzW@)`ww=jfrsla_Bi+J0I*gd81EJ)QD@H;q|%GQ6hSZk$qB zuLUDcxwXp;4Xxl@OtVW9k`hA#=IXFEJg9?iQ>H8-92dhPGrC75KR>TbhC2oc_SMpz21 zM7R<^5{pRl=DjE?PZ!Sx#(-_4V(9V5Q z0=mB1MTx>j;W@r!p)q$TwwH9~JXyaLP zlqzBf%i910aEkx;=g+*}_M%^nV)4{aptd<1#ZxQOYpNrjUEp#NUQkJTEedaxwT!U2 zmM_&1({TK;wTAOIlvx8tm;GSn8V}Kk%?zVi4NT&Pi5l^tDOSr*uRKE1ElK_jk>GsW zXG8?VeJl_-EhzqL5Yn3|2RUL@=t*5yqMZNr)uY~mr2}_x=87PE(?9RDcxoXbBooVQ5-d0zOwIZOcRWK3u2%Z)atq{Yw82)!oS!VRz;lmtbIyD zYxH7VUX0$IWQHtCIYedfrVpn2H?JHSOZ0c9y{~#MCt^#R{9yJjKW5XCf}JL-B_8Jf zcfEnI!lG0C6!PU% z9evlu_TlQ%{_cm=jC_K{n3RQp=cbb*ofaO?)(L^7U5(d1EX|{{frV~R3rZub#cj;F zL(x-?ch8ZZRJjyqpn-qXfNs&}IeH?@(WDLfVmPk*S_590^FQ7EUH!yVxoGHo1l2y4 z)GV{m!Uxp6{^%HJ=7Lng?plPim_Y!x{GZP;1Q6g+YooBdnO=Hyh9_AE2S(nXF(~kb zvl{0T`WzkMxkzL#M!IY0fRk^`zubk@oV&QfDo15Gga_9`lWI9PhvSDDBtXFfqe{Kn zxv<{$*ZW<=b3)K1MzO@Dq4P&SsD{)?p(`gn9@BD9LJ?tB3-3?MFVWB+v3+mggOGP{ z6Q|>7sJ$y(Mquq8Zr|?TGXnyc1B*it0?$s7<)Z&0v_#XCD^+})=Z3-mO8iqxUc&gl z%N|kK*K32@JvoRB)|hnSSHWw?Kmp}LPH5URDW!bcxvMz~#7ijf%R-*{a%yqWc{8IN z{`;*=vBQaVy`%_r3yYO{_FG|Z#9ja+&>ZHSgOS;8_pEY_NOpxl%Us0S*cS0_{Q@03&gjEUJ4eq^%Lr8iT`SFb2B+Nu z7W(_T+Qk^<{xvb+TO!>YiAVSQ_DSyX>`1-J*tZ9J-?d46g{Hv&`{XH~yGeqqK4F(n zE%yk+-!hFy*W`gS2C6@@z7sKxh4%=zlcM&JtPp~S1xAPFlfhPExJ=Z3=eQS2>abjg9guRkjFPM-O}KfgKl;lHQc!S3vA!+ ztNQX4bH3OHCpwMs{H{oVrEG%|KA#|n{@;+tD#{(!b-TM`A76mGHIwS9de!YfZgcpBLT&kJnTO-@2ewl>52 zu&%Ao`4*3#{$SY=wrfF1S$rZh7Nwj`%CT7bj$)#k%P!X1?5C}&G)vRZKHNnEach1>DN|E?1mLNi~;C)V5Y%V5LVgKUt~&HqCBM+8X%vS7uRBVnoNF zxEk0GsD~QL>Ez2uTM=7T%%}?s;_83Db%-43x0IPVj8RM{*4PLMGvH<`SG+y(=I1Q! zZG!zTb-mVTDas7xw~NsCZ?4rV{Jr}nT!1+j%NOIpkt($I=WYl#DpVi_@GhjRp9IbT51xX|2lHTg1@#8FcsYqtNQ;-^M-E! z@LplHs+wV%F4}YRv-sxH;O~yyagfl)hC|G1@fHganyBb!JT(U}^^t)h)|3OIUI^rB zml|5eRuXxyYs}b`3~DY|iNacm$3juA4xMAdzsP6;XGDfDN@5=enfxIToS0IaQj!7> zP|}0x)OT?1ZI23q)l<_G!{T%U@AD(WleFk(gb>4tOiSFFB<3;DuUwqnYD!_(UZ(Q* zlY(}LEM!rWo1aqQWceD=0AwksW1Ijhs+|2REMpK>?3FbdQ%mM?d>Dl0j|cC-$)k1J z9L0bEwkTRuvenuTz=gU07yc>3c9Xu3sy|v;6eOeXyv1wgl>K~OzWb9XKWx;@nZw=6 z{nD+`>Xy!6#tf z+151%eiw`sqlIQ>h4*nRLk{Q*r`nWToyuc zg<55`zV($PX!aE%qjgPN4rDSrY@xjh-&G6mYEf?-koAh}g7c`5qlWJ5A;KZ7 z4bh)@#=nsU_IQBJ2rO2!iO-XuE$|9~_*}8Ve+BCP zzi-f6^`}0=O!(0v1Ihf*{CTjRB`6HGA9H`J=}}lM)BU@r=?cRB5!CR8^XEcw&SHi+ zs}YMiY&lnIsMgbO+Y{A_{Oq$RMI}TQx?M6+JRHLe(!a6?k@fG_WEwDnU`Y(%>MqBg z{Fh=dXm|n`tb%U?ge)~32}Vre0#Zg;BJ#B8CJ4uSCir*l4&*?NI$713jF4%#!GhRF z(a#h9L^Qf6-i1v{iU|J~b}}r2YrZxLmhZ#r&!eg)eB~W_wqpIeq6qkv?thzFz{Y8b z6QzX<>R-!aE=jD+96Qw6B?{5bvuVQU&wh;HS>_T<6q^FEpb0X*gYF!JV-9WTe8}(~(T5%q7S}&}z?&A6U%YLZ6b6(Y>l_#8?du)k% z%9zGnhU00gW_GQ1wQ@_^4dVODFV)OmhFC>Z)rx8kUEM-C6ys1O^wlg!kQn56f>Qcy zZ9a`iVK)r`1VayA&=oM(BG%yY{s`fly}JBrGcSfX?he=IE*sb&VWm-aCJd@mG=R0W zU57f=ObkeH2!Z$cI(fJiCaF1`7moCf@-X7IGHjry$|?%#TQ z*8iovu-pBm_{@Nd-FpM8WAy}J2q&3TxB-q9{UoKp!k{80Pb|2wUCVHr%1=$Gp}1TX zFo@q!y%WnT^#Lsyer+uRxjRFMeJrfncpXUlTl&CuW+VGdhj3V=cm4$N$bA=aoB0A& zAr9nXOLbd>8t6KC6|LwP#PMHs9k@WrXi*6KH*V~0GzSX;nkE9*sh+^QMBtC1#F`fR zy4$jxp5r3k#r#w&Ni^WSOVNn|{d!FQPhP0) zZ+bQzQ+#+X-M(7dSF-XZ8X=F?v`)sPFKzDDZE{^i!xPwTb%pn`)HH)klHv zu@Ux2No1c39=rCk(sw`D2%qzqko(v_=XEl(5v@-Gugpbxdx8>u~7tri!0gQ+KxqaCK%V@VQk&e0DqB!$4}voJ~xT=}F! z`FDZ?XJZI|l0OOVY)q`0k;V*HO5kR1oG0=mJMo>A@+i%pfV%u(B=<77uKIIA+|DE% zeZ8HnRff_{c#hRJ!@G%1y(&AQU#c7+qru(ZUGIpzTwe$GPR@mzeN<2RI>DYqm%rSF z2gy_oOypa{CMJ_Z9-aiRAs}M%TXHsoJF_8NIwSg(2fh@ceXx_{esQk=y9Wcw1$*>K zxHB5l0v(6{MG!d9a9vXVIhYoaLV-)Ymd?aKeWx-L6*MSEDeBs>sE`BQkTKe$oI#g2@Ths9&>>`B z-q;M};0}s+WIyX)swqfLeXniZ13eHE3Ny!})hA0Dw-H!j({Cod1JkIT1jJ&KGT&1x z)lOAGHg1@+dyHiKWq1U>&ebm4m)J=Na9#gfXh-H32I{i$TS7msaO9N5C)-{Ps}Z2j zbm3XSIGa-J{C0r8RQ?0X01fN0XGjZ(dt%I}5`2H(hWyD47x-oERP2Q)Ry{q#e~JL~ zmwjZj{#OeMXanc*2iF1?gArDd+hy!C)OvxpZ-xy=ctDoY9(use$GiPI(Lw)t$@Q86 zi}auoj*ML=2K1tK_rm5RiHQ%!HS?H8k?z!|p!{0huJ4K5M zyQEJ1L;?{Y?&%1WE9u5`1;l0EQ-DFDecl|c3s_h(~=KpZjj5# z@ev6#;2fG3BCcPKF{|g-0I(K8Nk2`pEkbZ#DJAsXfbmu#tB^MuXyAfn>3>1|OD?i} zJfgKQPvjkjPpAEFgEkk#04MJr`GrWP|4g_<>7vyIM~Muni4?fti3P58XaY8wSHbCw zuPhj_Vp3BB`}>X5G&O|_TU~AH(H!ALMF#*K_f7`(SYAN^WR2aSyp9e6E-r3Km3vJD zZQ&^s6H{!8Bbaq1Xk5qV$Q`J{C=-)q@=8wJ<#dD$Q0yJ9^-N7wcb^%*?%F%WuJi*} zh$UX-NQ<3pT$wr=I<$$Y63-PX3G(XdZjmBZ7TU%dm{3rG9Jr{^79|}8&UKYsKVGE7 z#1f)f&>9=lxGoSi4lSi<>t`6X&G1)bbiDcSPS2{2`0`H_)YM3i^Pcd=-3kkh?^-bu z2vI!{xajc9v@;L2vQG?PQgUWf@zH@< z$U<}6!}={q`1au{#Got+sSH`cPZDv%r=WbYkREG`H>yPFpj7#gl9EBkhjK?QP^EL< z%=_OObcw@2I69;VU3w`nDdB4{2gw1cyxP>f$U zMCoW*Gey%{!yt7J!(^we@FGWd?hE_{^LT;>)ha?oKai`gwj$V((;eY&7T*zPgExb% zw;^&>%=+6_dY!Vv1wo^ebi*Qob|9g*{M^Npn6%6g-l2tEwKeNC?mKjjmDa7@r%8kR z=HE!@Ge1uKSAzH#d?MR>Y1jCU)R)v&!(Nj}iAG_($R9&P^&|FCvr}k~GZb=*k5T2K zeFtHG%5CuI=n>>}B!S)M56Ntux$q(Rg|r2?VQCRCyF(Iq?0IuEZUxlcT*0^=t|ML@ zk4+MDP);R`0hp$+@Ns)cx7zi}{_*K0uf71y*x1I$vs-W{OY+j(M=l6+>U=K zvwV)6{$%hK9^>6yUtg`kRc#MX@9uawmFmKAMd5QlZ22SdqYlYaY7cb_eBc}^ZvNW^ z+IbeOE*D@NoSYIvX;Iwg%~0%rGBlKJej4;lIvg4fjIv%PWJT6bphokD0LJFZycQ>Q zna6X=pH=hu?uwmp^OK*yREeG0HC0X*WsC{$-!GQ3rZ69xmaOr_X2pi8GZ$?|t=d#_ z1&__gb8fyO@_N{E1G{H+%Trnr`|Z$ff(jJPc1swOiv9j6sQK_F-PRkYK4*UxQEC)Wh8~d#HK3m%r!er*Ju00#bpl zQ^rcFZ%0{NVM0I(ggOTOvku&zc5XGPYX5QMmt(4ab(}59F`549rFDZ}5uXK6XALh; zj-zAg?(nI;+s3#+es;!%b+>U#|w{-!8Kisoy%>*B33&8 z<)%NqLxk_Ymqm5Iv9PGA4UQ01Mke=uO*{z1)n@*KKbZFOUQy4q1gJ^v$O zwdn)tpVQ&W7~z3ulqj4x%20#Nrr<12;>*ib6|L6o zA(;?SXd=LSC?8~fG+nokz~Y1Sdbww+fGQ{`(4XD`v`_vn{dTWcFOwk=Uxs=C4^3m? zxx-d9Sc?TqB-CQ>H)90v*LS$r+rH$b28*g{B{pH9ho?so+Q&1GnhDHoFQUW&lnfrH z>8;;sj?FXpP)Ra}_#e01CI>j>p5!^L zms|Vlzwg_{6kcum(3Q%o0x<;8cX(b0*Q1DpgnKaZtq|<*TyyI`aWkWew0Fr) zS`J;qQN*e&FzWWhlWCygi3=UH?hf-O{EB;&+SXV`sW1}{0dd5AiG=-!yV;!YT#{#z zzg(Ps-jqom1OdS5X?i%ZS^XHZ*eH48-h>tx_G_$GTy#Jjk6gJ)+D{SGT*^6tAN`b> z4N%fRueW4dhx?%5aASAV5WK$#9*3i@eelA0J+=EjyFu!+ zwgCU7mkwLdzpZKAJst^fA|ndf4YI|R6mAGp#~otR^Myn~K|xxQnpic4OY0+PAM3WA{1(Z&490AuXd?F*sgz;EnYNLG4w zLPZ6IS|r1tFGlL(L+u_9eC_vxZ3aFKP$JBGGOe=NS-sayTzl4OB20Cx^eq>KR^NZP zRMw)vBO;<_FLQG4#J6zWRfL0qy`_A zE>#2}+%7tv6gxW;aLHXA?oOCP;xAbY-YgT@(L;f7iSbaw?hbRs`XNzaNSh^J&o>&v zi-ik|#Mw#z@ICz5{Q?7nvT3F%DCip!EsLgua}2Rgc(P!FCUjPP@;Tj}9#MUKb$JEG zclytSwg-db<);9^W$wa}k9~s!zc1)(rTO8BgElSLb<+0M)~^ypauxM&9dJYp7uRT_y%_do;nHKlt z@t53PlEp1mzo_sD)4Ac3t+O+->*CiU**2XFer;&K@@ccpJ@9`Vw-Ul~q(){>76hzg zWLjFUltyUv=a>c?4Krc@nGCd1ux-2x3O-zan@4Wx4ejm3a>A!;3#%}c_ zh?dn(w8pLaH&Vf7sy;7JAxr+(P6|tLg)tTr%@=CcaN2;5aMsr7>maF#GvvN{3>|ZB z_?s{KEEw9#M~k8m<1iF<*EIc#n)sC27U`h%LV0*B&a zI-csW1o9Z~fSztdP~#$Eocc)Ms&Rvpv}#5JahW!>886qSUiO5m?Lqo5NNfmkY*RFD zj=tS$XBLb75(7EANlW!Jg$MgK#>yD0KuFhE<7)_C=8vs~E7@?hZc-xd7xW)89M zbiNglyr))~{oWcV*AX)%(dk%whFE#k#bV8c1-?%!chl?R%4(K(r_0iwlOyAOWmR1y zS^{x$cxY(9OtXEYn=43%cPuul;I4*t3b9!2Q^dmG)xuhC4ph}gs&wiIHoZQWgAfQp zw)=v<$e%Yog~tFI&_?-mfZVj5FWZR*zH%2os6XE7bGh!qud1HRIF1;4quutsXMKG< z!66oqd+k1%X8#hBe>xXUGVXeP=Jo@BwVRD(u69_|(La*dFPuNFw!3MRaA}A_z+&_) zMnW!4W(=k9xW`ATG#WSP8;Lg!Fg|T@xDt{Ji;P4CXH@@vce08LxF$b7tX_nR!$QuJ z)q)DV6yC^l1Np{*Nk=Ml?1Zy;M_47D(fG_Ln-X^?AMYsBdN-3pUi<=F3TtQD)VwOg z$prKhzenS!^j#2~Ew{7)azM1raS`#wOf5CVh`-O4LsG({Ib1-t zQu=KQ*wy#l-9W`tfd2@l3AV_A`HZ&6PFrrz6qcIP{b>&q?MqKGC5Q?gBxR=XNgZ>x z0NeiK56}(OBEaxo#U_2ccex9WmY#(UGtmg{kK=ibbw$h0+K7UJ`B6>6tkdi(MMoo& zn)_bqL<@scys(d!&%y~kV23@tjvpM+6&)gYR-4dj%A(0NaL6R*$b~Lrz3`X22eC1V zdNwW!ro}b_=TzRfrH4VvLO;+Os2z3tk{+zSnkIhD!{g1Rr%ujFPMrL1Sb{)yr9Qlj z9bPW|TZA%TrU36JGprsZsOd3OA=#h&*R)a9On@a?mJG6i&0v}#C5JcIzIq^~>{#%R z9PRW>wf&!me$b|!zF^uzY4*oOy0?@-jbV&Dnf&>7B=6y9nQ$ln_j|t;YBn;s&Eb}g z>-E70Ec+BBOf!3gH`d3)5_tPlcQn?tsfO~J4oXmV+Zk#Aw33UzX`r~U^$^`|7Sf9u z)m$U2Bf%aRO^NQ*j32XM%N`)d@U<{KEDNUjWsSn+rDH^pEyE}g+okb0|7 zb1G?1WI1WJ>nkxl&XR1wVYU|@Gy(zgLaO>Qr&`-NA#%9G<0Y}d6U4)MsJ+!XMms5= zT*jPfws*bxTe7bEXYmm#0}rV&+ijuJkX^SHXa5b>KVxFHZ5JEdrK2a_M}RB8ozNFz zi7-jq-EuR)vOW%}78Vw+W~XZ2^)(i{-)2}NvYa!#@J>vN33cm&f*g11`k#pUi>~5t zDWuKcfXu2fF)htnqfLK`G4>8mT8Rkka6!`=$#1p3WHJ0~(|%TJZ|?vWxft{l91_Of zNLnHWsnOw3huAxHpnCMgzO7oN<7vUeZZ#7TR<-j%@@{ixCrg9rYe~3#CP{w*Mr{V! z@bT5(>D}HpXQzq&{;&}$QlnH<^*~f3Dj8JlV+|F2l*GlVP11$m;w&b$wf0+tTNckM zF!}d8=RzjmlYWMe8!)I3s`AU!DRT>+ zF=s-ryUYjnj0rB>HR7z|EOZ(H!l%451w1S2;I%bRo~ylZ4iC14dKGDqi#9E?x#GK8 zyOdgcTE$g(Sh%RA7s^JN@FKBtsU~UAVo~K8k}3_vHJ<=#ZfSDvGU{N%97*fJ<{N`* zz16`8SbfLw>hHH{Z!>Us^(=1Ad6bYs&648cVsiz_##?v_{MTK#+p&Aa@KNi3&#&isg1kQ@C26Qf`d;Fo zi7#1$K#n=SSK6}YNq&t;9^%^Z?JNqF(S8iH*Sj=Wku=QIa;XFxHc`;aJcS|e&nt@8 z78O=j6=X=j904WJCu_aXn5U~pVyb#;6$*;dQAnktrVyF;?!=8yo}9;-oD;q>KtXZK zt2VOOg3Xr?kRTe{@7*0y9+C|e;{E9WYDFkGv~Y9h(`skM_f}BW4E)^p#?9R`p8Nv! zr*LY^^UftjI5;}@;#aJ)+5V=*fS$AEAI^WSA0cWce&BC`#mUL(6annIx;Cy#b%P{j zq_v(>60N`1GPLw-_IACdVZ#FUvdCSU8;GZa8Z%>K$sm~}j5xom6ebMSlUTGLaDqXnV%VR8l|+xbqDbEUiu_ z3W=xq)F+hl;eY=Qb0sUAe)#qYiFlmGzR=f@S6*D9kS=&VFE2J91sw@BSAK#$mrgp3Hm0QCgxUCtPXPMey30i6RYcjFXFH1O%EbJr z0C9yRs#<9>aZ4QgY>c~z)#&2pd&v0=TdAh*?0uwinhDo$(!5-(W z(g`0l^!(vK`{Ii%-p&Ki0R2M-Tqq;NYK}}T&J%91sXCYR)JqTJJNj0_hYq-L#3hGG zV;@#iUQu?2EQh+tTK6K_d0e@Snh~RzCd|_xNGJ+J%ouqo*|Na6y-bpL?Qctr6}(+h za;1}($BX>ga6ZV3n@I21^-=)?&(9P&4w1{)t=_P%t~msA52}Hr{BCK3$^Te0Zk^hMpsnuFMDFoXe?v=(QK{tiV5+%n!i z)fcl)PI@S=?yMZ(LiwH2{SMsHblm|TjdREyr!IeSEwDPimeem?Bq1s_z%X2v$M{w}1 zkk2wfLPLL{5vl7|!mp(y%`JAvI}8#qmhzLk;}VwZAT8T$6l$`b=5SzJFj96GYTl{< zt;B@yVA;#R%`o>WGY*K6S-6FzdOco>j+q>cvJ`+6+C;vs_CWjyP~Lri3ue$0*p#F# z9~p3|%32S^gm7Tebe)0pAERRy?qyO}>AWAkQD$@#DSg^9&&0!bc0sA$}xg@1DulkzYFC#%2t?%!L;Aox=0onf*#Wkl9tKhGtF$FHK+ z6mPM?RI(A?GQ1rl#ih=PoX;3K^bVdWx0VMvsT{(11q~#*%+@wiYz+ z7wg|kR7xp-@rggfr`~@Z|3sQR8Q5xXlz_f1rh~IkkTno}c)!a}!M1bcPjmHNLI-f% zkl2cbwjBk7LNNaiTkjlRXS;W67qM;IGd3DEM$JJv&n=yopsxkpFzjIMT*oW#*`9Dh_hsuLm$$lI&)`^*X;6K;-RCD-vz~6=2 zmX23!)a-=ztBJFlV@1#no5c{&XdjvENJ?Lvk=?>J9M5B1RNJEI@(d|l(PXCIin{g1 z3`mlIpiA>47D>YX&JXlZFnT8_zX7pAV}|16#)qz2BzX$d662;%>EddwE*X<;rtTz% z)X7)B4Qph7#CXxx5nD>7s#4LpO8guXzyfKoe{Uz!zx`IJ4RcNO1gXsQ$9@n zi@g}iXX@Ht16-RHBKKn>c=EuAOkuR$)$}(FH6nN06~_`TLZ=0lkKd1LF>A_BQ+Q!NsbF58oyK^o;gqXJ8<|HaA7Q+q^qQ)y=dSIp*` z6cHs>NTbUu7Z#Ub1ar9^g9F0Jzcg_GmV&lGbffMmhl$QRP8WWoLf&=(gUxcmtk8sM zSe~6&Znk4|iID^pkH-!t3QDYq$9lfs(P4k4m;dv5>-V6?+U&YmKh!Klt?t}0Rkb$%`Itv)2&SE_^zqbvgBAvHb9fCVIKQ~S#?u6 zu#BlUHa}_Dr~q!PuLnBx=xF{xa@kZIdq&jr7`fIG7K09h;l{f4whsrRU-{RVFE3h@ zSoo1+Sjmv5XG`&tyd9-g#Gy3>@Mp|$9mB7T0et~OSFZOdRuvldDK-RlF$fF+Ep=7m`_t|V zu?JzjoC?M}S!pbp<#%oQkQL2JD$WGD6`3g=P%q)h!NgCe&P_1gR#ux3floQN5n{p}XC;{Q4taK0{M+X3#0TZHio`qtK%sCuy)6TXNCYMc>T> z2~c$I%c@L|#Rt+j4vpdW{3InQuu|EIgB#c`g{j?7F{zn8h+eLrtUbL2_>86dH+ROQ%Q zp_5Ys%=~p{(a0Q>-dct zp{UZU+vr<+;V7AHlX)W5w|i*rx6J)9z^WwiqC$SYRm4?b>{Vt4o7))Wf&HagRJsZp z?t-QC2Zs?N!t69|c{|n0t(U+)i>{{i-d`Y3#vqGxWoIri!uRZlS+{ovhjvdFySr|| zxML++0m5Xh_jN7iagAjDv)e-jvC7rH_79AD_j~-FrdwPlhl4NEYRc=fK=9n^W?L7*{FXv}(Eu07? zss8I}BtW5}2R+>+`eZjSdz;!jk4#)2XK)DS`>p5M@!I^IVKZ*d?k4>JQ619ha)dEq z$fTT6gvYMEBW98+F37Sx?Z~^u@%8_x2|4T32`V zTGz>?T<16`Sm^sBM6ju&`nxI&cRI$gGpOq=HkGkyozC{9+fAnPO#isjYh3RD-p$0( zaG}APTFK%OS|4)7?>WEilR7Tsi25xtLguQ~lEStA8Ri6Kw*~@=ionD9vR;-m0P7ua z*r1&?JnJG8UMK${D6KNfIsc2aX?g9^hov%p{tNuAXs$7u7h!Sc`@B>B-^d`-CQVEa zY?aW_YBA)R=ed5%$@bS81zXciwy8g+-;nbT|m;HEqh$_n;nCN6v z>;jAaNL+Hd^1_p6L>zzOZVH{%Cz&osTm6-WIfm^?{XfCMAIJG#lL`{U{d*!)ty6r~ zG3k3Zj{CM_-#z`0DZ^RlE!75^;xzIVTC`E{iiP*DUaIAEHqX67j>UrM-VVH&A~g~@MVUqd5i;dT%O2bF>IzFrrr2J00YI7!2pFTK$k8~fpP}Ht z8}MAHwC8|8#HXa=14<~y=LB4lRZ7_mZdyG)ZqwjHZk3-D&&?%mHsJG)K&^%oOl68QWV5xh)GV!vib7IV6~-R`ZWIQly!=1%Ah zO@ys{&R@Kr;hZaPf1Iqr@GFpUJUeqIMBjhe6wBQ9-_JmbMGAVd`olEyhhP${=)b^0 z$llX-9K|{^k@lx0o-N)?k0a3)+via|y~JcN%?OI zu2UrGTA*9R8>ptC5v#r{!jl>PkIX1rQNAKU=n zngGOz*pezx4jvLKaYlN2a>9U1<4-ph5)z`LuWzqPOK5i}ZNkcS%=MapFzyk?dL}sM z5*@t>K(sXj#jrRUl%b=v_?Xi#^4jqwqi716Eoqz%rSjOvd2I~6OqSC4bq);9){OAE zT*rF$Uv?Q{pLoN$l%%+fuWctpfLx$MiE)~$J<9t2(nmP65H|<%18hwV4Z2#n_{-61ps%d8;iW*=?D`LWaQa7s0riv(Q0LkoFo}N-@?H7FwFa6tI0%C<33pSGfQPm> z9Iy*nG3Dl_W_0mzQ~O|K3t;HFoP+$gW-HR~cJZX8=IE-{TMXBajg?j`0Tj zXN<7mNk&19PV4oF-GZ;-6Ocbl`e4x+IzT^yHaz0e2)^Mv+^EiTv+7PnXjxR*|WA6^89!%e}>5j9|&X`nOs`Izd$6{WMV~} zc_+|~VCc-|fBsUr_0;%8Iuo&N#VjLMsRen3PW0U|4dK34AtNCW&`R6bDClj>d?~P8 zo@c9`qe5C41;>GOdL3o7{1^hHZvB$I!*iaVs`ybbvAPJko9sWaTPf;fDH&rAz$@L8 z!t`6O?C5HmTw|J?)FocRuQ^#!^B%Is`+sz2?_8sX(Hh)`+ApRwwX?kEnN-@1qmirz zNjO*9aZ#qmNJ#6M@2~_v9WVCeLS3K3_483r67h z8Pag@&51z|1%Cg`=Dpt3#PViVV->C_ikn<7A(~SA*d0MdwIfQuoE|86)UB}n>j6AB zF&ru&$lI!J1R#&EJ0B2%_XERUGOr6zZG^;9j_b@Um;xksP7v_}&>mMdtN&Xbzl2Wr z;)Il@$ey%;`mr`llsn%v>!E}7Csn<2s$CKQ?QrDmcq9Y`A0V3q76=l^7cNKUY06_7 zy96$zwlM+cUZJcO>h%#iJZyJjxfiicK1ijx?@F>Wq7f>%Ee~4N#^HPS;B;TyGNbs1 zRS%tHo8y<+t@)ywKMzm)0|zZOQ6$h zMP603@_~mRi8g_vfds1 zAGx-4|1bY_1d*sxSSy$lh7|!8X?HB|sKw`S~eUEyWMVcNICW2ZyUP znIc5=oQU`jhRh9)p#w72&dMZBDr%6Bsw5xwgZyeb;kk2~4baolxc+XRCS|p-Hjzn0#PS`9 z=a1Rc8PVdCfzvsFmCPCk`H1~oWpf=Tavp6Z4b+`02(;Z!60_Yt5M#8xumsRn zVz8wqDr(xE6iwKREn|+2*G4(0#8I5uRwUoisEsAA228z}2x5BLZ;}#JH1Qetot}Q+ zHiF*}P^R=QMq@ZG2VeG!rvNoDhE?)tS%$>L59+cLnO+mtt(iyPr1~RLv_uRj*d5&8 z*Ov~Ln8T*-zRi*SpQp7^_YKNzyTXtWJLdVoBpYF5@5=OA^ZinguFR(Ni2yL2v*@;Csi3|KD6nD{a(WnH+S+_?50u#ezo2wF~yGWSxS z*`;Hu!vKdAc(!rO`wQ9XoZ)r!-rk(JJ|;UfmNJf+3uatVEr8ikcoTI<;d%pIZ=Hn6 zKooBE8q)S*#A(I#753pF+0f;+jgZl4L#E=JskHeIp)T|L3qekNZ*i4th)0Kj&|Jt8 z17^;pMk3|{pfq*hZ*$Rg{NZ+--I&Dor0dcMmQ-iw7{jtvVY6yHFdz}oZj5D>`A|~v zz$Oq&ZFCvj;Mo9eY1yiGM{E{V4?bHLRn2G#K&9cyuJGLORk6b+Y#-fK6-+`d*k&UCoqdgr4@-H9>p`|A7VJBF9PAULgk|E5?&XP7U~J@cK&dks~VhTpza#f zv>!NO@lW6kb1NVd`jy{psz3X%(et=XSkx&H%+>R{R6bfdF`-?-JosrIB{UWmM!oG~ z?nB)V3i3yjM1Xel4f(wCG5vd8 zNgygFO^}XbzclNf>sbiYNIo@tDXnoAo>$y%XmdJmqP47kvK^1}&X!W~9x%YvJ~mOu zy$7LJh9YLJYLWI?-(Pe(HdR}}(cp4*xi@#NJuW@_{nweX!UJdaWgsVT1sdTRifNZo zx|@2^T(^W#DBr9hRg`2;h&SVLPvAjk5^pocM%;nWrP)PiHY40+V>+?&dPWc{EZ+87 zEoNGxk~0~JbcKo?7ae`V2py(=oCX|;Z9%wa$dY!US&g(Lk+#{zD9Py)_JRLGqh5)! ziy_4H7Jyc580rW9$_>uP+mk$~3eAdF5Rc4vR@J~ov3%tf0yqL6cz29#i!Ee}m3zv$ zvnPC61@ESUnu;MA7UUz`@R%wRgWWus`5_|@zF$lg07Bn>BA`YLAZw!MK622`waoE9L z%e0#WDt_2Ke5B%!{RC-D&W(6uf}9v1E^10I_CEMlQCa_@Z-|xuCf}};rA`FV04|;` z4A5_6W{scHPgb)gl(Oi^$K!@IpmUWFg$tE=%22VRf+UuOud@-K8%(pi7UX+(!na_~dC zETzKF%zBl+8ac^Z?vdc-(1sif0Cbzl#LNxoE*1)}*@cwhQWgW%f~4xo`|?SfFSf!F zNf(C4Yj#KmRZTewydgY!9DR#@s|Thf9NG9^KW!Td#T18 zBmJfp2_Yox`3dO=AIkqF=ZBqyDzz+G4-p>-mO!@bUbrC z&A6VVZ+x}?VKfVU2?JMSp`Q z=Z`4C>+eYz9p5bj1G^zRxGRw!AyMUtZ+nxA^|#Mq{&;nY^M3ycs5WI9OXVa~iIpr~ zu>n|MlDtMcz01PAvrjho*a{&aSN*luIsX(HP#Kr>#Q($7W+1XEeIc+L0l;aj={>oB z*L7I=G22Xq2PkVdYP8|oQ&RHPm=(OVFiO5mo{E>|HZMePFm&qsnJ#6Ao8Q5T5VJT&K@dQIQ1GC zbd&j=b#K?GH*tNzhh*19AB^p8z zE)kHP2V=dSPm3NO_9qYyIfszli3!vr&N}N*pEr*8z`YR(Pk8J_YCJswYf6UL%`YQN z9*tX=#9uMv(Dd&MeT6t9E)ac6n@m?&j<2M8iIT;PIZV<@qNC;EayzTYFwJqna{}E+ z8j3>!Tbpt~TN3;vo(^7pAvNLo?VGM&tp0WXjDZ?rV>}!IyOTK0pqL<^egt!PZel3N zjmrht+|k@TlILsenE_aY{4=NEc2Q?zH&^M~$_VXH00*SA`5&^;irFq?V{_@BH$@4i&F*rI zB34!6++eC1SN(-~r_9+~mN|hu^9xgGyY%M<@(P}(JRZj zhdizw2RL&Lj)I>h#l|zc=DlA7Onv+HOcK4i$f;Gq+S%_>H!0kN);Cq$b!agxG<=MW zS3x4GC-;zdT5m zOFw*l{ncS&?0|m;UYl>a4bGAvrcdw1QU%*f1PP4h5HWemNW(-s9HUKX8W{fCb2v`M zV6@Y{Fn`Lud3poZzZT-5=%3pFR|kqm5xp>Vsw=17oExE62#r`~g^M}sO#Qv6ORQ=4 zf(im6$ss9!HV`~fvaO@dFUjm4xnm4i=Mm7_gM56bVW}1+o$dG^a*0R8EpI7rp&+>r z1St;1DzZ@(&wJ(XzKPX5Rs>FbYYBJDe5^3{G7SZi4K6bDLV>M?xmq50Y~}5_ z*!>6fn@qe9@cp-zi2y)413nu7Z_1>wz5xe^e&W{92vup{`8^#X_rL+?3Xw9&F8L|P zVXDK^0+TFb4D&35mTn_?5%~hDM!5a>74WeT)KUJ=y$JACntauV7^G31FxxHMx~O~(>f)mC zTYvf~-o~EFwKEvJ0l9I0up_30nvdMuiy#?F5(nX`@5l>YTpUL!d0M4LV9Dqo-4T$` z4H4plXpI-0W^L)G*1m_U4Tf$9#)5dfUF-m$FwQpVXOdJ$ZR+dh6Z&1J9eH*0G9;ZZ z7*!vAHN(s4zSOap%ghTl-O}*5n6pkM05s75d$)!8cageEqobWW7ipsbP6#2L;sK2~ zu1j{h2vqfD?;DxnwKzEO@UrB6FvXg`dSKtoLP1mM|PgT3&SYHBB3Z%d$K*_`a#Aft8jiP*I4p$_@_t1;*m8 z;H7PzZu!8fvTbk06z|WhNb62YEl1wK3hI58gm>QK@_!VMohyWg?mCk#qoSejyg2)8 zv+WowlEUWjDeV-`_T&ZoAUxjcDmCS5Lu3taW4At0NPk!mNJxGPG zx;S-9$2>_>)%m+L{GT7G05P#7DVy)6jB`9fDmjcJ@dNWQ#rm`=)W@Kgm?)kKdpY8n zH|s??pcwY;n$n9q9uiH{wp(m*J2(2hZv>+}YL|@nO43B!UVzjL_-5OxQcDgG+mM}+ z&7G`=MDsy(O)uhiHz9Upd>6B!y8CU@siC3t%d-DY(vFr+x40ayPu<(+=N3zhS5W!6Jcn)*D^HS zG}si2EG02-r?WoR7fP;!mCuZa+%4=1nd$w1kyEUIN{gL;N`#%UxGXvQoQH%sJp6^F z;#}eqP$`>@LLtB*hhG_0nHenca~E2L-JXF7dr<>g6`4lmz^&V_Pk|)#9I(UArQN}P zSSJGR(m^%mca~ojlxWVd_&#?x!~c{lM8l|Kro~n|U;dT5FQ-3VD7@gLClKIt7<%a2 z|D*59@$$CLh!Eof3zV#ddH?RQ<~Pk!Tw8 z_0Dgto9AcYo(crDe~X6hZ~BNp5m6#g^BGbuT*VBH9@-9cMk!-`T2 zJs@A^qOZ^8$vR$@=$H5t&n>CVZr4IH9aO_}m zsu5}qdYzO{RXJzeGq8f1>A*uPMha^G;?k8Z5xK|z@!P-3gse8<+y5@#!qP}w8rc7r zDq34MV5U7xmv(ce1$+vz;NrV7CQW{J>cqu-f6PH9d z-#N}5a3KxVknNm%vxUqAaDJ_2VKQU_R~2b7k+RA}jQaiuL_*GG<&ajRf!gcG8nWnv za~(NvzefldC~$2#tpfabR6P z1RtCS6bPOiwUYj&^KOgLA!&MqrLwx%vGrHf#OnmtP5ms zc#!udZUy5d#~Y&8TE`r#TXgBMuWK`2{*P(PFx@;%iH3T_xzans*2nQCE4_HE7N>Wm zmr6(UH_!g*3&(2|*MtD+yr04x0tLRjfX&25r}uahwW%5r_`5IrJ_J#;3sd!^on4@5 zd07kt9j_N%w1a_FfoXZXc(WDMDMIFeV2k$Bw*12Fb^1>sZdQ3OJPDCIwCHF z%HJ96OXUfD%SdlI8niq9b30kWdc_)-g{%xo_GII3BGbH%{s<_P$S8wj&J!Y&`bsgo zJ=q$tF&(JoD_Phz77LjjHF$a0U9PY29xXpW|NH9L%`9y-s-puF9;~>ZyyvOaZ;cvD>b6mOMwudeWI?LJkcMXnl7?(e{Be z8)paPV?sV}9PP3P@VwnT5(dV`rdn2UvWY!3!EIB>c_Oi$-|<;B6}D$|fDzfGc?l?u z*Ag&i5~BpZq8d!e?up3KqeM9cJ%5G3kOG1u8kQsk_~7=Lw`H0VWc4I)-$Kx!2DaTb zFH06+EC&9U(_K~ZSWSWRMV7?mQE6Tvp{zv{ZKNyFhRxAt?8B^+wU``Ni~;(Xr(Qei z@P-#))}2&QSkV@A^Ko) zO@nu{hpE55Ws59Og=4YOBe929OgSP}^ll{k*f;=t3E*uxiWEA6g|mb0QEaDTVhU^I ze${-wpchWe^&slUijh7H`NRCr*G3wA5AnVs|k>j zqW+Q1EOpj2m0o3@e{N}cDH2&WXE+txDs-`nE=;R(<(J!~y_ z4yy;806Eut#{gOCocCPCKVQ~ZIL9MhHvj` zvt#4lsYV3b@mpsMIV~V))uuw@?aVHqPf0`i$_u4lK?=4%Uz=~U`G(% z=INGVS3Ytt@bZgP3@B10Isgf+QW2`%LILf1ctW{Kczp4k&cMb;`NFcZkJ(I)wAxMW z8J=%HJT4~pA9m;0MW1f#MX6{Qz5>MI)LUwuX1@LS*r4E_3&!uV+eDY)Wv$iKvDAM& zzbmMPSns{~DQkJ+21XL}YkQX_3>`ZIR`MjARPr_Iw92Ku0=V^A*6Uh1rzK<7*Odb-{J1W5GKk0$~)Sdn~hcz1-nVLyuJC62Ac0M6Q` z-YTKn4AYmyQV1>;!n)mYWxZVMa z{V1vaMXsvvvs{UZiQ9pM-ktBS_o#)V+!S-Rj*iHu*^k(&nWu{TcK>=>gVNG8JZ?wt zT{iPLCfdCTU8L?sJsH=P&s*QA0fm^4z?%xi6BxilmeZip)T7fXZ|8Zp29r*;a>z9) z*Qk{i1UjZub~A>Nca>!%v-^Z=0Q=%U50W5Ki^t_`YPN$c%J~5qUe0MOplgUqONL3; z3M8Co=$c+{A>Fz+!rV!oD-f}s(0?3r92gnzOwtn8$*p3iuk-*MI)GbFbg~f5<;i@) zH4C!DvdjylaMG5M>$x$)~2x$&2_V;Qh3c6Pwu>&*d8AK`I3pfQY%ak|}bUR_KilGW3EJ?f%Hr&CWiyuo3x{K0Y!kM2>Q;O%*>o#{T&Ur3%*{0lEGDy>Mx zQ55>lzo>3+CPpd1upY0@QcLs4T^xbe0YT-7zBG>6W_epam*avBj z3S3F!kADc;ddf82^O{hN)jkUy@DpYRfwy~t<{r1I5gENV|6<;kO*6(kMrDc+iGV3V zP*6BeAZ4Z(w4l#NEUqo??^dr14W_ir%vBG6icV2~H=q4&P1pLBiyX@%$PtH^_YM^X4F8rfw% z0QA%(KSBjLeU(?noQ`R_40YH^YJ=-$#ohU+_fwt73hH2J%bK3o^2F~)O{F-jW|^T& zzezb@Z+HNVK+*LO&Ee;}X_47_K2Hj_=;)6F4`5SNmKX*v;)*vWD-LcN7pl3M0<@~< z)P|L`G~Qo1oNl40@4XR6=1!H};?<9?)1xUvT7U4}7w}LJvR09Bd!FS)otbrHC7s*d zNx)4QTu*NX$F8E#tv*2`rnEHOn^vo= zzkujSBD1zzsN)^?aa;iA?&K39uw^^ zmVXKKxG66qzIv)GL9DXG9lRAHSSFUCd!}R`8}U1DNj_(}+a1rPb2{u4R4C@1PBb?> zavt())ak`ns97LJMSb0WKj^;i?Cn+EiJm1_HCne_mQktKjcu^{7oLqi_j^`CTpZ;W zNY$JjR)$eyGDznqsl5e&zBoQy2h{vDn#>>7#EOrZ-M_g8<_bYK&gE~TUOS$^nIpW3A4Aa-{`qNW^|muI^lLi@;-eNbHJ0p zdNZ2!xIs7%+2n&zX))g)7TmIa>jXQPx}LC1N(`D*ZpJgPqXl!e7d*FZ!)uPzO)?Ut zs1;~Ud-W4TQtzEzC3ONT5Ji~b?CxH|aD6sMP-BrnLS^ki-kD7KNnCm>=Y%VAcw^)BvXJVWCs(5L_|~4ES@jH ze08%^ZM3~+2b@zlgj^aQ^OLFQXu49ZTa|@pn1z=!?vI6DDqX0*hT{R@SJUI|dW%=_ zdhTI{o5!c&$lZZ3*_CdsM8plhe=Eji0w0Uxd21mjw#m$+uDa9ao~k3NI7#BDs64J< z+s;lOp_!bguL-d=pr=#q;<=6K@iw2tKg~$X18g_IEvoeg-0u4vJ&N=phXb5cVtE&b zy%$=}Xvdo;Xb~|_bn2DKdCj9T%uDRPUs>BbQtXfCV=B5)oHnEibLhdu{f-b z>|3ot;tQlh#&?3+U$q<=-n`nN;BGL_G;(uEb@la0>5#QuPw_X662KHvdIZagP1P;& zQN{-2tD2irsrN~8#o+saz)@n2fa2e7vp~4sCc?Z0vc&vxM>grfWGgLR3Q-zC@bB4P zo+U)+(H*NLI8_}8h=+Nb{$sjXM`dN@on7>xb491>-`tv>_$ZMQ3;9=MN7ZAqS?n1a z8ggx3Ei>m0HP#r&$N`_95tUcJlhI6reJVN!YrG*3m1~kSW$ym#Ftd3s<+mZ$)vTb( z)hGCg+#e>3xdG21TsD(S{nmntfdM&TVU{wAm18Hs{-!{ejn4WITb!ggGP3^Aow&;0 ze)CjwTGLKZk!)&;`S+cmdiiNmqZ+nG#M2BZ2~me!4fOmc=%v|64oVJ0O1X?88q^dW z8(Ho*AXn*f6;2g%9}`XdcH;`w7U+)X;%~y}O4O{qJrZrEyFNVZ7mOLy>u5r)pj%m=_47pihzS{xA*sE~n5qMMQalMD>* z0R{l-+=bL_3$-_9U0?x|>Ztg`?9n#Ph9Oo|^q+u(K|qe3-(5k?o(@Bf{NO}kCN4MP z)lY@qF3#zvC?X*x2O~j0{y`ZtH@5)OaLJ)sZeE-9bS%~i!T?0VU&fiPaOU%`q_Gqz<@NC%c9fPmvUo&dHpp4ebt-u zc`+yfMJF)mU^1}pcv{AZ=Aj^|Eu=;|M`wFckv}%XN-3HbN|Ydww#rO6A%_}w#G23q zS?GGMm|W6agZTFudX&q7QwzoY0UB7&T!%L2bw}L3Falx`6qG;CQp+A&mw`QARDACz z+nhERP-Fd+L7tPZg7?t)pXvWR2cG3V3GEBTG9Emb;yRRSyS+(Vw#od$#fOA$*UHE^ zn5}N+R9d=^BL3`$Br}}pav~_5$*&5fXqgU+snGkVWmV;F$lE$($Qn#8)8s{_gR;|> zv9f@OGb880Aw0K7HWy242vBszv5XQ4GmiAd2({U)i#~Id!#`Mn2J!;2fVyY$lKMAy zMuwIv;cP&UQb@Yn>u=j1dS;eKYJq3HNByd+W@$Yd+=x|r9O{d60U{>_1yC!@&sr-sKFjmkYw*~Ia4lK{AUPhpwZ!X?kOv$wY$OsUif9Sd5Q-2=~{_n}a-_Ok{%{As0jCC5gS{W=sgq z=3FF@O}WGJ7=KG{)g6Uqo*sIrdWhSff0oALmYHl77PDeoaRJz^tHAmh17!IT#q;)& z{Nnrs>IdJ}x-(jV_JrmUX;dEQ9u`Z=2P|4RFhb|cJO36>W8ux!RS9x;6cj9cKx}O8 zA+DbxGIXzzuD=Lo)fy`-h?R4#UJlgLlTnO9G!o?^bPjGHD3ZgHr()WAa)P&`)yc;? z?e_5G0)5=x>W&z6&dT(Y0_x^inHr9jvW#Ku;`)}!(>LgKxms+V8~l%XsXEZpK%aST z*hc5eWYVuBjAwWX$0LY5cgKC!jTg&F4wqTY_8myEn=Pt+*jvuD+1fF+6=>q*`LUX4 ziJ#kP@^n1p;^vn1-6g3)mVDqUd1Ya~u8Yk4x=b^7vQ#~>$lzRl(VD_st?GA~xvJwG zAt#+kO+P{7JBs<%69GuD>+(;gXLzbr5<|~qQ^N}P48dQx{+74W@fcxY$#h~Lri(@< zOyzRkjQ4H9w@c<4t}x=8hH8}pIaL7t>NS~NJCF$2_4JYrdES@qyb{*yU4|4(egvy( z6?@_GT*?vZ$@kEq`QSOJ05qU8HD8B?_G^qz1xQvp|KiKKrP9L#6FK}EraXVqd#^93 z+5mc=I-`|jD$du0_iyCBSlIHV8*w$X`79~iwVf_*XeTG|6SqLh3ZNRD*1EW{L0vOA z`gLXMs{i+)Wj2YbFRtb|gF2$$T42Ketb1ubA!JngGrrJ%J>>u%VnnkY>~lt%&pJB; zrYqX>@2ubAboSNG0YVgFg>`_ZGG>LrGY;Ka9S)?v+?PM|+YSnNbA&4aD_y*o%XNMX z2Uaw%wwxLQ zd%8tFP1{nI2@Od6@Y6yI;bta#LP*+*j5=dj0qM}epooa$HQz=+PB?dn!x3=H_8hKO z>dS>Uc-}cVv6V0xDtK!Z$}2UV|5#r5VyQVj3>6pnIU?rqg7XJBH?&1MIGlo-S` z({Rt7Bq|Z$<1=65*ipOhj%@E(U?OGIeM#c>f1)iF{s&7wcCCuhYBa;Ah#;hGVUD`x ztsOKdHEYw_NpX1$X}|2UmxHPAWgXO;8!1d;H_SouJ#_odM;V=_@t#snd@8`*RGp+K zxLk&)D7(Y{3gGsgBiOOMZGfLktQ@Z&xp!GZ&!^hP?5aoOZH#Cw&&NhUFA@ zFj^#R6gtV@;#Urwr4saK0S3 z>^6{xxg^_0EKmC*soISHE{#8|+m`ZjdZ`!iEZ*+hoX=GkCrfC%qz4ABD2FdCr4Qqp zN?wp zrZkd+D^NK204t%P1Q%o6(S&PMGr5DD8hW@d$}7cVC(leL3B@5(7&guXrQl9*KS2i& zlUF=-e(f!y<^~Z1(qJrAJ#+tJ4q# z*{ac%;;eQ54kvgEjX6QWM5Ur4Wu^W-D`-(l$mVwNgCAh^olweFz^EFkNov5Cn(A(= zz&N|SkYq0eRWe!&6wYh|Iq4|DrOMS&xBt+@B*1)EhAaLTlIk;r_%JZd_s{xD5{a#* zwfdtXy+&@y+Oa4!r6zJ_hV_z%r6#S;9D~zbcz$to6rN)wB|whf4Kwrgyj`Wmz<)tj zosxtEuU|GzL`W!x`VR{C{w}T3Ccpy6zqOfQOJG!zMd0(>;XwyWbcK6<7b3a&A50i^ zQzV_O1oe{`n z^x_cx_T2e?ar`3cvIkTMJD-Za#}%w8QxbI$K0bmAmDJWLbq)`I&Ld}go)Y!%)e{mv zb=t6-@DjgqC?d~tcWZzpu5rS<*b6AB9kgUuHIJF!0bo)1P#AS2~*C05jhPkktd#wu1wJu?CG2)dq{EWFe zKr`DZ@A0idCxuWr86!Y}9x&wLY?`mBI27k}UCLUvu?EtUhK>8Ki00G9BJnX3Y>g&E zQF^V(hC7d#6eSLFAH2ypqt(X&AJ5M5aZIf>O!^3~)OWG?V`IC^m-(VvEY^bd2d(s| z4I*NUqgYI_(NWL45u9oA+a$-JouK_?*WBrt~bfLp~Sj<;yIuBEP6jkvLCrji@z&b{)$O;_dAylxFUcEl_RX)cv z#swV>i|8ygE9*lEK-V^Cj|@wEVAeM`rtMk(JoPwnE{>LQKm2KWYREIm+jy=2Z%Wt}B>Lg<2J5bv)si&SY6-Gc03Oa_C{oJXF*^ zuLoFk0;2&T_>WU-YY5TN=@*Zf_I}_-j){xm-|IMN0jeNi2h})KVoosT> zR)>Qedw0%u+{*`O0-xuHW)GIwB!j$I%UC=fkV;hV5rG*m^$|v6`kU*T2eNZ>orwpR z_!o+g(RJziRRnp1s5RD2&V?gtFh#-+n(H2?y;3E$&{Y9>cUFU$-ak}V&Q_g~0H3>_ ziR{lZ=9->7x75D0z+7VnYasVSJa{~LJda?)z|5Xg_!-@h-;g%|aPZl8(Y(^^4`YG_r=I~Z92LaI;+494Wf-73tvdY0)v~=QS z%uJ2FSuSnP5y`=kgl;mDqS`w zt!xO8U{X6m%RK*fjs8HSlyjjr(x+pDDNq)FRJL?rl_Ca;S_(`n0IwWI(HdTao+RZM z>(srqp#{ zbLLi|@!OB?qER?iBxe}J-jn6C?%VIyeSw6Y5tM}9;tgL)Wu#_HkDjr)jH<+OIV`*F z$9XAMGNwEQ?;%$y9oi>6V}b2VGE06^ojmpLb&qK{-QwC&Liw(g-jKmW(rykpku0G^9UO6?G=qSMVb zl1tNwumb3yU zZITtAJ1xJl=JntkUWZBS*AeKm)tkT61)c4slBfVcPyLE2nND#_f{#PFqEpm@jeDT7fT5gQ;!ko0M7Jy~DGSJla02&p%A$W3hmEj`W8NF9~xJHz!}g0V-j7Y*711w&?4!$xT&8}wsz z#C)fgW4sAIr|(dFFUl}3UC?9_!f)U>;$pdPw{b6*U}CTOT{2{j=H~Pa{?nK|-f(Ey z1L??9J45y61o{QIj-3$g=KDRd;LXAC+qZ2s0;7pN$~lrUdI;%)RvUko*|&U(XB;Fj zpc3oI-T(&R1e@5dE$&9be`|-hrVX~MmbvDu@nljHv07n~&8()YMRBv_ebbbXecdkP z*RSPlr{zm8$vw%vd3*_w-%u_yDI;=|X|;F$%Znp9T1z@LU((dY#2{IMejpgtk3LkT zNAv1?DMJHp6lOXREK!-RWz&?7_J0FZ`Y;ZlaN16mk?sT5+OAeIY8B31b-%qF6|P-h z7Amj*;$PU^h)VFgicXGgJuNYoV}03slhOtw$!<}w!YH0|I@m+lDtwJY8X*+5EUnbv zl_b(X&3XD!UKU39_EMVGtRQu+o(YirpO_|q&2^t8Qu)R8E^7EkT^(LJ*gAmD%A>DW z+P^LSVbV=`x);loQ0|A`RC6Og$ax}7FhM!uQ$iSn0Gk4ew&IPeNBDoxXcmnBF{XnB zjOljjL*sJASF4o?|L9by7GZwVB=Y%CUWR!W7PaY62{tLLlKPp;@PR-37^a`y%Gp!{ zfQ0+0R*GtQ@FsH*6tvO!gZWj^jo#1vnX{(k*rZ4o0#A4m7h6GrOK%DIpzhu^qD zo3I@))5OmSc2KQi+x*l*v~x1xT6|(}sf^+J=QXfB2e8?Hy0~Xx(S=|rX|AOdMC$t- z*-Dh2sCoNXr-^^cIa#_mQzz1A{P-*pZPgN^8IQb%MYv1uca;zv*s@vr@p^p;cKN(r z#HXhaqdf@eS$R56_DW^l6F5ZXO|-*TQUuF2YItvz`fNu{at0th9QB#S$dTO(^o?`? z2h4#tsp$z}*94=T=4;`UtRm?O!qK-RnugP{`uj{LN6r=kk2D^l zbgS1oV01Z`vOw8i0g-iRPYX3~QsDWFLBR6j9o&A_JS)~2%5_vbGK~jnz-Rs^2x5cL z(InXQHc>h|De6q*vc03nn}#jtUUXVpls_24>-_W~Gs8(lwrrSdWC0`p31#)0fLcerHdxQ!z##jfbWQMfVx4*q3uDCDcQR-upC8wK{YHGSfw-Ds zvR0eM5;|G?T2cS+^(RCCe)jozdE_B-xcd2+z4iP2Z-5lsi?ZI1C>;r|vTCc)1*~eC z5gA=r)#D!`dzN{>p;huR*ls(h9eI?k9M5jOb&<73$u6P0 zIGdgqF+oeLQH6xbe@)l`GnK~l^Wo{P6pdbh=8V{Nm)man$_kH^qQ2ZX>cSFG70BnS ziqj7LXqiN{`GV7$u0XDF>Ju;U_LW-W-afdM^&+9L^Z+hz~ACuW#NrU8$Ci2j0%1+3ah%l7e z&;X3^_FU|=-SGL~g0m;ZlmkcaS(t2i&+ok^lGA=C{d<$U82j_|KY&e2xzJy~H|F6WfP?-Kf= z54eCe#+4f#(&-=LA&X_@GUIVW57bPoftNFq|AnG)872f-IIWa%B_A&naX#d10@%k| zp`l2GpCqU;+FE+;&b|qF$1S(rZlZ6?gvb<9fN!1+POI4jF9wI{Smb>X)f<1){p@LoGvnc5G&Re#Y@Yc)XJ-GGrYENTQ`9S~?&kk*s zu*=K8lqvlnSujHn>wp4= z_}0EICDv`?_S6&n))8!;iIB;cj1b2lM>U!*>a`l?!I+i)4=*bc^ zFyxvmS$Ed?M&}+@q@YRBgbfeNud|4;f7OA}H>j?9aJs1X?fYdNS^ya5JY{6Con|T` zg*f{8iCg}6kfMGka-I26&8x=2C*>Bjnb<)d;%FDVMXX1`!K_qmfMODeCA$}%C@J6l zxp|?h*ab8F4nf>zntNLpz+8U7>$+2|=#a=lTEU$_1Bk9nK*;QJWF-LYhYx*DO|~8? zr*O>NsZUvX$GTGUW)a@4fG)w5V8{66sa#ADV&}}Y%T3B^aj);kziGE3WArFD!3|*8 zk&iY-T|lw(TKk?KzLD(U?xs2X@Qb5PmkHzavUGdzi14$={9^?rR^3T}qTO|a_&n#B3-@4n@}K4$m(3;X2MJNB4!-Pd$2v~Bcd zxEx=_RyJ2e)I5jO1RDXLJ`*V$I&lnh3SbiM;~*2Lb0u}-i~Y<+JjR;?jzzn)*3KIn za9OXb-?>mj#RS*%Z|Jzm76TW4!dVG7BT}$Dq3=z{+4t`g+0{6)J?3okE-e}T{qcFh z>kc!~2EvH}YTQ7b{=f6>&*95-`=BUWXP4$``xQh5_q$tn zIDcX1P(1Dza1o>Sm-3pd7Bq7X#yZiaSyptSdqw0pks zP{`k3N!<@0{+yVOBJIMJ4rXd--`e@rH$mcuDKvxQOgj9(+)7~ag<$xyM`R;J-3tHz zaU+a$(g6E&=m=byoKU!!S5p;>8B;KufaVI$62adYu^p>u0F0|CR`65&3p(rImkVX+<09kboyc&@8GK65Y^y z5%f!;C_wr9WmVUhI1pP6Eqa$!Eiq#dWk*g7I3lTHdAv>IPsV>;SNFb-v{OhAK$BcO zN%r@0k`tj&{m6(Hj_{_{AsM!?3VrZqZ~}SIU|A#B<+7qKoD>_ zi2CjwyZkp{C;EE<6s%TSVl9(tF^Sa?s%8QLe1E)rQ$)T>raGLL0sG2>Rp7)oWWep$ zHJHzEA|hLMGRg2H;=ge(*%Gi^Eg0RjHi@?Io@`{#CZQ%>an&0U10)`dii&>V^%sDt zfnd(-cnPootsnH|n}7*8Qiq*w-vz+Z8u_XOa!3VrT0z;dj96dJ-jq@^4{^Tvrv*kI zas-(vUi{zce>65l*?e;(It*Pi@!CAK1(?eJ9o<1q+`z(YiT1<55+L5=f_U9o{!vJB zM5Ms!-IQfunnFq!N0~Vj8e={wu)yBn=6C}v=P2i^dS4DPR6joYRVW%X(&RPl6Yw?| zws*+n0~{&=*{$Dz0#2#}QFyPGFThNDYle6Jrk=;F9{n{CCyx^`1FoI@BZWNV|NABg z3od|JR;xXbBb}>^+%OL0sZPTN(aon6<{!F<;(=KCQe?NSKi>q)bw(tJq1QFw2=+Pq zdYMxU%*bj@a=jQ|r{Yes#xP2@Z-grPPtF7D&K%H0tF?^_1I63?{w(g6Dvld7MhDtc z+#nGb6mE)DRlJ54e%!dtZjrWbRZx52N{%O1*5yFcw5#)&58KWGiQSQhlF?xO>{}LQ z_Qx%izu_ns5Kw#0FzogQj|V0Hst~qFnRdWd&Coi)A9^DfcD}tNg6Velwt8%%(A)^p zHVPciggfbwh}-j_N}3@Zto_a8!F^Ap*J{n?>5PORkM?6p<8?~>NZfjkiUT@@llt?yby-L@12kR@Tyq$Ta$_ zEIa>;|DZ|x#%Wt6;^;eBGrSA_QQP(X{5~;mC~)EwC8{LCv``C!aNr$%g%K$B4Y4G5 z`sn;%D(i)>Fu|P1iQsrj1#L3EMp)3XoS-X;zd5-StZ*{K7Iga|W$KK?329---H z$@odxF@c&|B!Tk!uR8!s{PJ$6g+Gmt1ZFUMESmy5O)f4pDAc*YR^fjlg1c?}U|F6E z$H8=My3vxL=_JmVGkOHWcMwOYuU^Rxu(hpZB$z96NQ*k@(*jO0`VD-kqblipR(}Hd zth<&LaI_~F;X!c3x$yC5x%)WT^XT_gTB-59b@nK8&@XxOA#0&yD=T)&8U{uB9!f@$ z{-3(YqnCpCKE!lpW@5E;_Fwiw{ejihMj}@HBo{9>&K;oi@X_Rae3Pt;x{({ubI_{s z;u7*!{FNI|$UG>%U&jx+ zCx}uFe%QXn1FYxu`9;95GZ4AYzNda*Ye$m4BHs%K=&@KUv+%N(=;8m#>k+%Zzds|F zE!TiT+7%?5+F*zz-FJTO_j-I&RngFhQY{?c>IzgNL{$*!Oj@%9OvdbwZ)A3McDmkz zb-4*@D|2#;adC0E54^wX)++Ev9~S5B{LO4%f&r}k(hm?mT&2ns=%~=vOzwMVxUH#n(7osec~8Z@~tRSxv4u! z)?kvAM$etrk z*Rb|?ux_ftu7#@wWR|``&QErb5+b{PF4x8cvNnA`6_~{E#!{@B`!McJSimgquUHAb zU^xXp+sFQoHxikS{*h9FMdi=L#LfA2{LmxC`K;{MRjP$!8@&KhKA7AM;RTJmyPLR~ znf3D6$#a_ngS)?x~$(L!3QQh78m@< zo8ig5d^w)X6V~;8*KjdW|255#e0F-p4MoASmU-lH0ce;`dOu)^BrivK_xpR>JrNGW zI^|GAq7UFw_x2q#SNUsGGqdf*Jy2)fJD$xk5Awbnncr1*lUWMf_8rU1DA(&Q41j-` zO?cRg(g09vEKwUyK&p4@^f!96^Z5#bTW$*J1Qpy4%qJjEgrQgAI z1GM}FxW+KvHb=6T#5SB=1Iosvq9R8p`61xv0VsqaSuWOHqrl`_yOo>(npc6s;|^c? z;s7rvFb#TdMu35jeSxLe9sDt`{i}JW6Aa6IS)>~AmMgrip)7&9mxX9O>8gJnV!iR- zj!C=3`p+Z|WC}Ue!SSVbunMeNh4EWGw)$ilfy?HIkr`FwQ8J!d_?exgdUJ_eyFks}fImkfX z^`Z;!(`n2C3%rG(gY1|MkE{s_=kK)$W&_d9u1Z$JgU_3})! z%6v~m>;4+s)wOYZ{x&?-RE!FI&!XS<1{qmKtL7^?^kgmMw%t1#Fk&?94jL_}OGU5Y ze*~B`o2PRhaOO+J6T!W`bT>P>F4f+nQzedjWISneUv&WmT^@s*d6NA(F5-#`mVy;o zZtFGrp_BONC#9KiiuQY$w0f)VR4$SphY}JInKSYa?0?65+YQeue9jjO&o+6A*Q|ge zv9f907yKeK%acO{s9;qbpPBrdz~&xxdTvhiV$2ytbuFbBE%B3XCs~{+w|DgSyNn8wM;jf@LJF4DkP{Aq^tI$$;ROZ(~{rtN9(TY8%|fB$p+q}#DL9JL}Sxv->Pbj z?(tO==`BU0wIC4y!XaYE1`Vhkt#&n>vI@uYMivjncg|=v`al>FoBafi}F=hPs_8%7aA6z0p4*d-_kM#0{A_!m)C+V-B*!*B%t4t3-ji=3> zRn?!veUlZ^8jPm_9RFNfVPWvXI6zo>GmK(ut5luQu2JEuSco%hA!-TG0_ABI@3^J#jE&GaTlI#G$sDD=ubq@orjE`-=$8RL9;MS6{cU*v(sz!Nl zr?|9a1PcR0@iQxP?#EvMs{WJGcu%zn0~RjsTSzX;Sasp<#YN~_CZ?`KuA{(kJ_?ZS zdIA#=7mSI$`_!W6A6%?u{)io$KqG zJAfON9RGZ2G;(Z+9<6@Ma4$>ClEcgFFk(W)_8RQv)V@WhnCbqx?21o1*4Yg!Xr~0? zVG@iBSG4&ya(IZUj?>CRCgQDfg=jvSP7U!blLSTgjOw>s8}*$3$^p#~7M;mGPGNNi zeewdoirqWj2>=)rlN9;Fsz6~g$^Y)h5swwFF_f8S92>uE#@zClFL`iis1v<-ozHE` zbuzl(L<35aP{6f>znABI_ISPK3%EiZJQ|_|$(cz!dbv})5Gp3mGWgB>_Ok#JHv@kC)S{YN%|B7v6^aqo&JtJf<%F}Y=$GXd{9v-Df$fUX zPY(V)xF>1wQ3eZ|DeU)@;nDF~m2badR#WHBhOe0f1LQ*@?6%K^6+OQ?Npv~K`tgfF zy;dd5K;YF=vWctLDFd~QZHUV&dJIDNy1F{My;g^7sh$Gbjf(2u=bewwU5&!?Mtg&> zT0Vwp7AT3nzl!t#uB4r6_t@@I=I)j8KF;Y6@?1{|)OCO&FtN}uO7JD9T4Dh2;^^6% zpym2l+EokbTfF{_O3Sz9KkH{{Gkc@v;jhh1cJFyV5-X5{DsthdP{CiR*6*=ri|mj<-=G zsD16&PnciBf|Y{nh4Hu-p+MSfWckY1^mDn?KO73!3sLh2ZthRwxSl;K z1vq_@{r29#eRth>qmj8w#J~ z;|`_kk-Q|m91;$V$$mL~jq_Cb3xClz`Lp$638m3{$`wEkI;fjvwKo9*Q3rMtqP9Hd zwkwzuc&v`(L0IHeRq9oC^SHSCZ_$4y*!irGS3?~G?)TsFLNEd&+ZlK2NxOm4M?tv> z1LSoxubWYU4}l;91O=f5zDvh>cTej_dA!}F9%<4?+n)t`!=1~$uvp$yyo4@d?y>CD z?>H04$M-2F!QYfc7)1!e8_N6k4aDvA8=lS`?4=nFczB|d{aUxgHoH<<^JaQ)YfU|C zZv;rggwO#Q4MF~0=PRU0?76-Jw?!alFm`#u*gyBA*!U2Zau~i3$?b-RDe@4a+W8Q z3jyPhwJcOdnKsky@Uv0z-7#nM=E|)rR)2WF(9I3p&hBpL;$>&&$4_$OnD%ooeiFmF z3=9l_t6d0IcO?#f&+jjay+@U8cG}}#Or)YaUNmqmROv&#;hT&?nLRU>dvgadQE8sU{yir`Az&u%~q$Kz-0p4n01>fL8Penp{@=T4) zE+7OHn>H3%-N6{0R~GXqrA9UA^q=qlqM$?7>5S1ok5oG{eb@*c(e0PQNGm z$t1ny*l>Y=LwuT(E|e#HUv8mTM=@;4XQL{)L)wc`fmw+)GLW8N&AlJC@%dMwUG5A| z>(kvu0bOM9T_OrT3zk>EFgR^&shNMqh2Gw6Fl)HiR4jGlro&%J-x=FPH(#$*(n7n~ zm7*w08;*WpT2XE9(`G_H>GkzWlWW;?;lZj)8r4P8*3;Onw?RfcecBsdUpgBSq`~XVRYdO!`fzzP0eZwF&9^k1QofQoWEnJPtKCoz54;X3zn&8;pc)N zyjN&%H7F!X(3)WKoMY_1JK?cUU;cfQhZutg;Nt^cjBI&E+Yl+dADXm+CG?ieB?`|= zwl6L(eRJRKNJ&W*5axND2F~|f2ts>Mj0GI^zk1c!RM%Im)2cV)*Xb`<)ah(4HB-e@ z$!(pruLJ18wx8tgJ4Eb_{}6hB@&MYgm9?^-N>GmRFtYiKGCBoc(6h&x$%@Ze#wc~B zlvKbrfTQi18N^`(H(RYtnaV`qB0Bl$zb%=hfQ~V z+7&71pt?fwG+_o{LKQqs^i&mle|FV4B#^(3mU1ztXw=b!qLAhZi{}AVzxeOUMqg8t zS_*;?9$Vm?Uhqy&zx!j7?O%WP-K?s>{~gTaLHzD&gfOeg_x5n zF)e#Fd89W%0;1NM!KJnb*b98cJ%1~@!E6tSn2r>?XdVR6yG}NRK{-~zNPy)_Ixck2 zi%!ZLAsEm2B{fh9zjbFUCHo^6xbu~+Ze$1n!0q5Mnv6}%e21{f@AL+5t`=ElFeCz% zpq=XV%{9Ep<{m{mwni80(~$xeXE{sJXo=Xjt#@-NkveDqYg6#=1o&p(-$mjMTB>w@ z5&VpG3-Q(4NkfD?$OsM4NRSP6I^s6&1(gQEUp#=?Uhs1)bD!Vt*x5TvIYT8I?g4b~ zTP|&C<&{-ou*cS_ivdBucz?~!brYdbiMK}EES22)#)fE5Utfv?Wd&bodwpt<_JA6J z&u9*-HtatVBh%bSw?5EQ*sAhFE7)^O-8GM10mXE1hLDUHKzgZqXZDz%&#Wv^}ItXj)s(bcXxN)9r071dJHIR&^T(VN8lN0I|Yq<*Z?ESgLb#(bB(jf z`F_o7J7-#m1s~r`rj`=VAm0bkN7&wKY}?1jL{Q@KR#!~S+?$_)zYJ*u_mijfIur=BEZWl$W6Pj_1Xkr$g@xtOm0SGLgq-db`_zh~6)#2f_y# zcXfPrCtpv`@w_@%Q6O6&6Efjl5J75BaYfcRTlt|xFw#{&BcxShhGvigd2QUCJ3&)1 zY>zk?d|7k8HVz`X{sEt+u~os7H9?SmHKkd|%Q1?H(2ZUG`oT61`{W(n83lxRb3q zk+C**KH#F>6_wF)6*K1GGdy?F%wRQ6z6#k!ygCaX7k<`RM@KTAlLJ>P7<{EX1P>p0XiK}l%<-Z9N)3N1-mT+D zTk^%Ii+dxV+c>BBW46*hR%j?PK<=EojF(|Gl$mOK>JxCUFd-_inR5|2Bp+lDCvF1} z*=0Br#lcfo9$5m{1hgf)ab}k9WS*XE?|d#+8?x9Bg(duVB0%|6g=D56itf%fra4_CSs2inqW7%;BswMkt%*a?+Mv!Io0=d|` zHoYA}N|MjwfwE(W^o<6`^nPbl^u&zZXJ{l3HK2eCeq)swCS>Vn)b zD}A2X`>sgBL=4VJ0ubOxq6NRLo-*G-0`z>^-CwsE+~u}C)OhpBG7dS7H;U-nF`u^l z8NYLC*XAZLQ^#}tgYn!^%f3g-Syo$Gg|C@ipF=D&xT(S{S~&JP`89eE;3R~ z!cRmHy!<7ZnVLTl^?>Q}-1~W3$^Eq2Mn)e(+TgP0Bq9}&8LQzp@g8UMcm*d||tPc)=q=JNOAdoy!^59a2jd zMRK@a8BM-seXPA_)ZI7Q_|%|zM3q{onBg}uftk(;QHdbsB>LT+<{ygFN5&)Jpqj_f z3E-UzvhFvfK^xaR>p!xyMdedJ7+lwakB3Ok_jJ!nl#attSa}Jy`y#uWYZHgKLmi9v_$D=uQ41d5FB`0_+v2Q${?verIy6M*V)F*Oq-R886 zzVbJi1j7HwWxCK@Pud(65)!f$MeBnIRRExC&TuMcP0zmlYGmvh(NOBaHm7$aPF@wQ ztzE7&mF6mt&e~c>LCA5q)^BI_*h7V#1Gemg0vZB}M*ZsY7MI?2EdXTA8&>Z4ICIq^LhL%0_pT0y=F6qb}MMWjCf zn&P+}R@FIqwJ?iKfdeD;k*2E3T4Ben)Q`#aw2+1GV|*m-BcQy!^U>kq`FW9%TcW)T z0T~L$ftj~-C8tcw>T}{68tB5e$Bf4dbtLAc&EA$!!Um<_DFd3VMs+pq!($>_KHa*4 z0uA%FT~w_m$EXG}Wh^XZ1CzePR!6J1yb&Gf%@Xl~v;6BT^`Wkx}Ib%<2TCJo0*b&B( zu?^V{`81osI9fFHUdpVQKYNf>JfluSU$Nqvpb5!^$JNz?`fU@ZCrYJ6-djczrZ`7p+g4a<#w$vsGuGeV;Qdu-a;8S6 zMc%@KNKDL%VQV10ty0NH7vs!|RbcY|TQTVJ2^bdpSG8{a-Wd-Gv{khJy2GttI^MHY zaAT1RTicB__5)b)ac2Wqz7hd4K@s+6Z~3&(dkLO$<4X!<6)WyHa>vgh5sO6?6>~D( zr4{Kx&n*`X?r@3qRe+nE{5jH(rf~Q7#o>|d!3o0|gtcMaue5@fKe#5H@O;dJVsp6i%VD$K zc;@Owbo+X!FYMict7S}H!HKU0evjz_tB!{EXf}xenpwq1aq|@-h#yBmrxA4pu4`AOuaI$sLLto3yTQDwt6?#6SYN(n<_9ydsF^PNtxlHX&EWwru>ujvdj|6 z_McOP_KMi^C}dyrA^-|Fi;w3_31X0YstaavEoL(Tt-lkNh@_Af1*WV?{tpljSpESU>*Z>q z2O6&@TAWWD%oqk~?MP9lds|c?>f3~!Klg2hSSBfoWnmgI8a>%BuCBOQn2k_=*uJ=S2>=j$&TC8s~A_i6+DX?xG`)poK=V3u%~CAe@M~nONXbL zJ{Jf3YCs%hVCH|Sck5}PTUyYS9Xe+$eiQtAMK`GD1(RHY;VO-Igwx@eA^ONRSoh>h zox|PR!}?FZ#abEza}YKbF2W=?^h3o@t&%IuNsHY;UNwV&l|u)u8JBtuNwehr)Mgzo z>lWsB#=6*r;9ED>EsRwu%8CIrNlT0c?Dj+OJ{8ff4`iF>+R1@uLFsyiooJpzBDW`` z=n-h;%*7|M#yP9N{A|*?MB?O2StFLW;?@bh+?rL*`)9R!4d-xW+-8*+Md1~D19f`x z7igxo{6=gi4PAZEHKhjVs|SbH zI?o^M3RNdq8Ql32jtsWM`^XsDavGNdH_HjI-ENY2Tobtz_9q4>buz%jR?e$Ka}^4y znMK*rIsI)Qx>NIipXXy9dqI5#{_J5(S$sSHg(ZoUP8^v3){@rKdfth@z#GkwJCi1o zKW+tL_dPhcr8&r+`5Myu>7m)JLyo~q$WUeXv_x=bn4s;H-r}~J8566C37C{P61LZ0q=Dp%_JBYG;Y-s4AwE(V2ybZh3Nq#$<3gQdf?o0hcR zp+(z9TS-8a4+$CIdKt(JYT^93?9!>fgA>{&wWd5-OqJOF}*#HA7kkvgjFTj+?pen z1pLV4fx_A4Y#ZqCl?nl-3Xh$O%RE7ozQLF~(1OVnQRpq&(QChxm-_7U2jW+2vk&-^yCTl_Be@JDI2vtGQ6ltpdbwrq;9(frrtIw2_`txOZ8hd0ZeDe0k% zh~MhrsvdL3*AleK(+3%&W0wyv?oztE4b2%hjfk#+spzrD=dFP$sn0F6-!|wSgR0QZ`zLW}vBA=NG&|~h|0b?;7 zsSwVH^LjVo8;L&`@sBMZ9+t41>S?QHP}cYXTTZ*g)y>ajd}m-f5)~IMTU$(`BT4l8GTYN z&~CVwF+$PLN7{hAygg$=dtoVn^t;%0Kpl9$K!o#6EB~zd=OA`7)A|?<+^0Y4OzR>K zv>U6A(Zj6sMmm1TPYwIni~~1hrNZ_&0r694b6l7ojYlOJ*eA)|-+mJE%BdP}`BWf| z19)2wXizV31{j@^_P|3vL$o4)C4{er&iSMvdJcI;XyMNd-hV~{KbDt-^A&{x`XK4D zy;-t(O830?$d~XzlbxGU=N94DWjO7JRi#ha3S`L#RH?ZAusqAJ(^eAmDlc3i(fmJE z$7ADyj#*tt@Lrngd-tvLg6BgMgVQT@X65HkfgKv(Drpzqqt?9)h!?}hp`h2#EsBFRco4H zGGIndwzri&8U0U^n5;gG9*b)KH3;rovZt%I6w&y8JVBF3Ht*e4p(|OZPLaUJJ-|=z zwyQ(YI#_3~QMuAUHi4|3ZPK?I&;P@+^(Qa}b+#5{eRP`$XPH?RFWke$_g4y(d&izyT6OF(-5vZSnd-jKP5ndg}~zAd5dj z*p0e>xU+Pcd?spfsVDfK%*X#kSl*V`840v;ms;|apTyk@B+YC6g` zFCnjzv~1A?N?X-NxEqI5FJ$m++2i!m`%SNkG53RXgNFja@}L=?Z)fF|*3q2g*_BrF zH9kBx`;0(Zcv`u;^A#uSFpvVmenqbVVpV(^l;gfle;)zfNU$CV#A|z{ #ZMbca< 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

aAYEOrmKl4a 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�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 + + + \ No newline at end of file diff --git a/packages/cisa_kevs/kibana/dashboard/cisa_kevs-dcb4dd40-d17a-11ee-b159-799470efb549.json b/packages/cisa_kevs/kibana/dashboard/cisa_kevs-dcb4dd40-d17a-11ee-b159-799470efb549.json new file mode 100644 index 00000000000..d433f8fdf0e --- /dev/null +++ b/packages/cisa_kevs/kibana/dashboard/cisa_kevs-dcb4dd40-d17a-11ee-b159-799470efb549.json @@ -0,0 +1,1125 @@ +{ + "attributes": { + "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-cb06c73a-039f-465e-8e15-bee3c2c1705d", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "cb06c73a-039f-465e-8e15-bee3c2c1705d": { + "columnOrder": [ + "9e6568a7-fccb-4ca6-bfa2-94c00a3fdf19", + "641309f2-f117-48e9-a8da-6c5e5721e73e" + ], + "columns": { + "641309f2-f117-48e9-a8da-6c5e5721e73e": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Unique Vulnerabilities", + "operationType": "unique_count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "vulnerability.id" + }, + "9e6568a7-fccb-4ca6-bfa2-94c00a3fdf19": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Date Vulnerability Added to KEV", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "cisa_kev.vulnerability.date_added" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset : \"cisa_kevs.vulnerability\"" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "curveType": "CURVE_MONOTONE_X", + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "hideEndzones": false, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "641309f2-f117-48e9-a8da-6c5e5721e73e" + ], + "layerId": "cb06c73a-039f-465e-8e15-bee3c2c1705d", + "layerType": "data", + "position": "top", + "seriesType": "bar", + "showGridlines": false, + "xAccessor": "9e6568a7-fccb-4ca6-bfa2-94c00a3fdf19", + "yConfig": [ + { + "color": "#e7664c", + "forAccessor": "641309f2-f117-48e9-a8da-6c5e5721e73e" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "right" + }, + "preferredSeriesType": "bar", + "showCurrentTimeMarker": false, + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "show", + "yLeftExtent": { + "mode": "dataBounds" + } + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false, + "timeRange": { + "from": "now-4y", + "to": "now" + } + }, + "gridData": { + "h": 7, + "i": "11d1dae0-5ff6-45d5-b6b4-94d3e31086ae", + "w": 48, + "x": 0, + "y": 18 + }, + "panelIndex": "11d1dae0-5ff6-45d5-b6b4-94d3e31086ae", + "title": "Vulnerabilities Added Over Time", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-unifiedHistogram", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a": { + "columnOrder": [ + "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819", + "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed" + ], + "columns": { + "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Known Exploitable Vulnerabilities", + "operationType": "unique_count", + "params": { + "emptyAsNull": false, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "vulnerability.id" + }, + "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "incompleteColumns": {}, + "linkToLayers": [ + "unifiedHistogram" + ], + "sampling": 1 + }, + "unifiedHistogram": { + "columnOrder": [ + "count_column" + ], + "columns": { + "count_column": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Known Exploitable Vulnerabilities", + "operationType": "unique_count", + "params": { + "emptyAsNull": false, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "vulnerability.id" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset :\"cisa_kevs.vulnerability\" " + }, + "visualization": { + "color": "#E7664C", + "layerId": "unifiedHistogram", + "layerType": "data", + "metricAccessor": "count_column", + "showBar": false, + "trendlineLayerId": "a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "trendlineLayerType": "metricTrendline", + "trendlineMetricAccessor": "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed", + "trendlineTimeAccessor": "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819" + } + }, + "title": "Unique KEVs", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {} + }, + "gridData": { + "h": 4, + "i": "994459e2-d2d3-4789-87fe-f417c3d043d4", + "w": 13, + "x": 0, + "y": 0 + }, + "panelIndex": "994459e2-d2d3-4789-87fe-f417c3d043d4", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-unifiedHistogram", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a": { + "columnOrder": [ + "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819", + "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed" + ], + "columns": { + "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Known Exploitable Products", + "operationType": "unique_count", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "cisa_kev.vulnerability.product" + }, + "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "incompleteColumns": {}, + "linkToLayers": [ + "unifiedHistogram" + ], + "sampling": 1 + }, + "unifiedHistogram": { + "columnOrder": [ + "count_column" + ], + "columns": { + "count_column": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Known Exploitable Products", + "operationType": "unique_count", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "cisa_kev.vulnerability.product" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset :\"cisa_kevs.vulnerability\" " + }, + "visualization": { + "color": "#D6BF57", + "layerId": "unifiedHistogram", + "layerType": "data", + "metricAccessor": "count_column", + "showBar": false, + "trendlineLayerId": "a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "trendlineLayerType": "metricTrendline", + "trendlineMetricAccessor": "40d51c8d-52ae-4a9b-a7d2-78e58c2e13ed", + "trendlineTimeAccessor": "c4cf7f5d-0fe0-4718-a9dd-d25ea0ea7819" + } + }, + "title": "Unique KEVs", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 4, + "i": "b2191ffc-7417-40bb-893a-732d7ce668b0", + "w": 13, + "x": 13, + "y": 0 + }, + "panelIndex": "b2191ffc-7417-40bb-893a-732d7ce668b0", + "title": "Unique Products", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "6e62103f-8ff3-4d24-916f-7a9702eb9f31": { + "columnOrder": [ + "6511ebcf-280b-452d-b2a4-190f2aa65454", + "5e31744c-f016-4138-85a4-720d7de7a0d1", + "f0f76951-6c0b-4929-b049-12d9e33bbd6d", + "15f5b2d8-a528-4420-ba58-8cee1fdfac89", + "9011004c-55e8-4d7c-981a-a282871f9ac1" + ], + "columns": { + "15f5b2d8-a528-4420-ba58-8cee1fdfac89": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Date Added", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "d" + }, + "scale": "interval", + "sourceField": "cisa_kev.vulnerability.date_added" + }, + "5e31744c-f016-4138-85a4-720d7de7a0d1": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Product", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 100 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.product" + }, + "6511ebcf-280b-452d-b2a4-190f2aa65454": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Vendor Project", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 100 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.vendor_project" + }, + "9011004c-55e8-4d7c-981a-a282871f9ac1": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "f0f76951-6c0b-4929-b049-12d9e33bbd6d": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "CVE", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 1000 + }, + "scale": "ordinal", + "sourceField": "vulnerability.id" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset : \"cisa_kevs.vulnerability\"" + }, + "visualization": { + "columns": [ + { + "columnId": "f0f76951-6c0b-4929-b049-12d9e33bbd6d", + "isTransposed": false, + "width": 147.05555555555554 + }, + { + "columnId": "6511ebcf-280b-452d-b2a4-190f2aa65454", + "isTransposed": false, + "width": 137.55555555555554 + }, + { + "columnId": "5e31744c-f016-4138-85a4-720d7de7a0d1", + "isTransposed": false, + "width": 163.05555555555554 + }, + { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "hidden": true, + "isTransposed": false + }, + { + "alignment": "left", + "columnId": "15f5b2d8-a528-4420-ba58-8cee1fdfac89", + "hidden": false, + "isTransposed": false + } + ], + "layerId": "6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "layerType": "data", + "paging": { + "enabled": true, + "size": 10 + }, + "rowHeight": "auto", + "sorting": { + "columnId": "15f5b2d8-a528-4420-ba58-8cee1fdfac89", + "direction": "desc" + } + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 18, + "i": "35f41e97-ee29-4ae8-b1f8-da96071026c5", + "w": 22, + "x": 26, + "y": 0 + }, + "panelIndex": "35f41e97-ee29-4ae8-b1f8-da96071026c5", + "title": "Most Recent Vulnerabilities Added to the KEV List", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-a3231286-d69b-47b3-9a8c-940078747bbb", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "a3231286-d69b-47b3-9a8c-940078747bbb": { + "columnOrder": [ + "bad40eca-3d67-4d08-a6a8-21873637f577", + "876576e4-3fec-400a-8f1e-015262b3aea5" + ], + "columns": { + "876576e4-3fec-400a-8f1e-015262b3aea5": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "bad40eca-3d67-4d08-a6a8-21873637f577": { + "dataType": "string", + "isBucketed": true, + "label": "Top 5 values of cisa_kev.vulnerability.vendor_project", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "876576e4-3fec-400a-8f1e-015262b3aea5", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.vendor_project" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset : \"cisa_kevs.vulnerability\" " + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "emptySizeRatio": 0.54, + "layerId": "a3231286-d69b-47b3-9a8c-940078747bbb", + "layerType": "data", + "legendDisplay": "default", + "metrics": [ + "876576e4-3fec-400a-8f1e-015262b3aea5" + ], + "nestedLegend": false, + "numberDisplay": "value", + "percentDecimals": 1, + "primaryGroups": [ + "bad40eca-3d67-4d08-a6a8-21873637f577" + ] + } + ], + "palette": { + "name": "default", + "type": "palette" + }, + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "aaae6248-e18f-4e38-ba33-65fd6339ceb5", + "w": 13, + "x": 0, + "y": 4 + }, + "panelIndex": "aaae6248-e18f-4e38-ba33-65fd6339ceb5", + "title": "Top 5 Vendor Projects", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-00d70036-f0e2-4855-bf07-cb4170c30898", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "00d70036-f0e2-4855-bf07-cb4170c30898": { + "columnOrder": [ + "7367379b-5e97-4019-8efa-4b89083ce8b7", + "46fce31b-a82a-4fbd-b147-28a7287ca393" + ], + "columns": { + "46fce31b-a82a-4fbd-b147-28a7287ca393": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "7367379b-5e97-4019-8efa-4b89083ce8b7": { + "dataType": "string", + "isBucketed": true, + "label": "Top 5 values of cisa_kev.vulnerability.product", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "46fce31b-a82a-4fbd-b147-28a7287ca393", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.product" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset : \"cisa_kevs.vulnerability\" " + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "emptySizeRatio": 0.54, + "layerId": "00d70036-f0e2-4855-bf07-cb4170c30898", + "layerType": "data", + "legendDisplay": "default", + "metrics": [ + "46fce31b-a82a-4fbd-b147-28a7287ca393" + ], + "nestedLegend": false, + "numberDisplay": "value", + "primaryGroups": [ + "7367379b-5e97-4019-8efa-4b89083ce8b7" + ] + } + ], + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "b2398a92-2791-44d2-ab6e-62168742b786", + "w": 13, + "x": 13, + "y": 4 + }, + "panelIndex": "b2398a92-2791-44d2-ab6e-62168742b786", + "title": "Top 5 Exploitable Products", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "6e62103f-8ff3-4d24-916f-7a9702eb9f31": { + "columnOrder": [ + "6511ebcf-280b-452d-b2a4-190f2aa65454", + "5e31744c-f016-4138-85a4-720d7de7a0d1", + "f0f76951-6c0b-4929-b049-12d9e33bbd6d", + "068fcaff-a6b1-4c7c-8e5f-95acda8cdf17", + "9011004c-55e8-4d7c-981a-a282871f9ac1" + ], + "columns": { + "068fcaff-a6b1-4c7c-8e5f-95acda8cdf17": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Description", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5000 + }, + "scale": "ordinal", + "sourceField": "vulnerability.description" + }, + "5e31744c-f016-4138-85a4-720d7de7a0d1": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Product", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5000 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.product" + }, + "6511ebcf-280b-452d-b2a4-190f2aa65454": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Vendor Project", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 500 + }, + "scale": "ordinal", + "sourceField": "cisa_kev.vulnerability.vendor_project" + }, + "9011004c-55e8-4d7c-981a-a282871f9ac1": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "f0f76951-6c0b-4929-b049-12d9e33bbd6d": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "CVE", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5000 + }, + "scale": "ordinal", + "sourceField": "vulnerability.id" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "event.dataset : \"cisa_kevs.vulnerability\" " + }, + "visualization": { + "columns": [ + { + "columnId": "f0f76951-6c0b-4929-b049-12d9e33bbd6d", + "isTransposed": false, + "width": 147.05555555555554 + }, + { + "columnId": "6511ebcf-280b-452d-b2a4-190f2aa65454", + "isTransposed": false, + "width": 137.55555555555554 + }, + { + "columnId": "5e31744c-f016-4138-85a4-720d7de7a0d1", + "isTransposed": false, + "width": 163.05555555555554 + }, + { + "columnId": "9011004c-55e8-4d7c-981a-a282871f9ac1", + "hidden": true, + "isTransposed": false + }, + { + "columnId": "068fcaff-a6b1-4c7c-8e5f-95acda8cdf17", + "isTransposed": false + } + ], + "layerId": "6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "layerType": "data", + "rowHeight": "auto" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 16, + "i": "16245c6e-c656-4464-8e41-2f2ef485c99d", + "w": 48, + "x": 0, + "y": 25 + }, + "panelIndex": "16245c6e-c656-4464-8e41-2f2ef485c99d", + "title": "Details", + "type": "lens" + } + ], + "timeRestore": false, + "title": "[Vulnerability] CISA Known Exploited Vulnerabilities", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-02-29T03:20:22.877Z", + "id": "cisa_kevs-dcb4dd40-d17a-11ee-b159-799470efb549", + "managed": false, + "references": [ + { + "id": "logs-*", + "name": "11d1dae0-5ff6-45d5-b6b4-94d3e31086ae:indexpattern-datasource-layer-cb06c73a-039f-465e-8e15-bee3c2c1705d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "994459e2-d2d3-4789-87fe-f417c3d043d4:indexpattern-datasource-layer-unifiedHistogram", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "994459e2-d2d3-4789-87fe-f417c3d043d4:indexpattern-datasource-layer-a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b2191ffc-7417-40bb-893a-732d7ce668b0:indexpattern-datasource-layer-unifiedHistogram", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b2191ffc-7417-40bb-893a-732d7ce668b0:indexpattern-datasource-layer-a8d7a9de-d9d9-44f4-834e-4cdf07d9c32a", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "35f41e97-ee29-4ae8-b1f8-da96071026c5:indexpattern-datasource-layer-6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "aaae6248-e18f-4e38-ba33-65fd6339ceb5:indexpattern-datasource-layer-a3231286-d69b-47b3-9a8c-940078747bbb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b2398a92-2791-44d2-ab6e-62168742b786:indexpattern-datasource-layer-00d70036-f0e2-4855-bf07-cb4170c30898", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "16245c6e-c656-4464-8e41-2f2ef485c99d:indexpattern-datasource-layer-6e62103f-8ff3-4d24-916f-7a9702eb9f31", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/packages/cisa_kevs/manifest.yml b/packages/cisa_kevs/manifest.yml new file mode 100644 index 00000000000..efedde8f09f --- /dev/null +++ b/packages/cisa_kevs/manifest.yml @@ -0,0 +1,40 @@ +format_version: 3.0.3 +name: cisa_kevs +title: "CISA Known Exploited Vulnerabilities" +version: 0.1.0 +description: "This a package that allows the ingest of known exploited vulnerabilities according to the Cybersecurity and Infrastructure Security Agency of the United States of America. This information could be used to enrich or track exisiting vulnerabilities that are known to be exploited in the wild." +type: integration +categories: + - security +conditions: + kibana: + version: "^8.11.4" + elastic: + subscription: "basic" +screenshots: + - src: /img/cisa_kevs.png + title: Dashboard for CISA Known Exploitable Vulnerabilities + size: 600x600 + type: image/png +icons: + - src: "/img/icon.svg" + type: "image/svg+xml" +policy_templates: + - name: cisa_kevs + title: CISA Known Exploited Vulnerabilities + description: Ingest the CISA KEVs with Elastic Agent. + inputs: + - type: httpjson + title: "Collect CISA KEVs via API" + description: "Ingest the CISA KEVs with Elastic Agent." + vars: + - name: enable_request_tracer + type: bool + title: Enable request tracing + 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-httpjson.html#_request_tracer_filename) for details. +owner: + github: elastic/security-service-integrations + type: community diff --git a/packages/cisa_kevs/validation.yml b/packages/cisa_kevs/validation.yml new file mode 100644 index 00000000000..1909b26667a --- /dev/null +++ b/packages/cisa_kevs/validation.yml @@ -0,0 +1,3 @@ +errors: + exclude_checks: + - SVR00002 # expected filter in dashboard. From f8e709aec29ef603d2cb1c910718663ab1b96d44 Mon Sep 17 00:00:00 2001 From: Susan <23287722+susan-shu-c@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:54:15 -0400 Subject: [PATCH 04/33] Beaconing - Update whitelist in transform (#9332) * Update whitelist in transform * Update transform exceptionlist, dest index version * Update changelog * Only add 2 processes to the transform exceptionlist * Update readme * Update readme * Update packages/beaconing/docs/README.md Co-authored-by: Kirti Sodhi <109447885+sodhikirti07@users.noreply.github.com> --------- Co-authored-by: Kirti Sodhi <109447885+sodhikirti07@users.noreply.github.com> --- packages/beaconing/changelog.yml | 5 +++++ packages/beaconing/docs/README.md | 12 +++++++++++- .../transform/pivot_transform/transform.yml | 8 ++++---- packages/beaconing/manifest.yml | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/beaconing/changelog.yml b/packages/beaconing/changelog.yml index 677e7215a03..144e749083a 100644 --- a/packages/beaconing/changelog.yml +++ b/packages/beaconing/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.2.0" + changes: + - description: Update transform exceptionlist + type: enhancement + link: https://github.com/elastic/integrations/pull/9332 - version: "1.1.0" changes: - description: Update package docs diff --git a/packages/beaconing/docs/README.md b/packages/beaconing/docs/README.md index e1682022908..2aa884b7528 100644 --- a/packages/beaconing/docs/README.md +++ b/packages/beaconing/docs/README.md @@ -48,8 +48,18 @@ The transform, which runs every hour, also filters out common, known application The values highlighted above are typical of beaconing behavior and can help with your investigation. +## Exceptionlist customizations + +There are two places where you can customize which processes are on an exceptionlist for this detection. The first is in the transforms: these contain processes which are common, and thus it is beneficial for the transform's performance and data processing to keep some processes here. You can read more on how to customize the transforms in the next section. + +We also provide a default exceptionlist in the rules, which you can [inspect and customize in the UI](https://www.elastic.co/guide/en/security/current/detections-ui-exceptions.html). The source can be viewed [here](https://github.com/elastic/detection-rules/tree/main/rules/integrations/beaconing). + ## Further customizations -Advanced users can also tune the scripted metric aggregation's parameters, such as jitter percentage or time window. To overwrite the default parameters: delete the transform, change the parameters, and restart the transform. The configurable parameters are: + +Advanced users can also tune the scripted metric aggregation's parameters, such as jitter percentage or time window. Navigate to Transforms on your Elastic cluster and find the transform installed by this package (search `beaconing`). You can browse the source of the transform there by clicking on the `.json` tab; the source code of the latest version can also be viewed [here](https://github.com/elastic/integrations/blob/main/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml#L364). + +To overwrite the default parameters: stop the transform installed by the package, clone the transform, change the parameters of the cloned transform, then start the cloned transform. The configurable parameters are: + * `number_buckets_in_range`: The number of time buckets into which the time window is split. Using more buckets improves estimates for various statistics, but also increases resource usage. * `time_bucket_length`: The length of each time bucket. A higher value indicates a longer time window. Set this to a higher value to check for very low-frequency beacons. * `number_destination_ips`: The number of destination IPs to collect in results. Setting this to a higher value increases resource usage. diff --git a/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml b/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml index 90cd9dd2d4a..cd6dce36da9 100644 --- a/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml +++ b/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml @@ -1,6 +1,6 @@ dest: - index: ml_beaconing-1.1.0 - pipeline: 1.1.0-ml_beaconing_ingest_pipeline + index: ml_beaconing-1.2.0 + pipeline: 1.2.0-ml_beaconing_ingest_pipeline aliases: - alias: ml_beaconing.latest move_on_creation: true @@ -361,7 +361,7 @@ source: minimum_should_match: 1 must_not: terms: - 'process.name': ["Acrobat.exe", "AcroCEF.exe", "AcroCEF Helper", "AddressBookSourceSync", "Adobe_CCXProcess.node", "Adobe CEF Helper", "Adobe CEF Helper.exe", "AdobeCollabSync.exe", "Adobe Desktop Service", "Adobe Desktop Service.exe", "accountsd", "akd", "appstoreagent", "apsd", "atmgr.exe", "assistantd", "backgroundTaskHost.exe", "BackgroundTransferHost.exe", "Brave Browser Helper", "CalendarAgent", "Camtasia 2020", "CCXProcess", "chrome.exe", "cloudd", "Code.exe", "Code Helper", "Code Helper (Renderer)", "CompatTelRunner.exe", "com.apple.geod", "com.apple.ncplugin.stocks", "com.apple.Safari.SafeBrowsing.Service", "com.apple.WebKit.Networking", "com.docker.vpnkit", "commerce", "Core Sync", "CoreSync.exe", "default-browser-agent.exe", "DeliveryService.exe", "DeviceCensus.exe", "Docker", "Dropbox", "Dsapi.exe", "elastic-agent", "elastic-agent.exe", "elastic-endpoint", "esensor", "EXCEL.EXE", "explorer.exe", "familycircled", "filebeat", "filebeat.exe", "FileCoAuth.exe", "firefox", "firefox.exe", "GitHub Desktop Helper", "Google Chrome Helper", "google_osconfig_agent", "google_osconfig_agent.exe", "google_guest_agent", "GCEWindowsAgent.exe", "Google Drive", "GoogleDriveFS.exe", "GoogleUpdate.exe", "IMRemoteURLConnectionAgent", "jamf", "keybase", "ksfetch", "Lenovo.Modern.ImController.PluginHost.CompanionApp.exe", "LenovoVantageService.exe", "locationd", "mapspushd", "mcautoreg.exe", "metricbeat", "mdmclient", "Mail", "MMSSHOST.exe", "Microsoft Excel", "Microsoft.Management.Services.IntuneWindowsAgent.exe", "Microsoft OneNote", "Microsoft PowerPoint", "Microsoft Teams Helper", "Microsoft Teams Helper (Renderer)", "Microsoft Update Assistant", "Microsoft Word", "ModuleCoreService.exe", "msedge.exe", "node", "node.exe", "nsurlsessiond", "OfficeC2RClient.exe", "ONENOTE.EXE", "officesvcmgr.exe", "OfficeClickToRun.exe", "OneDrive.exe", "parsec-fbf", "parsecd", "pingsender.exe", "SDXHelper.exe", "SearchApp.exe", "ServiceLayer.exe", "Skype for Business", "Slack.exe", "Slack Helper", "snapd", "smartscreen.exe", "softwareupdated", "Spotify.exe", "Spotify Helper", "ssm-agent-worker.exe", "ssm-document-worker.exe", "syspolicyd", "SystemIdleCheck.exe", "taskhostw.exe", "Teams", "Teams.exe", "trustd", "updater", "WINWORD.EXE", "WhatsApp Helper", "xpcproxy", "Zoom.exe", "zoom.us", "ZoomPresence"] + 'process.name': ["Acrobat.exe", "AcroCEF.exe", "AcroCEF Helper", "AddressBookSourceSync", "Adobe_CCXProcess.node", "Adobe CEF Helper", "Adobe CEF Helper.exe", "AdobeCollabSync.exe", "Adobe Desktop Service", "Adobe Desktop Service.exe", "accountsd", "akd", "appstoreagent", "apsd", "atmgr.exe", "assistantd", "backgroundTaskHost.exe", "BackgroundTransferHost.exe", "Brave Browser Helper", "CalendarAgent", "Camtasia 2020", "CCXProcess", "chrome.exe", "cloudd", "Code.exe", "Code Helper", "Code Helper (Renderer)", "CompatTelRunner.exe", "com.apple.geod", "com.apple.ncplugin.stocks", "com.apple.Safari.SafeBrowsing.Service", "com.apple.WebKit.Networking", "com.docker.vpnkit", "commerce", "Core Sync", "CoreSync.exe", "default-browser-agent.exe", "DeliveryService.exe", "DeviceCensus.exe", "Docker", "Dropbox", "Dsapi.exe", "elastic-agent", "elastic-agent.exe", "elastic-endpoint", "esensor", "EXCEL.EXE", "explorer.exe", "familycircled", "filebeat", "filebeat.exe", "FileCoAuth.exe", "firefox", "firefox.exe", "GitHub Desktop Helper", "Google Chrome Helper", "google_osconfig_agent", "google_osconfig_agent.exe", "google_guest_agent", "GCEWindowsAgent.exe", "Google Drive", "GoogleDriveFS.exe", "GoogleUpdate.exe", "IMRemoteURLConnectionAgent", "jamf", "keybase", "ksfetch", "Lenovo.Modern.ImController.PluginHost.CompanionApp.exe", "LenovoVantageService.exe", "locationd", "mapspushd", "mcautoreg.exe", "metricbeat", "mdmclient", "Mail", "MMSSHOST.exe", "Microsoft Excel", "Microsoft.Management.Services.IntuneWindowsAgent.exe", "Microsoft.SharePoint.exe", "Microsoft OneNote", "Microsoft PowerPoint", "Microsoft Teams Helper", "Microsoft Teams Helper (Renderer)", "Microsoft Update Assistant", "Microsoft Word", "ModuleCoreService.exe", "msedge.exe", "node", "node.exe", "nsurlsessiond", "OfficeC2RClient.exe", "ONENOTE.EXE", "officesvcmgr.exe", "OfficeClickToRun.exe", "OneDrive.exe", "parsec-fbf", "parsecd", "pingsender.exe", "SDXHelper.exe", "SearchApp.exe", "ServiceLayer.exe", "Skype for Business", "Slack.exe", "Slack Helper", "snapd", "smartscreen.exe", "softwareupdated", "Spotify.exe", "Spotify Helper", "ssm-agent-worker.exe", "ssm-document-worker.exe", "svchost.exe", "syspolicyd", "SystemIdleCheck.exe", "taskhostw.exe", "Teams", "Teams.exe", "trustd", "updater", "WINWORD.EXE", "WhatsApp Helper", "xpcproxy", "Zoom.exe", "zoom.us", "ZoomPresence"] should: - bool: filter: @@ -382,5 +382,5 @@ sync: delay: 120s field: "@timestamp" _meta: - fleet_transform_version: 1.1.0 + fleet_transform_version: 1.2.0 run_as_kibana_system: false diff --git a/packages/beaconing/manifest.yml b/packages/beaconing/manifest.yml index a8236c80dae..701c9615863 100644 --- a/packages/beaconing/manifest.yml +++ b/packages/beaconing/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: beaconing title: "Network Beaconing Identification" -version: 1.1.0 +version: 1.2.0 source: license: "Elastic-2.0" description: "Package to identify beaconing activity in your network events." From 6d5ef11899c36d338cb799ba449177e81074e73c Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Reddy Burri Date: Fri, 15 Mar 2024 14:10:46 +0530 Subject: [PATCH 05/33] [Azure] Add Microsoft Graph Activity Logs datastream (#9314) * Add Microsoft Graph Activity Logs datastream --- packages/azure/_dev/build/docs/README.md | 4 +- .../_dev/build/docs/graphactivitylogs.md | 84 + packages/azure/changelog.yml | 5 + .../test/pipeline/test-activitylogs-raw.log | 5 + .../test-activitylogs-raw.log-expected.json | 708 +++++++ .../_dev/test/pipeline/test-common-config.yml | 3 + .../agent/stream/azure-eventhub.yml.hbs | 46 + .../agent/stream/log.yml.hbs | 19 + .../ingest_pipeline/azure-shared-pipeline.yml | 91 + .../elasticsearch/ingest_pipeline/default.yml | 466 +++++ .../graphactivitylogs/fields/agent.yml | 62 + .../graphactivitylogs/fields/base-fields.yml | 20 + .../graphactivitylogs/fields/ecs.yml | 114 ++ .../graphactivitylogs/fields/fields.yml | 104 ++ .../fields/package-fields.yml | 42 + .../graphactivitylogs/manifest.yml | 62 + .../graphactivitylogs/sample_event.json | 131 ++ packages/azure/docs/README.md | 4 +- packages/azure/docs/graphactivitylogs.md | 353 ++++ packages/azure/img/graph_activity.png | Bin 0 -> 5399 bytes packages/azure/img/graph_activity_logs.png | Bin 0 -> 641022 bytes ...-2b2e94c8-aff5-401d-b9a5-aae2d051a92c.json | 1638 +++++++++++++++++ packages/azure/manifest.yml | 24 +- 23 files changed, 3980 insertions(+), 5 deletions(-) create mode 100644 packages/azure/_dev/build/docs/graphactivitylogs.md create mode 100644 packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log create mode 100644 packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log-expected.json create mode 100644 packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/agent/stream/azure-eventhub.yml.hbs create mode 100644 packages/azure/data_stream/graphactivitylogs/agent/stream/log.yml.hbs create mode 100644 packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/fields/agent.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/fields/base-fields.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/fields/ecs.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/fields/fields.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/fields/package-fields.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/manifest.yml create mode 100644 packages/azure/data_stream/graphactivitylogs/sample_event.json create mode 100644 packages/azure/docs/graphactivitylogs.md create mode 100644 packages/azure/img/graph_activity.png create mode 100644 packages/azure/img/graph_activity_logs.png create mode 100644 packages/azure/kibana/dashboard/azure-2b2e94c8-aff5-401d-b9a5-aae2d051a92c.json diff --git a/packages/azure/_dev/build/docs/README.md b/packages/azure/_dev/build/docs/README.md index cbdec1547ef..3c5d32d8c17 100644 --- a/packages/azure/_dev/build/docs/README.md +++ b/packages/azure/_dev/build/docs/README.md @@ -1,6 +1,6 @@ # Azure Logs Integration -The Azure Logs integration collects logs for specific Azure services like Azure Active Directory (Sign-in, Audit, Identity Protection, and Provisioning logs), Azure Spring Apps, Azure Firewall, and several others using the Activity and Platform logs. +The Azure Logs integration collects logs for specific Azure services like Azure Active Directory (Sign-in, Audit, Identity Protection, and Provisioning logs), Azure Spring Apps, Azure Firewall, Microsoft Graph Activity, and several others using the Activity and Platform logs. You can then visualize that data in Kibana, create alerts to notify you if something goes wrong, and reference data when troubleshooting an issue. @@ -16,7 +16,7 @@ fail to start due to an exceed quota limit. The Azure Logs integration collects logs. **Logs** help you keep a record of events that happen on your Azure account. -Log data streams collected by the Azure Logs integration include Activity, Platform, Active Directory (Sign-in, Audit, Identity Protection, Provisioning), and Spring Apps logs. +Log data streams collected by the Azure Logs integration include Activity, Platform, Active Directory (Sign-in, Audit, Identity Protection, Provisioning), Microsoft Graph Activity, and Spring Apps logs. ## Requirements diff --git a/packages/azure/_dev/build/docs/graphactivitylogs.md b/packages/azure/_dev/build/docs/graphactivitylogs.md new file mode 100644 index 00000000000..7a93a6faef9 --- /dev/null +++ b/packages/azure/_dev/build/docs/graphactivitylogs.md @@ -0,0 +1,84 @@ +# Microsoft Graph Activity Logs + +Microsoft Graph Activity Logs provide an audit trail of all HTTP requests that the Microsoft Graph service has received and processed for a tenant. Microsoft Graph Activity Logs gives full visibility into all transactions made by applications and other API clients that you have consented to in the tenant. Refer to [Microsoft Graph Activity Common Usecases](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#common-use-cases-for-microsoft-graph-activity-logs) for more use cases. + +Tenant administrators can configure the collection and storage destinations of Microsoft Graph Activity Logs through Diagnostic Setting in the Entra Portal. This integration uses Azure Event Hubs destination to stream Microsoft Graph Activity Logs to Elastic. + +## Requirements and Setup + +### Prerequisites + +Following privileges are required to collect Microsoft Graph Activity Logs: +- A Microsoft Entra ID P1 or P2 tenant license in your tenant. +- A `Security Administrator` or `Global Administrator` Microsoft Entra ID role to configure the diagnostic settings. +Refer to [Microsoft Graph Prerequisites](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#prerequisites) for more information on required privileges. + +### Setup + +Refer to the [Azure Logs](https://docs.elastic.co/integrations/azure) page for more information about setting up and using this integration. + +### Limitations + +- Activities of multi-tenant applications belonging to another tenant are not available. +- In few rare cases, events might take up to 2 hours to be delivered to Event Hubs. +Refer to [Microsoft Graph Activity Limitations](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#limitations) for more information. + +## Settings + +`eventhub` : + _string_ +It is a fully managed, real-time data ingestion service. Elastic recommends using only letters, numbers, and the hyphen (-) character for Event Hub names to maximize compatibility. You _can_ use existing Event Hubs having underscores (_) in the Event Hub name; in this case, the integration will replace underscores with hyphens (-) when it uses the Event Hub name to create dependent Azure resources behind the scenes (e.g., the storage account container to store Event Hub consumer offsets). Elastic also recommends using a separate event hub for each log type as the field mappings of each log type differ. +Default value `insights-operational-logs`. + +`consumer_group` : +_string_ + The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. A consumer group is a view (state, position, or offset) of an entire event hub. Consumer groups enable multiple consuming applications to each have a separate view of the event stream, and to read the stream independently at their own pace and with their own offsets. +Default value: `$Default` + +`connection_string` : +_string_ +The connection string required to communicate with Event Hubs, steps [here](https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-get-connection-string). + +A Blob Storage account is required in order to store/retrieve/update the offset or state of the eventhub messages. This means that after stopping the filebeat azure module it can start back up at the spot that it stopped processing messages. + +`storage_account` : +_string_ +The name of the storage account the state/offsets will be stored and updated. + +`storage_account_key` : +_string_ +The storage account key, this key will be used to authorize access to data in your storage account. + +`storage_account_container` : +_string_ +The storage account container where the integration stores the checkpoint data for the consumer group. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for each Azure log type (activity, sign-in, audit logs, and others). DO NOT REUSE the same container name for more than one Azure log type. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. + +`resource_manager_endpoint` : +_string_ +Optional, by default we are using the azure public environment, to override, users can provide a specific resource manager endpoint in order to use a different Azure environment. + +Resource manager endpoints: + +```text +# Azure ChinaCloud +https://management.chinacloudapi.cn/ + +# Azure GermanCloud +https://management.microsoftazure.de/ + +# Azure PublicCloud +https://management.azure.com/ + +# Azure USGovernmentCloud +https://management.usgovcloudapi.net/ +``` + +## Logs + +### graphactivitylogs + +The `graphactivitylogs` data stream of the Azure Logs package will collect Microsoft Graph activity events that have been streamed through an azure event hub. + +{{event "graphactivitylogs"}} + +{{fields "graphactivitylogs"}} diff --git a/packages/azure/changelog.yml b/packages/azure/changelog.yml index 88337cd3d65..44965576872 100644 --- a/packages/azure/changelog.yml +++ b/packages/azure/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.10.0" + changes: + - description: Add Microsoft Graph Activity Logs + type: enhancement + link: https://github.com/elastic/integrations/pull/9314 - version: "1.9.2" changes: - description: Add docs for running the integration behind a firewall. diff --git a/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log new file mode 100644 index 00000000000..bbd6318d87a --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log @@ -0,0 +1,5 @@ +{"Level":4,"callerIpAddress":"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6","category":"MicrosoftGraphActivityLogs","correlationId":"f7739da0-e6d1-4e3f-985a-64937fbge347","durationMs":462680,"location":"West Europe","operationName":"Microsoft Graph Activity","operationVersion":"v1.0","properties":{"apiVersion":"v1.0","appId":"a5a68e12-268a-3c91-a5e2-b9254e67hb29","atContent":"","clientAuthMethod":"2","clientRequestId":"2fe56789-a848-4c93-9d2c-5675972aejk9","durationMs":462680,"identityProvider":"https://sts.windows.net/a140785b-418d-4344-a4ec-8e9648919gdb/","ipAddress":"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6","location":"West Europe","operationId":"f7739da0-e6d1-4e3f-985a-64937fbge347","requestId":"f7739da0-e6d1-4e3f-985a-64937fbge347","requestMethod":"GET","requestUri":"https://graph.microsoft.com/v1.0/organization/a140785b-418d-4344-a4ec-8e9648919gdb?$select=Id,DisplayName,CreatedDateTime,ReplicationScope,Country,CountryLetterCode,DataBoundary","responseSizeBytes":364,"responseStatusCode":200,"roles":"Organization.Read.All User.Read.All","scopes":null,"servicePrincipalId":"f2aq4c71-31e3-5066-92g3-4b3dfbav50f0","signInActivityId":"sign-in_ActivityId","tenantId":"a140785b-418d-4344-a4ec-8e9648919gdb","timeGenerated":"2024-03-07T11:47:00.6442361Z","tokenIssuedAt":"2024-03-07T11:42:00Z","userAgent":"python-requests/2.27.1","userId":null,"wids":"1997b4d3-0g8d-90cb-bhj8-d89n3121e90"},"resourceId":"/TENANTS/A140785B-418D-4344-A4EC-8E9648919GDB/PROVIDERS/MICROSOFT.AADIAM","resultSignature":"200","tenantId":"a140785b-418d-4344-a4ec-8e9648919gdb","time":"2024-03-07T11:47:00.6442361Z"} +{"Level":4,"callerIpAddress":"81.2.69.143","category":"MicrosoftGraphActivityLogs","correlationId":"f7739jk0-e6d1-4e3f-985a-64937fbge367","durationMs":453011,"location":"Germany West Central","operationName":"Microsoft Graph Activity","operationVersion":"v1.0","properties":{"apiVersion":"v1.0","appId":"a5a68e12-268a-3c91-a5e2-b9254e67hb29","atContent":"","clientAuthMethod":"2","clientRequestId":"2fe56790-a848-4c83-9d2c-5675972aejk9","durationMs":453011,"identityProvider":"https://sts.windows.net/aa30985b-427d-4434-b4dc-8f9040719adb/","ipAddress":"81.2.69.143","location":"Germany West Central","operationId":"f7739jk0-e6d1-4e3f-985a-64937fbge367","requestId":"f7739jk0-e6d1-4e3f-985a-64937fbge367","requestMethod":"GET","requestUri":"https://graph.microsoft.com/v1.0/me/photos/96x96/$value","responseSizeBytes":294,"responseStatusCode":404,"roles":null,"scopes":"email openid Organization.Read.All Policy.ReadWrite.ApplicationConfiguration profile User.Read","servicePrincipalId":null,"signInActivityId":"sign-in_ActivityId","tenantId":"aa30985b-427d-4434-b4dc-8f9040719adb","timeGenerated":"2024-03-07T10:35:31.9597832Z","tokenIssuedAt":"2024-03-07T10:30:30Z","userAgent":"","userId":"b37ec517-0a34-4266-b627-f7bb0d679d70","wids":"1997b4d3-0g8d-90cb-bhj5-d80n3122e98 1997b4d3-0f8d-76cb-bhj5-d80n3122e98"},"resourceId":"/TENANTS/AA30985B-427D-4434-B4DC-8F9040719ADB/PROVIDERS/MICROSOFT.AADIAM","resultSignature":"404","tenantId":"aa30985b-427d-4434-b4dc-8f9040719adb","time":"2024-03-07T10:35:31.9597832Z"} +{"Level":4,"callerIpAddress":"81.2.69.144","category":"MicrosoftGraphActivityLogs","correlationId":"f7739da0-e6d1-4e3f-875a-64934fbge347","durationMs":16688471,"location":"UK South","operationName":"Microsoft Graph Activity","operationVersion":"beta","properties":{"apiVersion":"beta","appId":"a5a68e12-268a-3c91-a5f2-b9254e67hb28","atContent":"","clientAuthMethod":"0","clientRequestId":"2fe56789-a848-4c93-9s2c-5675972aghk9","durationMs":16688471,"identityProvider":null,"ipAddress":"81.2.69.144","location":"UK South","operationId":"f7739da0-e6d1-4e3f-875a-64934fbge347","requestId":"f7739da0-e6d1-4e3f-875a-64934fbge347","requestMethod":"GET","requestUri":"https://graph.microsoft.com/beta//users/7ef3c2ad-d52l-4a89-8cf9-c30178181027/photos/48x48/$value","responseSizeBytes":0,"responseStatusCode":404,"roles":null,"scopes":"AdministrativeUnit.ReadWrite.All AuditLog.Read.All Directory.AccessAsUser.All Directory.Write.Restricted email openid Organization.Read.All Policy.ReadWrite.Authorization profile User.EnableDisableAccount.All User.ReadWrite.All","servicePrincipalId":null,"signInActivityId":"signin_ActivityId","tenantId":"ab47545b-420e-46fg-c4dc-8f7697k1aadb","timeGenerated":"2024-03-07T16:42:22.84914Z","tokenIssuedAt":"2024-03-07T16:37:20Z","userAgent":"","userId":"285e0849-a706-4a9a-9eb1-f4e21cc78793","wids":"1997b4d3-0g8d-90cb-bhj5-d80n3122e98 1997b4d3-0g8d-90cb-bhj5-d80n3122e99 1997b4d3-0g8d-90cb-bhj5-d80n3122e80 1997b4d3-0g8d-90cb-bhj5-d80n3122e83"},"resourceId":"/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM","resultSignature":"404","tenantId":"ab47545b-420e-46fg-c4dc-8f7697k1aadb","time":"2024-03-07T16:42:22.8491400Z"} +{"Level":4,"callerIpAddress":"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6","category":"MicrosoftGraphActivityLogs","correlationId":"f7749da0-e6g1-4f3f-975a-64937fbge347","durationMs":846544,"location":"UK South","operationName":"Microsoft Graph Activity","operationVersion":"beta","properties":{"apiVersion":"beta","appId":"a5a68e32-269a-3c91-a5e2-b9254e67hb29","atContent":"","clientAuthMethod":"0","clientRequestId":"2fe56789-a848-4c93-9d2d-5675972ardk9","durationMs":846544,"identityProvider":null,"ipAddress":"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6","location":"UK South","operationId":"f7749da0-e6g1-4f3f-975a-64937fbge347","requestId":"f7749da0-e6g1-4f3f-975a-64937fbge347","requestMethod":"GET","requestUri":"https://graph.microsoft.com/beta/devices?$select=displayName,id,deviceId\\u0026$search=%22displayName:a%22\\u0026$top=30","responseSizeBytes":0,"responseStatusCode":200,"roles":null,"scopes":"AccessReview.ReadWrite.All AuditLog.Read.All ChangeManagement.Read.All ConsentRequest.Create ConsentRequest.Read ConsentRequest.ReadApprove.All ConsentRequest.ReadWrite.All CustomSecAttributeAuditLogs.Read.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All Directory.Write.Restricted DirectoryRecommendations.Read.All DirectoryRecommendations.ReadWrite.All email EntitlementManagement.Read.All Group.ReadWrite.All IdentityProvider.ReadWrite.All IdentityRiskEvent.ReadWrite.All IdentityRiskyServicePrincipal.ReadWrite.All IdentityRiskyUser.ReadWrite.All IdentityUserFlow.Read.All LifecycleWorkflows.ReadWrite.All openid Policy.Read.All Policy.Read.IdentityProtection Policy.ReadWrite.AuthenticationFlows Policy.ReadWrite.AuthenticationMethod Policy.ReadWrite.ConditionalAccess Policy.ReadWrite.ExternalIdentities Policy.ReadWrite.IdentityProtection Policy.ReadWrite.MobilityManagement profile Reports.Read.All RoleManagement.ReadWrite.Directory RoleManagement.ReadWrite.Exchange SecurityEvents.ReadWrite.All TrustFrameworkKeySet.Read.All User.Export.All User.ReadWrite.All UserAuthenticationMethod.ReadWrite.All","servicePrincipalId":null,"signInActivityId":"signin_Activity-Id","tenantId":"ab47545b-420e-46fg-c4dc-8f7697k1aadb","timeGenerated":"2024-03-07T16:42:12.0485843Z","tokenIssuedAt":"2024-03-07T16:36:51Z","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0","userId":"285e0849-a706-4a9a-9eb1-f4e21cc78793","wids":"a207b4d3-0g8d-90cb-bhj5-d80n3122e67 a207b4d3-0g8d-90cb-bhj5-d80n3122e69 a207b4d3-0g8d-90cb-bhj5-d80n3122e89"},"resourceId":"/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM","resultSignature":"200","tenantId":"ab47545b-420e-46fg-c4dc-8f7697k1aadb","time":"2024-03-07T16:42:12.0485843Z"} +{"Level":4,"callerIpAddress":"81.2.69.143","category":"MicrosoftGraphActivityLogs","correlationId":"f7839da0-e7d1-4e4f-985a-64937fbge347","durationMs":1100725,"location":"France Central","operationName":"Microsoft Graph Activity","operationVersion":"v1.0","properties":{"apiVersion":"v1.0","appId":"a5a68e32-269a-3c91-a5e2-b9254e67hb29","atContent":"","clientAuthMethod":"2","clientRequestId":"2fe58790-a848-4a93-9d2c-5645972aejk9","durationMs":1100725,"identityProvider":"https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/","ipAddress":"81.2.69.143","location":"France Central","operationId":"f7839da0-e7d1-4e4f-985a-64937fbge347","requestId":"f7839da0-e7d1-4e4f-985a-64937fbge347","requestMethod":"GET","requestUri":"https://graph.microsoft.com/v1.0/directoryRoles","responseSizeBytes":4300,"responseStatusCode":200,"roles":"Application.Read.All Domain.Read.All GroupMember.Read.All LicenseAssignment.ReadWrite.All Organization.Read.All Policy.Read.ConditionalAccess RoleManagement.Read.Directory Team.ReadBasic.All TeamsTab.Create TeamsTab.Read.All TeamsTab.ReadWrite.All User.Read.All","scopes":null,"servicePrincipalId":"f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg","signInActivityId":"sign-in_ActivityId","tenantId":"ab30785b-417f-42a4-b5dc-8f9051718acb","timeGenerated":"2024-03-07T10:24:44.7939418Z","tokenIssuedAt":"2024-03-07T10:19:44Z","userAgent":"","userId":null,"wids":"a207b4d3-0g8d-90cb-bhj5-d80n3121e69"},"resourceId":"/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM","resultSignature":"200","tenantId":"ab30785b-417f-42a4-b5dc-8f9051718acb","time":"2024-03-07T10:24:44.7939418Z"} \ No newline at end of file diff --git a/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log-expected.json b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log-expected.json new file mode 100644 index 00000000000..ce88adad1e6 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-activitylogs-raw.log-expected.json @@ -0,0 +1,708 @@ +{ + "expected": [ + { + "@timestamp": "2024-03-07T11:47:00.644Z", + "azure": { + "correlation_id": "f7739da0-e6d1-4e3f-985a-64937fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "v1.0", + "properties": { + "api_version": "v1.0", + "app_id": "a5a68e12-268a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 2, + "client_request_id": "2fe56789-a848-4c93-9d2c-5675972aejk9", + "identity_provider": "https://sts.windows.net/a140785b-418d-4344-a4ec-8e9648919gdb/", + "operation_id": "f7739da0-e6d1-4e3f-985a-64937fbge347", + "roles": [ + "Organization.Read.All", + "User.Read.All" + ], + "service_principal_id": "f2aq4c71-31e3-5066-92g3-4b3dfbav50f0", + "sign_in_activity_id": "sign-in_ActivityId", + "time_generated": "2024-03-07T11:47:00.644Z", + "token_issued_at": "2024-03-07T11:42:00.000Z", + "wids": [ + "1997b4d3-0g8d-90cb-bhj8-d89n3121e90" + ] + }, + "result_signature": "200" + }, + "resource": { + "id": "/TENANTS/A140785B-418D-4344-A4EC-8E9648919GDB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "a140785b-418d-4344-a4ec-8e9648919gdb" + }, + "client": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6" + }, + "cloud": { + "account": { + "id": "a140785b-418d-4344-a4ec-8e9648919gdb" + }, + "provider": "azure", + "region": "West Europe", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "West Europe" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": -1176467968, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7739da0-e6d1-4e3f-985a-64937fbge347\",\"durationMs\":462680,\"location\":\"West Europe\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"v1.0\",\"properties\":{\"apiVersion\":\"v1.0\",\"appId\":\"a5a68e12-268a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"2\",\"clientRequestId\":\"2fe56789-a848-4c93-9d2c-5675972aejk9\",\"durationMs\":462680,\"identityProvider\":\"https://sts.windows.net/a140785b-418d-4344-a4ec-8e9648919gdb/\",\"ipAddress\":\"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6\",\"location\":\"West Europe\",\"operationId\":\"f7739da0-e6d1-4e3f-985a-64937fbge347\",\"requestId\":\"f7739da0-e6d1-4e3f-985a-64937fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/v1.0/organization/a140785b-418d-4344-a4ec-8e9648919gdb?$select=Id,DisplayName,CreatedDateTime,ReplicationScope,Country,CountryLetterCode,DataBoundary\",\"responseSizeBytes\":364,\"responseStatusCode\":200,\"roles\":\"Organization.Read.All User.Read.All\",\"scopes\":null,\"servicePrincipalId\":\"f2aq4c71-31e3-5066-92g3-4b3dfbav50f0\",\"signInActivityId\":\"sign-in_ActivityId\",\"tenantId\":\"a140785b-418d-4344-a4ec-8e9648919gdb\",\"timeGenerated\":\"2024-03-07T11:47:00.6442361Z\",\"tokenIssuedAt\":\"2024-03-07T11:42:00Z\",\"userAgent\":\"python-requests/2.27.1\",\"userId\":null,\"wids\":\"1997b4d3-0g8d-90cb-bhj8-d89n3121e90\"},\"resourceId\":\"/TENANTS/A140785B-418D-4344-A4EC-8E9648919GDB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"200\",\"tenantId\":\"a140785b-418d-4344-a4ec-8e9648919gdb\",\"time\":\"2024-03-07T11:47:00.6442361Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7739da0-e6d1-4e3f-985a-64937fbge347", + "method": "GET" + }, + "response": { + "bytes": 364, + "status_code": 200 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6" + ] + }, + "source": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "extension": "0/organization/a140785b-418d-4344-a4ec-8e9648919gdb", + "original": "https://graph.microsoft.com/v1.0/organization/a140785b-418d-4344-a4ec-8e9648919gdb?$select=Id,DisplayName,CreatedDateTime,ReplicationScope,Country,CountryLetterCode,DataBoundary", + "path": "/v1.0/organization/a140785b-418d-4344-a4ec-8e9648919gdb", + "query": "$select=Id,DisplayName,CreatedDateTime,ReplicationScope,Country,CountryLetterCode,DataBoundary", + "scheme": "https" + }, + "user_agent": { + "device": { + "name": "Other" + }, + "name": "Python Requests", + "original": "python-requests/2.27.1", + "version": "2.27" + } + }, + { + "@timestamp": "2024-03-07T10:35:31.959Z", + "azure": { + "correlation_id": "f7739jk0-e6d1-4e3f-985a-64937fbge367", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "v1.0", + "properties": { + "api_version": "v1.0", + "app_id": "a5a68e12-268a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 2, + "client_request_id": "2fe56790-a848-4c83-9d2c-5675972aejk9", + "identity_provider": "https://sts.windows.net/aa30985b-427d-4434-b4dc-8f9040719adb/", + "operation_id": "f7739jk0-e6d1-4e3f-985a-64937fbge367", + "scopes": [ + "email", + "openid", + "Organization.Read.All", + "Policy.ReadWrite.ApplicationConfiguration", + "profile", + "User.Read" + ], + "sign_in_activity_id": "sign-in_ActivityId", + "time_generated": "2024-03-07T10:35:31.959Z", + "token_issued_at": "2024-03-07T10:30:30.000Z", + "wids": [ + "1997b4d3-0g8d-90cb-bhj5-d80n3122e98", + "1997b4d3-0f8d-76cb-bhj5-d80n3122e98" + ] + }, + "result_signature": "404" + }, + "resource": { + "id": "/TENANTS/AA30985B-427D-4434-B4DC-8F9040719ADB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "aa30985b-427d-4434-b4dc-8f9040719adb" + }, + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143", + "user": { + "id": "b37ec517-0a34-4266-b627-f7bb0d679d70" + } + }, + "cloud": { + "account": { + "id": "aa30985b-427d-4434-b4dc-8f9040719adb" + }, + "provider": "azure", + "region": "Germany West Central", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "Germany West Central" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": 2039433920, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"81.2.69.143\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7739jk0-e6d1-4e3f-985a-64937fbge367\",\"durationMs\":453011,\"location\":\"Germany West Central\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"v1.0\",\"properties\":{\"apiVersion\":\"v1.0\",\"appId\":\"a5a68e12-268a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"2\",\"clientRequestId\":\"2fe56790-a848-4c83-9d2c-5675972aejk9\",\"durationMs\":453011,\"identityProvider\":\"https://sts.windows.net/aa30985b-427d-4434-b4dc-8f9040719adb/\",\"ipAddress\":\"81.2.69.143\",\"location\":\"Germany West Central\",\"operationId\":\"f7739jk0-e6d1-4e3f-985a-64937fbge367\",\"requestId\":\"f7739jk0-e6d1-4e3f-985a-64937fbge367\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/v1.0/me/photos/96x96/$value\",\"responseSizeBytes\":294,\"responseStatusCode\":404,\"roles\":null,\"scopes\":\"email openid Organization.Read.All Policy.ReadWrite.ApplicationConfiguration profile User.Read\",\"servicePrincipalId\":null,\"signInActivityId\":\"sign-in_ActivityId\",\"tenantId\":\"aa30985b-427d-4434-b4dc-8f9040719adb\",\"timeGenerated\":\"2024-03-07T10:35:31.9597832Z\",\"tokenIssuedAt\":\"2024-03-07T10:30:30Z\",\"userAgent\":\"\",\"userId\":\"b37ec517-0a34-4266-b627-f7bb0d679d70\",\"wids\":\"1997b4d3-0g8d-90cb-bhj5-d80n3122e98 1997b4d3-0f8d-76cb-bhj5-d80n3122e98\"},\"resourceId\":\"/TENANTS/AA30985B-427D-4434-B4DC-8F9040719ADB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"404\",\"tenantId\":\"aa30985b-427d-4434-b4dc-8f9040719adb\",\"time\":\"2024-03-07T10:35:31.9597832Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7739jk0-e6d1-4e3f-985a-64937fbge367", + "method": "GET" + }, + "response": { + "bytes": 294, + "status_code": 404 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "81.2.69.143" + ], + "user": [ + "b37ec517-0a34-4266-b627-f7bb0d679d70" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "extension": "0/me/photos/96x96/$value", + "original": "https://graph.microsoft.com/v1.0/me/photos/96x96/$value", + "path": "/v1.0/me/photos/96x96/$value", + "scheme": "https" + }, + "user": { + "id": "b37ec517-0a34-4266-b627-f7bb0d679d70" + } + }, + { + "@timestamp": "2024-03-07T16:42:22.849Z", + "azure": { + "correlation_id": "f7739da0-e6d1-4e3f-875a-64934fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "beta", + "properties": { + "api_version": "beta", + "app_id": "a5a68e12-268a-3c91-a5f2-b9254e67hb28", + "client_auth_method": 0, + "client_request_id": "2fe56789-a848-4c93-9s2c-5675972aghk9", + "operation_id": "f7739da0-e6d1-4e3f-875a-64934fbge347", + "scopes": [ + "AdministrativeUnit.ReadWrite.All", + "AuditLog.Read.All", + "Directory.AccessAsUser.All", + "Directory.Write.Restricted", + "email", + "openid", + "Organization.Read.All", + "Policy.ReadWrite.Authorization", + "profile", + "User.EnableDisableAccount.All", + "User.ReadWrite.All" + ], + "sign_in_activity_id": "signin_ActivityId", + "time_generated": "2024-03-07T16:42:22.849Z", + "token_issued_at": "2024-03-07T16:37:20.000Z", + "wids": [ + "1997b4d3-0g8d-90cb-bhj5-d80n3122e98", + "1997b4d3-0g8d-90cb-bhj5-d80n3122e99", + "1997b4d3-0g8d-90cb-bhj5-d80n3122e80", + "1997b4d3-0g8d-90cb-bhj5-d80n3122e83" + ] + }, + "result_signature": "404" + }, + "resource": { + "id": "/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "ab47545b-420e-46fg-c4dc-8f7697k1aadb" + }, + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144", + "user": { + "id": "285e0849-a706-4a9a-9eb1-f4e21cc78793" + } + }, + "cloud": { + "account": { + "id": "ab47545b-420e-46fg-c4dc-8f7697k1aadb" + }, + "provider": "azure", + "region": "UK South", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "UK South" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": -1771912256, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"81.2.69.144\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7739da0-e6d1-4e3f-875a-64934fbge347\",\"durationMs\":16688471,\"location\":\"UK South\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"beta\",\"properties\":{\"apiVersion\":\"beta\",\"appId\":\"a5a68e12-268a-3c91-a5f2-b9254e67hb28\",\"atContent\":\"\",\"clientAuthMethod\":\"0\",\"clientRequestId\":\"2fe56789-a848-4c93-9s2c-5675972aghk9\",\"durationMs\":16688471,\"identityProvider\":null,\"ipAddress\":\"81.2.69.144\",\"location\":\"UK South\",\"operationId\":\"f7739da0-e6d1-4e3f-875a-64934fbge347\",\"requestId\":\"f7739da0-e6d1-4e3f-875a-64934fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/beta//users/7ef3c2ad-d52l-4a89-8cf9-c30178181027/photos/48x48/$value\",\"responseSizeBytes\":0,\"responseStatusCode\":404,\"roles\":null,\"scopes\":\"AdministrativeUnit.ReadWrite.All AuditLog.Read.All Directory.AccessAsUser.All Directory.Write.Restricted email openid Organization.Read.All Policy.ReadWrite.Authorization profile User.EnableDisableAccount.All User.ReadWrite.All\",\"servicePrincipalId\":null,\"signInActivityId\":\"signin_ActivityId\",\"tenantId\":\"ab47545b-420e-46fg-c4dc-8f7697k1aadb\",\"timeGenerated\":\"2024-03-07T16:42:22.84914Z\",\"tokenIssuedAt\":\"2024-03-07T16:37:20Z\",\"userAgent\":\"\",\"userId\":\"285e0849-a706-4a9a-9eb1-f4e21cc78793\",\"wids\":\"1997b4d3-0g8d-90cb-bhj5-d80n3122e98 1997b4d3-0g8d-90cb-bhj5-d80n3122e99 1997b4d3-0g8d-90cb-bhj5-d80n3122e80 1997b4d3-0g8d-90cb-bhj5-d80n3122e83\"},\"resourceId\":\"/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"404\",\"tenantId\":\"ab47545b-420e-46fg-c4dc-8f7697k1aadb\",\"time\":\"2024-03-07T16:42:22.8491400Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7739da0-e6d1-4e3f-875a-64934fbge347", + "method": "GET" + }, + "response": { + "bytes": 0, + "status_code": 404 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "user": [ + "285e0849-a706-4a9a-9eb1-f4e21cc78793" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "original": "https://graph.microsoft.com/beta//users/7ef3c2ad-d52l-4a89-8cf9-c30178181027/photos/48x48/$value", + "path": "/beta//users/7ef3c2ad-d52l-4a89-8cf9-c30178181027/photos/48x48/$value", + "scheme": "https" + }, + "user": { + "id": "285e0849-a706-4a9a-9eb1-f4e21cc78793" + } + }, + { + "@timestamp": "2024-03-07T16:42:12.048Z", + "azure": { + "correlation_id": "f7749da0-e6g1-4f3f-975a-64937fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "beta", + "properties": { + "api_version": "beta", + "app_id": "a5a68e32-269a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 0, + "client_request_id": "2fe56789-a848-4c93-9d2d-5675972ardk9", + "operation_id": "f7749da0-e6g1-4f3f-975a-64937fbge347", + "scopes": [ + "AccessReview.ReadWrite.All", + "AuditLog.Read.All", + "ChangeManagement.Read.All", + "ConsentRequest.Create", + "ConsentRequest.Read", + "ConsentRequest.ReadApprove.All", + "ConsentRequest.ReadWrite.All", + "CustomSecAttributeAuditLogs.Read.All", + "Directory.AccessAsUser.All", + "Directory.Read.All", + "Directory.ReadWrite.All", + "Directory.Write.Restricted", + "DirectoryRecommendations.Read.All", + "DirectoryRecommendations.ReadWrite.All", + "email", + "EntitlementManagement.Read.All", + "Group.ReadWrite.All", + "IdentityProvider.ReadWrite.All", + "IdentityRiskEvent.ReadWrite.All", + "IdentityRiskyServicePrincipal.ReadWrite.All", + "IdentityRiskyUser.ReadWrite.All", + "IdentityUserFlow.Read.All", + "LifecycleWorkflows.ReadWrite.All", + "openid", + "Policy.Read.All", + "Policy.Read.IdentityProtection", + "Policy.ReadWrite.AuthenticationFlows", + "Policy.ReadWrite.AuthenticationMethod", + "Policy.ReadWrite.ConditionalAccess", + "Policy.ReadWrite.ExternalIdentities", + "Policy.ReadWrite.IdentityProtection", + "Policy.ReadWrite.MobilityManagement", + "profile", + "Reports.Read.All", + "RoleManagement.ReadWrite.Directory", + "RoleManagement.ReadWrite.Exchange", + "SecurityEvents.ReadWrite.All", + "TrustFrameworkKeySet.Read.All", + "User.Export.All", + "User.ReadWrite.All", + "UserAuthenticationMethod.ReadWrite.All" + ], + "sign_in_activity_id": "signin_Activity-Id", + "time_generated": "2024-03-07T16:42:12.048Z", + "token_issued_at": "2024-03-07T16:36:51.000Z", + "wids": [ + "a207b4d3-0g8d-90cb-bhj5-d80n3122e67", + "a207b4d3-0g8d-90cb-bhj5-d80n3122e69", + "a207b4d3-0g8d-90cb-bhj5-d80n3122e89" + ] + }, + "result_signature": "200" + }, + "resource": { + "id": "/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "ab47545b-420e-46fg-c4dc-8f7697k1aadb" + }, + "client": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6", + "user": { + "id": "285e0849-a706-4a9a-9eb1-f4e21cc78793" + } + }, + "cloud": { + "account": { + "id": "ab47545b-420e-46fg-c4dc-8f7697k1aadb" + }, + "provider": "azure", + "region": "UK South", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "UK South" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": 435442688, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7749da0-e6g1-4f3f-975a-64937fbge347\",\"durationMs\":846544,\"location\":\"UK South\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"beta\",\"properties\":{\"apiVersion\":\"beta\",\"appId\":\"a5a68e32-269a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"0\",\"clientRequestId\":\"2fe56789-a848-4c93-9d2d-5675972ardk9\",\"durationMs\":846544,\"identityProvider\":null,\"ipAddress\":\"2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6\",\"location\":\"UK South\",\"operationId\":\"f7749da0-e6g1-4f3f-975a-64937fbge347\",\"requestId\":\"f7749da0-e6g1-4f3f-975a-64937fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/beta/devices?$select=displayName,id,deviceId\\\\u0026$search=%22displayName:a%22\\\\u0026$top=30\",\"responseSizeBytes\":0,\"responseStatusCode\":200,\"roles\":null,\"scopes\":\"AccessReview.ReadWrite.All AuditLog.Read.All ChangeManagement.Read.All ConsentRequest.Create ConsentRequest.Read ConsentRequest.ReadApprove.All ConsentRequest.ReadWrite.All CustomSecAttributeAuditLogs.Read.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All Directory.Write.Restricted DirectoryRecommendations.Read.All DirectoryRecommendations.ReadWrite.All email EntitlementManagement.Read.All Group.ReadWrite.All IdentityProvider.ReadWrite.All IdentityRiskEvent.ReadWrite.All IdentityRiskyServicePrincipal.ReadWrite.All IdentityRiskyUser.ReadWrite.All IdentityUserFlow.Read.All LifecycleWorkflows.ReadWrite.All openid Policy.Read.All Policy.Read.IdentityProtection Policy.ReadWrite.AuthenticationFlows Policy.ReadWrite.AuthenticationMethod Policy.ReadWrite.ConditionalAccess Policy.ReadWrite.ExternalIdentities Policy.ReadWrite.IdentityProtection Policy.ReadWrite.MobilityManagement profile Reports.Read.All RoleManagement.ReadWrite.Directory RoleManagement.ReadWrite.Exchange SecurityEvents.ReadWrite.All TrustFrameworkKeySet.Read.All User.Export.All User.ReadWrite.All UserAuthenticationMethod.ReadWrite.All\",\"servicePrincipalId\":null,\"signInActivityId\":\"signin_Activity-Id\",\"tenantId\":\"ab47545b-420e-46fg-c4dc-8f7697k1aadb\",\"timeGenerated\":\"2024-03-07T16:42:12.0485843Z\",\"tokenIssuedAt\":\"2024-03-07T16:36:51Z\",\"userAgent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0\",\"userId\":\"285e0849-a706-4a9a-9eb1-f4e21cc78793\",\"wids\":\"a207b4d3-0g8d-90cb-bhj5-d80n3122e67 a207b4d3-0g8d-90cb-bhj5-d80n3122e69 a207b4d3-0g8d-90cb-bhj5-d80n3122e89\"},\"resourceId\":\"/TENANTS/AB47545B-420E-46FG-C4DC-8F7697K1AADB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"200\",\"tenantId\":\"ab47545b-420e-46fg-c4dc-8f7697k1aadb\",\"time\":\"2024-03-07T16:42:12.0485843Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7749da0-e6g1-4f3f-975a-64937fbge347", + "method": "GET" + }, + "response": { + "bytes": 0, + "status_code": 200 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6" + ], + "user": [ + "285e0849-a706-4a9a-9eb1-f4e21cc78793" + ] + }, + "source": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "original": "https://graph.microsoft.com/beta/devices?$select=displayName,id,deviceId\\u0026$search=%22displayName:a%22\\u0026$top=30", + "path": "/beta/devices", + "query": "$select=displayName,id,deviceId\\u0026$search=%22displayName:a%22\\u0026$top=30", + "scheme": "https" + }, + "user": { + "id": "285e0849-a706-4a9a-9eb1-f4e21cc78793" + }, + "user_agent": { + "device": { + "name": "Other" + }, + "name": "Edge", + "original": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0", + "os": { + "full": "Windows 10", + "name": "Windows", + "version": "10" + }, + "version": "122.0.0.0" + } + }, + { + "@timestamp": "2024-03-07T10:24:44.793Z", + "azure": { + "correlation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "v1.0", + "properties": { + "api_version": "v1.0", + "app_id": "a5a68e32-269a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 2, + "client_request_id": "2fe58790-a848-4a93-9d2c-5645972aejk9", + "identity_provider": "https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/", + "operation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "roles": [ + "Application.Read.All", + "Domain.Read.All", + "GroupMember.Read.All", + "LicenseAssignment.ReadWrite.All", + "Organization.Read.All", + "Policy.Read.ConditionalAccess", + "RoleManagement.Read.Directory", + "Team.ReadBasic.All", + "TeamsTab.Create", + "TeamsTab.Read.All", + "TeamsTab.ReadWrite.All", + "User.Read.All" + ], + "service_principal_id": "f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg", + "sign_in_activity_id": "sign-in_ActivityId", + "time_generated": "2024-03-07T10:24:44.793Z", + "token_issued_at": "2024-03-07T10:19:44.000Z", + "wids": [ + "a207b4d3-0g8d-90cb-bhj5-d80n3121e69" + ] + }, + "result_signature": "200" + }, + "resource": { + "id": "/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "cloud": { + "account": { + "id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "provider": "azure", + "region": "France Central", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "France Central" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": 1213372224, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"81.2.69.143\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"durationMs\":1100725,\"location\":\"France Central\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"v1.0\",\"properties\":{\"apiVersion\":\"v1.0\",\"appId\":\"a5a68e32-269a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"2\",\"clientRequestId\":\"2fe58790-a848-4a93-9d2c-5645972aejk9\",\"durationMs\":1100725,\"identityProvider\":\"https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/\",\"ipAddress\":\"81.2.69.143\",\"location\":\"France Central\",\"operationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/v1.0/directoryRoles\",\"responseSizeBytes\":4300,\"responseStatusCode\":200,\"roles\":\"Application.Read.All Domain.Read.All GroupMember.Read.All LicenseAssignment.ReadWrite.All Organization.Read.All Policy.Read.ConditionalAccess RoleManagement.Read.Directory Team.ReadBasic.All TeamsTab.Create TeamsTab.Read.All TeamsTab.ReadWrite.All User.Read.All\",\"scopes\":null,\"servicePrincipalId\":\"f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg\",\"signInActivityId\":\"sign-in_ActivityId\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"timeGenerated\":\"2024-03-07T10:24:44.7939418Z\",\"tokenIssuedAt\":\"2024-03-07T10:19:44Z\",\"userAgent\":\"\",\"userId\":null,\"wids\":\"a207b4d3-0g8d-90cb-bhj5-d80n3121e69\"},\"resourceId\":\"/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"200\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"time\":\"2024-03-07T10:24:44.7939418Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "method": "GET" + }, + "response": { + "bytes": 4300, + "status_code": 200 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "81.2.69.143" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "extension": "0/directoryRoles", + "original": "https://graph.microsoft.com/v1.0/directoryRoles", + "path": "/v1.0/directoryRoles", + "scheme": "https" + } + } + ] +} \ No newline at end of file diff --git a/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 00000000000..4da22641654 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_original_event diff --git a/packages/azure/data_stream/graphactivitylogs/agent/stream/azure-eventhub.yml.hbs b/packages/azure/data_stream/graphactivitylogs/agent/stream/azure-eventhub.yml.hbs new file mode 100644 index 00000000000..c49f35bb0b4 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/agent/stream/azure-eventhub.yml.hbs @@ -0,0 +1,46 @@ +{{#if connection_string}} +connection_string: {{connection_string}} +{{/if}} +{{#if storage_account_container}} +storage_account_container: {{storage_account_container}} +{{else}} +{{#if eventhub}} +storage_account_container: filebeat-graphactivitylogs-{{eventhub}} +{{/if}} +{{/if}} +{{#if eventhub}} +eventhub: {{eventhub}} +{{/if}} +{{#if consumer_group}} +consumer_group: {{consumer_group}} +{{/if}} +{{#if storage_account}} +storage_account: {{storage_account}} +{{/if}} +{{#if storage_account_key}} +storage_account_key: {{storage_account_key}} +{{/if}} +{{#if resource_manager_endpoint}} +resource_manager_endpoint: {{resource_manager_endpoint}} +{{/if}} +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} +sanitize_options: +{{#if sanitize_newlines}} + - NEW_LINES +{{/if}} +{{#if sanitize_singlequotes}} + - SINGLE_QUOTES +{{/if}} diff --git a/packages/azure/data_stream/graphactivitylogs/agent/stream/log.yml.hbs b/packages/azure/data_stream/graphactivitylogs/agent/stream/log.yml.hbs new file mode 100644 index 00000000000..f7c4bb1e4d7 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/agent/stream/log.yml.hbs @@ -0,0 +1,19 @@ +paths: + {{#each paths as |path|}} +- {{path}} + {{/each}} +exclude_files: [".gz$"] +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/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/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml b/packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml new file mode 100644 index 00000000000..5dceb3d325b --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml @@ -0,0 +1,91 @@ +--- +description: Pipeline for parsing Azure shared log fields. +processors: + - set: + field: cloud.provider + value: azure + - grok: + field: azure.resource_id + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/NAMESPACES/%{NAMESPACE:azure.resource.namespace}/AUTHORIZATIONRULES/%{RULE:azure.resource.authorization_rule} + - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/namespaces/%{NAMESPACE:azure.resource.namespace}/authorizationRules/%{RULE:azure.resource.authorization_rule} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + GROUPID: .+ + PROVIDERNAME: .+ + NAMESPACE: .+ + RULE: .+ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + GROUPID: .+ + PROVIDERNAME: ([A-Za-z])\w+.([A-Za-z])\w+/([A-Za-z])\w+. + NAME: ((?!AUTHORIZATIONRULES).)*$ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + GROUPID: .+ + PROVIDERNAME: ([A-Za-z])\w+.([A-Za-z])\w+\/([A-Za-z][^\/])\w+ + NAME: .+ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /providers/%{PROVIDER:azure.resource.provider} + - /PROVIDERS/%{PROVIDER:azure.resource.provider} + pattern_definitions: + PROVIDER: .+ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider} + - /subscriptions/%{SUBID:azure.subscription_id}/providers/%{PROVIDERNAME:azure.resource.provider} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + PROVIDERNAME: ([A-Za-z])\w+.([A-Za-z])\w+\/([A-Za-z][^\/])\w+ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group} + - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + GROUPID: .+ + ignore_failure: true + - grok: + field: azure.resource_id + if: 'ctx.azure?.subscription_id == null' + patterns: + - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id} + - /subscriptions/%{SUBID:azure.subscription_id} + pattern_definitions: + SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} + ignore_failure: true + - rename: + field: azure.resource_id + target_field: azure.resource.id + ignore_missing: true + - lowercase: + field: event.outcome + ignore_missing: true +on_failure: + - set: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/default.yml b/packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..7cbacb283df --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,466 @@ +--- +description: Pipeline for parsing azure graph activity logs. +processors: + - set: + field: ecs.version + value: '8.0.0' + tag: set-ecs_version + - set: + field: event.kind + value: event + tag: set-event_kind + - append: + field: event.type + value: access + tag: append-event_type + - rename: + field: azure + target_field: azure-eventhub + ignore_missing: true + tag: rename-azure + - rename: + field: message + target_field: event.original + ignore_missing: true + if: 'ctx.event?.original == null' + tag: rename-message + 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.' + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' + tag: remove-message + - json: + field: event.original + target_field: azure.graphactivitylogs + tag: json-event_original + - script: + description: Convert Azure JSON keys to snake case. + tag: azure-json-keys-to-snake-case + lang: painless + source: | + Map keysToSnakeCase(Map m) { + def regex = /_?([a-z])([A-Z]+)/; + def out = [:]; + + for (entry in m.entrySet()) { + def k = entry.getKey(); + def v = entry.getValue(); + + if (v instanceof Map) { + v = keysToSnakeCase(v); + } else if (v instanceof List) { + for (int i = 0; i < v.size(); i++) { + def item = v.get(i); + if (item instanceof Map) { + v.set(i, keysToSnakeCase(item)); + } + } + } + + k = regex.matcher(k).replaceAll('$1_$2').toLowerCase(); + out.put(k, v); + } + + return out; + } + + ctx.azure['graphactivitylogs'] = keysToSnakeCase(ctx.azure.graphactivitylogs); + - date: + field: azure.graphactivitylogs.time + target_field: '@timestamp' + if: ctx.azure?.graphactivitylogs?.time != null + tag: date-time + formats: + - ISO8601 + - remove: + field: azure.graphactivitylogs.time + ignore_missing: true + tag: remove-time + - date: + field: azure.graphactivitylogs.properties.token_issued_at + target_field: azure.graphactivitylogs.properties.token_issued_at + if: ctx.azure?.graphactivitylogs?.properties?.token_issued_at != null + tag: date-token_issued_at + formats: + - ISO8601 + 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: azure.graphactivitylogs.resource_id + target_field: azure.resource_id + ignore_missing: true + tag: rename-resource_id + - convert: + field: azure.graphactivitylogs.caller_ip_address + target_field: source.ip + type: ip + ignore_missing: true + tag: convert-caller_ip_address + on_failure: + - rename: + field: azure.graphactivitylogs.caller_ip_address + target_field: source.address + ignore_missing: true + tag: rename-caller_ip_address + 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: azure.graphactivitylogs.properties.ip_address + target_field: source.ip + type: ip + ignore_missing: true + tag: convert-properties_ip_address + if: ctx.source?.ip == null + on_failure: + - rename: + field: azure.graphactivitylogs.properties.ip_address + target_field: source.address + ignore_missing: true + tag: rename-properties_ip_address + if: ctx.source?.address == null + 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}}}' + + - remove: + field: + - azure.graphactivitylogs.caller_ip_address + - azure.graphactivitylogs.properties.ip_address + if: 'ctx.source?.ip != null' + tag: remove-caller_ip_address + ignore_missing: true + - set: + field: client.ip + value: '{{source.ip}}' + tag: set-client_ip + ignore_empty_value: true + - append: + field: related.ip + tag: append-related_ip + value: '{{source.ip}}' + allow_duplicates: false + if: 'ctx.source?.ip != null' + - convert: + field: azure.graphactivitylogs.level + target_field: log.level + type: string + tag: convert-level + ignore_missing: true + - remove: + field: azure.graphactivitylogs.level + ignore_missing: true + tag: remove-level + - rename: + field: azure.graphactivitylogs.duration_ms + target_field: event.duration + if: ctx.azure?.graphactivitylogs?.duration_ms != null + tag: rename-duration_ms + - rename: + field: azure.graphactivitylogs.properties.duration_ms + target_field: event.duration + if: ctx.azure?.graphactivitylogs?.properties?.durationMs != null && ctx.event?.duration == null + tag: rename-properties-durationMs + - script: + lang: painless + source: | + if (ctx.event.duration!= null) { + ctx.event.duration = ctx.event.duration * 1000000; + } + ignore_failure: true + tag: script-duration + - remove: + field: + - azure.graphactivitylogs.duration_ms + - azure.graphactivitylogs.properties.duration_ms + tag: remove-duration_ms + if: ctx.event?.duration != null + ignore_missing: true + - rename: + field: azure.graphactivitylogs.location + target_field: destination.geo.region_name + ignore_missing: true + tag: rename-location + - rename: + field: azure.graphactivitylogs.properties.location + target_field: destination.geo.region_name + if: ctx.destination?.geo?.region_name == null && ctx.azure?.graphactivitylogs?.properties?.location != null + tag: rename-properties-location + - remove: + field: + - azure.graphactivitylogs.location + - azure.graphactivitylogs.properties.location + tag: remove-location + if: ctx.destination?.geo?.region_name != null + ignore_missing: true + - convert: + field: azure.graphactivitylogs.operation_name + target_field: event.action + type: string + ignore_missing: true + tag: convert-operation_name + 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: azure.graphactivitylogs.tenant_id + target_field: azure.tenant_id + ignore_missing: true + tag: rename-tenant_id + - rename: + field: azure.graphactivitylogs.properties.tenant_id + target_field: azure.tenant_id + ignore_missing: true + if: ctx.azure?.tenant_id == null + tag: rename-properties_tenant_id + - remove: + field: + - azure.graphactivitylogs.tenant_id + - azure.graphactivitylogs.properties.tenant_id + tag: remove-tenant_id + if: ctx.azure?.tenant_id != null + ignore_missing: true + - rename: + field: azure.graphactivitylogs.correlation_id + target_field: azure.correlation_id + ignore_missing: true + tag: rename-correlation_id + - rename: + field: azure.graphactivitylogs.properties.request_id + target_field: http.request.id + ignore_missing: true + tag: rename-properties_request_id + - rename: + field: azure.graphactivitylogs.properties.request_method + target_field: http.request.method + ignore_missing: true + tag: rename-properties_request_methods + - uri_parts: + field: azure.graphactivitylogs.properties.request_uri + if: ctx.azure?.graphactivitylogs?.properties?.request_uri != null + keep_original: true + tag: uri_parts-properties-request_uri + 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}}}' + - remove: + field: azure.graphactivitylogs.properties.request_uri + tag: remove-properties_request_uri + if: ctx.url?.original != null + ignore_missing: true + - rename: + field: azure.graphactivitylogs.properties.response_size_bytes + target_field: http.response.bytes + ignore_missing: true + tag: rename-properties_response_bytes + - rename: + field: azure.graphactivitylogs.properties.response_status_code + target_field: http.response.status_code + ignore_missing: true + tag: rename-properties_response_statuscode + - split: + field: azure.graphactivitylogs.properties.roles + if: ctx.azure?.graphactivitylogs?.properties?.roles != null && ctx.azure.graphactivitylogs.properties.roles != '' + separator: ' ' + tag: split-properties_roles + 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}}}' + - split: + field: azure.graphactivitylogs.properties.scopes + if: ctx.azure?.graphactivitylogs?.properties?.scopes != null && ctx.azure.graphactivitylogs.properties.scopes != '' + separator: ' ' + tag: split-properties_scopes + 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}}}' + - split: + field: azure.graphactivitylogs.properties.wids + if: ctx.azure?.graphactivitylogs?.properties?.wids != null && ctx.azure.graphactivitylogs.properties.wids != '' + separator: ' ' + tag: split-properties_wids + 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}}}' + - user_agent: + field: azure.graphactivitylogs.properties.user_agent + if: ctx.azure?.graphactivitylogs?.properties?.user_agent != null && ctx.azure.graphactivitylogs.properties.user_agent != '' + tag: user_agent-properties_user_agent + 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}}}' + - remove: + field: azure.graphactivitylogs.properties.user_agent + tag: remove-properties_user_agent + if: ctx.user_agent != null + ignore_missing: true + - rename: + field: azure.graphactivitylogs.properties.user_id + target_field: user.id + tag: rename-properties_user_id + if: ctx.azure?.graphactivitylogs?.properties?.user_id != null && ctx.azure.graphactivitylogs.properties.user_id != '' + - set: + field: client.user.id + value: '{{user.id}}' + tag: set-client_ip + ignore_empty_value: true + - append: + field: related.user + value: '{{user.id}}' + tag: append-related_user + allow_duplicates: false + if: 'ctx.user?.id != null' + - rename: + field: azure.graphactivitylogs.properties._billed_size + target_field: azure.graphactivitylogs.properties.billed_size + if: ctx.azure?.graphactivitylogs?.properties?._billed_size != null + tag: rename-properties_billed_size + - rename: + field: azure.graphactivitylogs.properties._is_billable + target_field: azure.graphactivitylogs.properties.is_billable + if: ctx.azure?.graphactivitylogs?.properties?._is_billable != null + tag: rename-properties_is_billable + - convert: + field: azure.graphactivitylogs.properties.is_billable + type: boolean + tag: convert-properties_is_billable + 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: azure.graphactivitylogs.properties.client_auth_method + type: integer + tag: convert-properties_client_auth_method + 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}}}' + - date: + field: azure.graphactivitylogs.properties.time_generated + target_field: azure.graphactivitylogs.properties.time_generated + if: ctx.azure?.graphactivitylogs?.properties?.time_generated != null + tag: date-properties_time_generated + formats: + - ISO8601 + 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}}}' + - pipeline: + name: '{{ IngestPipeline "azure-shared-pipeline" }}' + tag: pipeline-azure-shared-pipeline + - fingerprint: + fields: + - azure.graphactivitylogs.properties.request_uri + - http.request.id + - azure.tenant_id + - azure.graphactivitylogs.properties.time_generated + target_field: _id + ignore_missing: true + tag: fingerprint-id + - set: + field: cloud.account.id + value: '{{azure.tenant_id}}' + tag: set-cloud_account_id + ignore_empty_value: true + - set: + field: cloud.region + value: '{{destination.geo.region_name}}' + tag: set-cloud_region + ignore_empty_value: true + - set: + field: cloud.service.name + value: 'Microsoft Graph' + tag: set-cloud_region + ignore_empty_value: true + - geoip: + field: client.ip + target_field: client.geo + ignore_missing: true + - geoip: + field: source.ip + target_field: source.geo + ignore_missing: true + # IP Autonomous System (AS) Lookup + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: client.ip + target_field: client.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + - rename: + field: client.as.asn + target_field: client.as.number + ignore_missing: true + - rename: + field: client.as.organization_name + target_field: client.as.organization.name + ignore_missing: true + - remove: + field: event.original + if: "ctx?.tags == null || !(ctx.tags.contains('preserve_original_event'))" + ignore_missing: true + tag: remove-event_original + - script: + tag: script_to_drop_null_values + lang: painless + description: Drops null/empty values recursively. + source: |- + boolean drop(Object o) { + if (o == null || o == '') { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); + - set: + field: event.kind + value: pipeline_error + tag: set_pipeline_error + if: ctx.error?.message != null +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: event.kind + value: pipeline_error diff --git a/packages/azure/data_stream/graphactivitylogs/fields/agent.yml b/packages/azure/data_stream/graphactivitylogs/fields/agent.yml new file mode 100644 index 00000000000..b1895d5577a --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/fields/agent.yml @@ -0,0 +1,62 @@ +- name: cloud.account.id + external: ecs +- name: cloud.availability_zone + external: ecs +- name: cloud.instance.id + external: ecs +- name: cloud.instance.name + external: ecs +- name: cloud.machine.type + external: ecs +- name: cloud.provider + external: ecs +- name: cloud.region + external: ecs +- name: cloud.project.id + external: ecs +- name: cloud.image.id + type: keyword + description: Image ID for the cloud instance. +- name: cloud.service.name + external: ecs +- name: container.id + external: ecs +- name: container.image.name + external: ecs +- name: container.labels + external: ecs +- name: container.name + external: ecs +- name: host.architecture + external: ecs +- name: host.domain + external: ecs +- name: host.hostname + external: ecs +- name: host.id + external: ecs +- name: host.mac + external: ecs +- name: host.name + external: ecs +- name: host.os.family + external: ecs +- name: host.os.kernel + external: ecs +- name: host.os.name + external: ecs +- name: host.os.platform + external: ecs +- name: host.os.version + external: ecs +- name: host.type + external: ecs +- name: host.containerized + type: boolean + description: If the host is a container. +- name: host.os.build + type: keyword + description: OS build information. +- name: host.os.codename + type: keyword + description: OS codename, if any. diff --git a/packages/azure/data_stream/graphactivitylogs/fields/base-fields.yml b/packages/azure/data_stream/graphactivitylogs/fields/base-fields.yml new file mode 100644 index 00000000000..41384c46aba --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module + value: azure +- name: event.dataset + type: constant_keyword + description: Event dataset + value: azure.graphactivitylogs diff --git a/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml b/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml new file mode 100644 index 00000000000..b8b7c4f4bfa --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml @@ -0,0 +1,114 @@ +- name: client.ip + external: ecs +- name: client.geo.city_name + external: ecs +- name: client.geo.continent_name + external: ecs +- name: client.geo.country_iso_code + external: ecs +- name: client.geo.country_name + external: ecs +- name: client.geo.location.lat + external: ecs +- name: client.geo.location.lon + external: ecs +- name: client.geo.region_iso_code + external: ecs +- name: client.geo.region_name + external: ecs +- name: client.user.id + external: ecs +- name: destination.geo.region_name + external: ecs +- name: ecs.version + external: ecs +- name: message + external: ecs +- name: event.action + external: ecs +- name: event.category + external: ecs +- name: event.created + external: ecs +- name: event.duration + external: ecs +- name: event.id + external: ecs +- name: event.ingested + external: ecs +- name: event.kind + external: ecs +- name: event.type + external: ecs +- name: http.request.id + external: ecs +- name: http.request.method + external: ecs +- name: http.response.bytes + external: ecs +- name: http.response.status_code + external: ecs +- name: log.level + external: ecs +- name: related.ip + external: ecs +- name: related.user + external: ecs +- name: source.address + external: ecs +- name: source.geo.city_name + external: ecs +- name: source.geo.continent_name + external: ecs +- name: source.geo.country_iso_code + external: ecs +- name: source.geo.country_name + external: ecs +- name: source.geo.location.lat + external: ecs +- name: source.geo.location.lon + external: ecs +- name: source.geo.region_iso_code + external: ecs +- name: source.geo.region_name + external: ecs +- name: source.ip + external: ecs +- name: url.domain + external: ecs +- name: url.password + external: ecs +- name: url.port + external: ecs +- name: url.username + external: ecs +- name: url.original + external: ecs +- name: url.path + external: ecs +- name: url.query + external: ecs +- name: url.extension + external: ecs +- name: url.scheme + external: ecs +- name: url.full + external: ecs +- name: user.id + external: ecs +- external: ecs + name: user_agent.device.name +- external: ecs + name: user_agent.name +- external: ecs + name: user_agent.original +- external: ecs + name: user_agent.os.full +- external: ecs + name: user_agent.os.name +- external: ecs + name: user_agent.os.version +- external: ecs + name: user_agent.version +- name: tags + external: ecs diff --git a/packages/azure/data_stream/graphactivitylogs/fields/fields.yml b/packages/azure/data_stream/graphactivitylogs/fields/fields.yml new file mode 100644 index 00000000000..31ff935bfdf --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/fields/fields.yml @@ -0,0 +1,104 @@ +- name: azure.graphactivitylogs + type: group + fields: + - name: category + type: keyword + description: | + Azure Event Category. For example, Graph Activity Logs has value `MicrosoftGraphActivityLogs`. + - name: operation_version + type: keyword + description: | + The Graph API version of the event. + - name: operation_name + type: keyword + description: | + Operation name. + - name: result_signature + type: keyword + description: | + Result signature. + - name: properties + type: group + description: | + Event properties. + fields: + - name: api_version + type: keyword + description: | + The API version of the event. + - name: app_id + type: keyword + description: | + The identifier for the application. + - name: at_content + type: keyword + description: | + Reserved for future use. + - name: billed_size + type: double + description: | + The record size in bytes. + - name: client_auth_method + type: integer + description: | + Indicates how the client was authenticated. For a public client, the value is 0. If client ID and client secret are used, the value is 1. If a client certificate was used for authentication, the value is 2. + - name: client_request_id + type: keyword + description: | + The client request identifier when sent. If no client request identifier is sent, the value will be equal to the operation identifier. + - name: identity_provider + type: keyword + description: | + The identity provider that authenticated the subject of the token. + - name: is_billable + type: boolean + description: | + Specifies whether ingesting the data is billable. When _IsBillable is false ingestion isn't billed to your Azure account. + - name: operation_id + type: keyword + description: | + The identifier for the batch. For non-batched requests, this will be unique per request. For batched requests, this will be the same for all requests in the batch. + - name: request_uri + type: keyword + description: | + The URI of the request. + - name: roles + type: keyword + description: | + The roles in token claims. + - name: scopes + type: keyword + description: | + The scopes in token claims. + - name: service_principal_id + type: keyword + description: | + The identifier of the servicePrincipal making the request. + - name: sign_in_activity_id + type: keyword + description: | + The identifier representing the sign-in activitys. + - name: source_system + type: keyword + description: | + The type of agent the event was collected by. For example, OpsManager for Windows agent, either direct connect or Operations Manager, Linux for all Linux agents, or Azure for Azure Diagnostics. + - name: time_generated + type: date + description: | + The date and time the request was received. + - name: token_issued_at + type: date + description: | + The timestamp the token was issued at. + - name: type + type: keyword + description: | + The name of the table. + - name: user_agent + type: keyword + description: | + The user agent information related to request. + - name: wids + type: keyword + description: | + Denotes the tenant-wide roles assigned to this user. diff --git a/packages/azure/data_stream/graphactivitylogs/fields/package-fields.yml b/packages/azure/data_stream/graphactivitylogs/fields/package-fields.yml new file mode 100644 index 00000000000..44792684f83 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/fields/package-fields.yml @@ -0,0 +1,42 @@ +- name: azure + type: group + fields: + - name: subscription_id + type: keyword + description: | + Azure subscription ID. + - name: correlation_id + type: keyword + description: | + Correlation ID. + - name: tenant_id + type: keyword + description: | + tenant ID. + - name: resource + type: group + fields: + - name: id + type: keyword + description: | + Resource ID. + - name: group + type: keyword + description: | + Resource group. + - name: provider + type: keyword + description: | + Resource type/namespace. + - name: namespace + type: keyword + description: | + Resource type/namespace. + - name: name + type: keyword + description: | + Name. + - name: authorization_rule + type: keyword + description: | + Authorization rule. diff --git a/packages/azure/data_stream/graphactivitylogs/manifest.yml b/packages/azure/data_stream/graphactivitylogs/manifest.yml new file mode 100644 index 00000000000..28d5cef9066 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/manifest.yml @@ -0,0 +1,62 @@ +type: logs +title: Microsoft Graph Activity Logs +streams: + - input: "azure-eventhub" + enabled: false + template_path: "azure-eventhub.yml.hbs" + title: "Microsoft Graph Activity Logs" + description: "Collect Microsoft Graph Activity Logs using azure-eventhub input" + vars: + - 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: storage_account_container + type: text + title: Storage Account Container + multi: false + required: false + show_user: false + description: >- + The storage account container where the integration stores the checkpoint data for the consumer group. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for each Azure log type (activity, sign-in, audit logs, and others). DO NOT REUSE the same container name for more than one Azure log type. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - azure-graphactivitylogs + - forwarded + - 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. + - name: sanitize_newlines + type: bool + title: Sanitizes New Lines + description: Removes new lines in logs to ensure proper formatting of JSON data and avoid parsing issues during processing. + multi: false + required: false + show_user: false + default: false + - name: sanitize_singlequotes + required: true + show_user: false + title: Sanitizes Single Quotes + description: Replaces single quotes with double quotes (single quotes inside double quotes are omitted) in logs to ensure proper formatting of JSON data and avoid parsing issues during processing. + type: bool + multi: false + default: false +# Ensures agents have permissions to write data to `logs-*-*` +elasticsearch: + dynamic_dataset: true + dynamic_namespace: true diff --git a/packages/azure/data_stream/graphactivitylogs/sample_event.json b/packages/azure/data_stream/graphactivitylogs/sample_event.json new file mode 100644 index 00000000000..2f107010c19 --- /dev/null +++ b/packages/azure/data_stream/graphactivitylogs/sample_event.json @@ -0,0 +1,131 @@ +{ + "@timestamp": "2024-03-07T10:24:44.793Z", + "azure": { + "correlation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "v1.0", + "properties": { + "api_version": "v1.0", + "app_id": "a5a68e32-269a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 2, + "client_request_id": "2fe58790-a848-4a93-9d2c-5645972aejk9", + "identity_provider": "https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/", + "operation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "roles": [ + "Application.Read.All", + "Domain.Read.All", + "GroupMember.Read.All", + "LicenseAssignment.ReadWrite.All", + "Organization.Read.All", + "Policy.Read.ConditionalAccess", + "RoleManagement.Read.Directory", + "Team.ReadBasic.All", + "TeamsTab.Create", + "TeamsTab.Read.All", + "TeamsTab.ReadWrite.All", + "User.Read.All" + ], + "service_principal_id": "f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg", + "sign_in_activity_id": "sign-in_ActivityId", + "time_generated": "2024-03-07T10:24:44.793Z", + "token_issued_at": "2024-03-07T10:19:44.000Z", + "wids": [ + "a207b4d3-0g8d-90cb-bhj5-d80n3121e69" + ] + }, + "result_signature": "200" + }, + "resource": { + "id": "/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "cloud": { + "account": { + "id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "provider": "azure", + "region": "France Central", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "France Central" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": 1213372224, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"81.2.69.143\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"durationMs\":1100725,\"location\":\"France Central\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"v1.0\",\"properties\":{\"apiVersion\":\"v1.0\",\"appId\":\"a5a68e32-269a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"2\",\"clientRequestId\":\"2fe58790-a848-4a93-9d2c-5645972aejk9\",\"durationMs\":1100725,\"identityProvider\":\"https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/\",\"ipAddress\":\"81.2.69.143\",\"location\":\"France Central\",\"operationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/v1.0/directoryRoles\",\"responseSizeBytes\":4300,\"responseStatusCode\":200,\"roles\":\"Application.Read.All Domain.Read.All GroupMember.Read.All LicenseAssignment.ReadWrite.All Organization.Read.All Policy.Read.ConditionalAccess RoleManagement.Read.Directory Team.ReadBasic.All TeamsTab.Create TeamsTab.Read.All TeamsTab.ReadWrite.All User.Read.All\",\"scopes\":null,\"servicePrincipalId\":\"f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg\",\"signInActivityId\":\"sign-in_ActivityId\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"timeGenerated\":\"2024-03-07T10:24:44.7939418Z\",\"tokenIssuedAt\":\"2024-03-07T10:19:44Z\",\"userAgent\":\"\",\"userId\":null,\"wids\":\"a207b4d3-0g8d-90cb-bhj5-d80n3121e69\"},\"resourceId\":\"/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"200\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"time\":\"2024-03-07T10:24:44.7939418Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "method": "GET" + }, + "response": { + "bytes": 4300, + "status_code": 200 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "81.2.69.143" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "extension": "0/directoryRoles", + "original": "https://graph.microsoft.com/v1.0/directoryRoles", + "path": "/v1.0/directoryRoles", + "scheme": "https" + } +} \ No newline at end of file diff --git a/packages/azure/docs/README.md b/packages/azure/docs/README.md index cbdec1547ef..3c5d32d8c17 100644 --- a/packages/azure/docs/README.md +++ b/packages/azure/docs/README.md @@ -1,6 +1,6 @@ # Azure Logs Integration -The Azure Logs integration collects logs for specific Azure services like Azure Active Directory (Sign-in, Audit, Identity Protection, and Provisioning logs), Azure Spring Apps, Azure Firewall, and several others using the Activity and Platform logs. +The Azure Logs integration collects logs for specific Azure services like Azure Active Directory (Sign-in, Audit, Identity Protection, and Provisioning logs), Azure Spring Apps, Azure Firewall, Microsoft Graph Activity, and several others using the Activity and Platform logs. You can then visualize that data in Kibana, create alerts to notify you if something goes wrong, and reference data when troubleshooting an issue. @@ -16,7 +16,7 @@ fail to start due to an exceed quota limit. The Azure Logs integration collects logs. **Logs** help you keep a record of events that happen on your Azure account. -Log data streams collected by the Azure Logs integration include Activity, Platform, Active Directory (Sign-in, Audit, Identity Protection, Provisioning), and Spring Apps logs. +Log data streams collected by the Azure Logs integration include Activity, Platform, Active Directory (Sign-in, Audit, Identity Protection, Provisioning), Microsoft Graph Activity, and Spring Apps logs. ## Requirements diff --git a/packages/azure/docs/graphactivitylogs.md b/packages/azure/docs/graphactivitylogs.md new file mode 100644 index 00000000000..4f6d123ff0a --- /dev/null +++ b/packages/azure/docs/graphactivitylogs.md @@ -0,0 +1,353 @@ +# Microsoft Graph Activity Logs + +Microsoft Graph Activity Logs provide an audit trail of all HTTP requests that the Microsoft Graph service has received and processed for a tenant. Microsoft Graph Activity Logs gives full visibility into all transactions made by applications and other API clients that you have consented to in the tenant. Refer to [Microsoft Graph Activity Common Usecases](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#common-use-cases-for-microsoft-graph-activity-logs) for more use cases. + +Tenant administrators can configure the collection and storage destinations of Microsoft Graph Activity Logs through Diagnostic Setting in the Entra Portal. This integration uses Azure Event Hubs destination to stream Microsoft Graph Activity Logs to Elastic. + +## Requirements and Setup + +### Prerequisites + +Following privileges are required to collect Microsoft Graph Activity Logs: +- A Microsoft Entra ID P1 or P2 tenant license in your tenant. +- A `Security Administrator` or `Global Administrator` Microsoft Entra ID role to configure the diagnostic settings. +Refer to [Microsoft Graph Prerequisites](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#prerequisites) for more information on required privileges. + +### Setup + +Refer to the [Azure Logs](https://docs.elastic.co/integrations/azure) page for more information about setting up and using this integration. + +### Limitations + +- Activities of multi-tenant applications belonging to another tenant are not available. +- In few rare cases, events might take up to 2 hours to be delivered to Event Hubs. +Refer to [Microsoft Graph Activity Limitations](https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview#limitations) for more information. + +## Settings + +`eventhub` : + _string_ +It is a fully managed, real-time data ingestion service. Elastic recommends using only letters, numbers, and the hyphen (-) character for Event Hub names to maximize compatibility. You _can_ use existing Event Hubs having underscores (_) in the Event Hub name; in this case, the integration will replace underscores with hyphens (-) when it uses the Event Hub name to create dependent Azure resources behind the scenes (e.g., the storage account container to store Event Hub consumer offsets). Elastic also recommends using a separate event hub for each log type as the field mappings of each log type differ. +Default value `insights-operational-logs`. + +`consumer_group` : +_string_ + The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. A consumer group is a view (state, position, or offset) of an entire event hub. Consumer groups enable multiple consuming applications to each have a separate view of the event stream, and to read the stream independently at their own pace and with their own offsets. +Default value: `$Default` + +`connection_string` : +_string_ +The connection string required to communicate with Event Hubs, steps [here](https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-get-connection-string). + +A Blob Storage account is required in order to store/retrieve/update the offset or state of the eventhub messages. This means that after stopping the filebeat azure module it can start back up at the spot that it stopped processing messages. + +`storage_account` : +_string_ +The name of the storage account the state/offsets will be stored and updated. + +`storage_account_key` : +_string_ +The storage account key, this key will be used to authorize access to data in your storage account. + +`storage_account_container` : +_string_ +The storage account container where the integration stores the checkpoint data for the consumer group. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for each Azure log type (activity, sign-in, audit logs, and others). DO NOT REUSE the same container name for more than one Azure log type. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. + +`resource_manager_endpoint` : +_string_ +Optional, by default we are using the azure public environment, to override, users can provide a specific resource manager endpoint in order to use a different Azure environment. + +Resource manager endpoints: + +```text +# Azure ChinaCloud +https://management.chinacloudapi.cn/ + +# Azure GermanCloud +https://management.microsoftazure.de/ + +# Azure PublicCloud +https://management.azure.com/ + +# Azure USGovernmentCloud +https://management.usgovcloudapi.net/ +``` + +## Logs + +### graphactivitylogs + +The `graphactivitylogs` data stream of the Azure Logs package will collect Microsoft Graph activity events that have been streamed through an azure event hub. + +An example event for `graphactivitylogs` looks as following: + +```json +{ + "@timestamp": "2024-03-07T10:24:44.793Z", + "azure": { + "correlation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "graphactivitylogs": { + "category": "MicrosoftGraphActivityLogs", + "operation_name": "Microsoft Graph Activity", + "operation_version": "v1.0", + "properties": { + "api_version": "v1.0", + "app_id": "a5a68e32-269a-3c91-a5e2-b9254e67hb29", + "client_auth_method": 2, + "client_request_id": "2fe58790-a848-4a93-9d2c-5645972aejk9", + "identity_provider": "https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/", + "operation_id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "roles": [ + "Application.Read.All", + "Domain.Read.All", + "GroupMember.Read.All", + "LicenseAssignment.ReadWrite.All", + "Organization.Read.All", + "Policy.Read.ConditionalAccess", + "RoleManagement.Read.Directory", + "Team.ReadBasic.All", + "TeamsTab.Create", + "TeamsTab.Read.All", + "TeamsTab.ReadWrite.All", + "User.Read.All" + ], + "service_principal_id": "f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg", + "sign_in_activity_id": "sign-in_ActivityId", + "time_generated": "2024-03-07T10:24:44.793Z", + "token_issued_at": "2024-03-07T10:19:44.000Z", + "wids": [ + "a207b4d3-0g8d-90cb-bhj5-d80n3121e69" + ] + }, + "result_signature": "200" + }, + "resource": { + "id": "/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM", + "provider": "MICROSOFT.AADIAM" + }, + "tenant_id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "cloud": { + "account": { + "id": "ab30785b-417f-42a4-b5dc-8f9051718acb" + }, + "provider": "azure", + "region": "France Central", + "service": { + "name": "Microsoft Graph" + } + }, + "destination": { + "geo": { + "region_name": "France Central" + } + }, + "ecs": { + "version": "8.0.0" + }, + "event": { + "action": "Microsoft Graph Activity", + "duration": 1213372224, + "kind": "event", + "original": "{\"Level\":4,\"callerIpAddress\":\"81.2.69.143\",\"category\":\"MicrosoftGraphActivityLogs\",\"correlationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"durationMs\":1100725,\"location\":\"France Central\",\"operationName\":\"Microsoft Graph Activity\",\"operationVersion\":\"v1.0\",\"properties\":{\"apiVersion\":\"v1.0\",\"appId\":\"a5a68e32-269a-3c91-a5e2-b9254e67hb29\",\"atContent\":\"\",\"clientAuthMethod\":\"2\",\"clientRequestId\":\"2fe58790-a848-4a93-9d2c-5645972aejk9\",\"durationMs\":1100725,\"identityProvider\":\"https://sts.windows.net/ab30785b-417f-42a4-b5dc-8f9051718acb/\",\"ipAddress\":\"81.2.69.143\",\"location\":\"France Central\",\"operationId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestId\":\"f7839da0-e7d1-4e4f-985a-64937fbge347\",\"requestMethod\":\"GET\",\"requestUri\":\"https://graph.microsoft.com/v1.0/directoryRoles\",\"responseSizeBytes\":4300,\"responseStatusCode\":200,\"roles\":\"Application.Read.All Domain.Read.All GroupMember.Read.All LicenseAssignment.ReadWrite.All Organization.Read.All Policy.Read.ConditionalAccess RoleManagement.Read.Directory Team.ReadBasic.All TeamsTab.Create TeamsTab.Read.All TeamsTab.ReadWrite.All User.Read.All\",\"scopes\":null,\"servicePrincipalId\":\"f2aq4c71-31e3-5065-91g3-4b2dfbsv50fg\",\"signInActivityId\":\"sign-in_ActivityId\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"timeGenerated\":\"2024-03-07T10:24:44.7939418Z\",\"tokenIssuedAt\":\"2024-03-07T10:19:44Z\",\"userAgent\":\"\",\"userId\":null,\"wids\":\"a207b4d3-0g8d-90cb-bhj5-d80n3121e69\"},\"resourceId\":\"/TENANTS/AB30785B-417F-42A4-B5DC-8F9051718ACB/PROVIDERS/MICROSOFT.AADIAM\",\"resultSignature\":\"200\",\"tenantId\":\"ab30785b-417f-42a4-b5dc-8f9051718acb\",\"time\":\"2024-03-07T10:24:44.7939418Z\"}", + "type": [ + "access" + ] + }, + "http": { + "request": { + "id": "f7839da0-e7d1-4e4f-985a-64937fbge347", + "method": "GET" + }, + "response": { + "bytes": 4300, + "status_code": 200 + } + }, + "log": { + "level": "4" + }, + "related": { + "ip": [ + "81.2.69.143" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.143" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": "graph.microsoft.com", + "extension": "0/directoryRoles", + "original": "https://graph.microsoft.com/v1.0/directoryRoles", + "path": "/v1.0/directoryRoles", + "scheme": "https" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| azure.correlation_id | Correlation ID. | keyword | +| azure.graphactivitylogs.category | Azure Event Category. For example, Graph Activity Logs has value `MicrosoftGraphActivityLogs`. | keyword | +| azure.graphactivitylogs.operation_name | Operation name. | keyword | +| azure.graphactivitylogs.operation_version | The Graph API version of the event. | keyword | +| azure.graphactivitylogs.properties.api_version | The API version of the event. | keyword | +| azure.graphactivitylogs.properties.app_id | The identifier for the application. | keyword | +| azure.graphactivitylogs.properties.at_content | Reserved for future use. | keyword | +| azure.graphactivitylogs.properties.billed_size | The record size in bytes. | double | +| azure.graphactivitylogs.properties.client_auth_method | Indicates how the client was authenticated. For a public client, the value is 0. If client ID and client secret are used, the value is 1. If a client certificate was used for authentication, the value is 2. | integer | +| azure.graphactivitylogs.properties.client_request_id | The client request identifier when sent. If no client request identifier is sent, the value will be equal to the operation identifier. | keyword | +| azure.graphactivitylogs.properties.identity_provider | The identity provider that authenticated the subject of the token. | keyword | +| azure.graphactivitylogs.properties.is_billable | Specifies whether ingesting the data is billable. When _IsBillable is false ingestion isn't billed to your Azure account. | boolean | +| azure.graphactivitylogs.properties.operation_id | The identifier for the batch. For non-batched requests, this will be unique per request. For batched requests, this will be the same for all requests in the batch. | keyword | +| azure.graphactivitylogs.properties.request_uri | The URI of the request. | keyword | +| azure.graphactivitylogs.properties.roles | The roles in token claims. | keyword | +| azure.graphactivitylogs.properties.scopes | The scopes in token claims. | keyword | +| azure.graphactivitylogs.properties.service_principal_id | The identifier of the servicePrincipal making the request. | keyword | +| azure.graphactivitylogs.properties.sign_in_activity_id | The identifier representing the sign-in activitys. | keyword | +| azure.graphactivitylogs.properties.source_system | The type of agent the event was collected by. For example, OpsManager for Windows agent, either direct connect or Operations Manager, Linux for all Linux agents, or Azure for Azure Diagnostics. | keyword | +| azure.graphactivitylogs.properties.time_generated | The date and time the request was received. | date | +| azure.graphactivitylogs.properties.token_issued_at | The timestamp the token was issued at. | date | +| azure.graphactivitylogs.properties.type | The name of the table. | keyword | +| azure.graphactivitylogs.properties.user_agent | The user agent information related to request. | keyword | +| azure.graphactivitylogs.properties.wids | Denotes the tenant-wide roles assigned to this user. | keyword | +| azure.graphactivitylogs.result_signature | Result signature. | keyword | +| azure.resource.authorization_rule | Authorization rule. | keyword | +| azure.resource.group | Resource group. | keyword | +| azure.resource.id | Resource ID. | keyword | +| azure.resource.name | Name. | keyword | +| azure.resource.namespace | Resource type/namespace. | keyword | +| azure.resource.provider | Resource type/namespace. | keyword | +| azure.subscription_id | Azure subscription ID. | keyword | +| azure.tenant_id | tenant ID. | keyword | +| client.geo.city_name | City name. | keyword | +| client.geo.continent_name | Name of the continent. | keyword | +| client.geo.country_iso_code | Country ISO code. | keyword | +| client.geo.country_name | Country name. | keyword | +| client.geo.location.lat | Longitude and latitude. | geo_point | +| client.geo.location.lon | Longitude and latitude. | geo_point | +| client.geo.region_iso_code | Region ISO code. | keyword | +| client.geo.region_name | Region name. | keyword | +| client.ip | IP address of the client (IPv4 or IPv6). | ip | +| client.user.id | Unique identifier of the user. | keyword | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | +| cloud.availability_zone | Availability zone in which this host, resource, or service is located. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | The cloud project identifier. Examples: Google Cloud Project id, Azure Project id. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host, resource, or service is located. | keyword | +| cloud.service.name | The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | keyword | +| data_stream.dataset | Data stream dataset name. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| destination.geo.region_name | Region name. | keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.action | The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset | constant_keyword | +| event.duration | Duration of the event in nanoseconds. If event.start and event.end are known this value should be the difference between the end and start time. | long | +| event.id | Unique ID to describe the event. | keyword | +| event.ingested | Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` \< `event.created` \< `event.ingested`. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module | constant_keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.mac | Host MAC addresses. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | match_only_text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| http.request.id | A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`. | keyword | +| http.request.method | HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. | keyword | +| http.response.bytes | Total size in bytes of the response (body and headers). | long | +| http.response.status_code | HTTP response status code. | long | +| log.level | Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`. | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| related.ip | All of the IPs seen on your event. | ip | +| related.user | All the user names or other user identifiers seen on the event. | keyword | +| source.address | Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| source.geo.city_name | City name. | keyword | +| source.geo.continent_name | Name of the continent. | keyword | +| source.geo.country_iso_code | Country ISO code. | keyword | +| source.geo.country_name | Country name. | keyword | +| source.geo.location.lat | Longitude and latitude. | geo_point | +| source.geo.location.lon | Longitude and latitude. | geo_point | +| source.geo.region_iso_code | Region ISO code. | keyword | +| source.geo.region_name | Region name. | keyword | +| source.ip | IP address of the source (IPv4 or IPv6). | ip | +| tags | List of keywords used to tag each event. | keyword | +| url.domain | Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. | keyword | +| url.extension | The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). | keyword | +| url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| url.full.text | Multi-field of `url.full`. | match_only_text | +| url.original | Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. | wildcard | +| url.original.text | Multi-field of `url.original`. | match_only_text | +| url.password | Password of the request. | keyword | +| url.path | Path of the request, such as "/search". | wildcard | +| url.port | Port of the request, such as 443. | long | +| url.query | The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. | keyword | +| url.scheme | Scheme of the request, such as "https". Note: The `:` is not part of the scheme. | keyword | +| url.username | Username of the request. | keyword | +| user.id | Unique identifier of the user. | keyword | +| user_agent.device.name | Name of the device. | keyword | +| user_agent.name | Name of the user agent. | keyword | +| user_agent.original | Unparsed user_agent string. | keyword | +| user_agent.original.text | Multi-field of `user_agent.original`. | match_only_text | +| user_agent.os.full | Operating system name, including the version or code name. | keyword | +| user_agent.os.full.text | Multi-field of `user_agent.os.full`. | match_only_text | +| user_agent.os.name | Operating system name, without the version. | keyword | +| user_agent.os.name.text | Multi-field of `user_agent.os.name`. | match_only_text | +| user_agent.os.version | Operating system version as a raw string. | keyword | +| user_agent.version | Version of the user agent. | keyword | + diff --git a/packages/azure/img/graph_activity.png b/packages/azure/img/graph_activity.png new file mode 100644 index 0000000000000000000000000000000000000000..887a43347a53e9d93ac5f0e6ca46c1a76703b86c GIT binary patch literal 5399 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 literal 0 HcmV?d00001 diff --git a/packages/azure/img/graph_activity_logs.png b/packages/azure/img/graph_activity_logs.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b0c7eea44a19c4ead26b2e4033f9ebf45f102 GIT binary patch literal 641022 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 z%0D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%0ApcPI5dJp6`^ogV#IT7Gxqe{LG}DJdOXQ$?et> z1k-U+>)ywYGq7E*NA|ZM_}UaolSYxOASoEHCXiDA&jdRI_(3kGvkIfW=*~^YcKPJ+ zJL|(gqeXzD*ZX~k32Koan-X>Zd1UwAXFo&MR%@r8Qp5I@>C?lLXk764uO2n~JFvh>-tHWjy3?(MEtSa`KZ zGVoSRXPu6?@$e2oB!`p3bN!10WBFZ8SR~Hv?Zd7%o2LF(0Vz!{ES(=m6rIaS6&IRk zJNgKAM)JpOPP^eN%y)Ex%1q7`xa@dkuvWTgvwh2@^6z&(bv`&$(VmkQmrsd{(Yh;L z`+9=XGN2XIyXda#bucqxa|qjta$E%qPxwyQY&0}dPgOWoYdaAVVui~P4@*`RCiIw| zM*ZNX9JFmB6oR~5GVL(L9RW?aHja_@ap1f+#_oB%R02yVhcAEqoS6}(!D<@*SV)7) z?O@!q-;ROp9{-ayr^}2jy#^W8(2HrOPb^7YR6@qml2_*>5|KuOdOwm#kGKh)C1)>e z5-g#$WjPUxr!101id>Y2ljFBlPabp8`*~|IK=^c3%S=NbYTB=EO;`Be?@MWBNA$WL zbk$+2qM6jhG^<>Xa{4aU zzc3juWVAW=HQGX{(R>fZu*=4e|;I{=ymWz{xZ%z0$ zIE4*Yan8BRC$gE-0&wFq_C5gbmbE)|NhLeUHUvLTT@^67JP$KMfKCv6mCiHh#LRn! zZk4d0vA1)LmmF5aN*|iZaiTI-cf)gJNlu+YIWvdP$vw<+2TR7Dt%9YkNQ5BcU+nMv z@2&3(7%E%V(Y|f>N_W$kn7aEVmYcEQhr~z@l>>|^Pw0<1|51n0ktsV|J6XL(t<|Dg zdZ?yqnLZIiyFCKCY4XXc*U&V2qelorZ^CP_2hHttn5*pV_7#To&WQw9T$`}1ObJ}z zETr|2s~#gLWF-ivK1@0{EVtXo@SZ>r??#)uV!c(WdZ_z383&i+2dLU~KeKn}oeW(U zbP^759d=XGLq|`(bWSt=0cqVTf}VPgdZ00dq2l; zU%hxjy~b5`9`a_ONP9Z0>2k^GY~x8b)vGjbgf9%)pv3-aaWsQH(L(i8+JLPAuKROY znHJqm&h2paM^&P4M!#`8<;TUnpgwZqsYJzgr{c(3qjTR*VAUgvw-c$A+osCPb9Hop z+e{evzB-lZ$m}X$k`#>mG91szv*vWsBf9>|F?Cw$N%b-(CgK@Qe|NAqLef3TYWv&> z?fhYqWy#XK`TFq+{^=KC!cNk7j&FE<$)1|AQA5p~)r+!ewsBI;$;8VE;HByenS(53 zMGCNmWaP4#t5HjU?7hAzSP+odlB(W;j8nYvK{?f#Ihc!)KS-pAF+INw+sChS&AW3k zPdaF!$m6^diM7%lsETmUnK>NVudPyqY7&CS4+yUVL!+pqP5Si>E;aph<@qKQEyliB zwEwvJFj&@ys&&>h$2n&B{rIbG)460$f4udF(+h85Yqb2DP~xbiFmiz>Obz4G4QNmx z4$Iggb|KGVB*B#C!OQ&m>A82BC&S@`7m@BxmYu`anw?eKJX;m1`la!ORE=jA7~3gc zx3bjwcN7cN61^i5$~1YX2BV&g z=CjYwG$jHy-;-9LL|3up+1zK`v-B02G+!g9Um4yn$l7dKS&pd3?%E%Iu*R_aq zdpWE+Nn*dgtYe$x$YOAp>C|OYpLnt|RGIcMrPfJmcwbsig__0S$9Ad-?;7qm9&

  • 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
  • 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 xJRIeR~@&;@=;K_R-l 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

    RmPA`P z?E1rHU80gI?kls|A3y06yX+JhXJwRZ2V7~lxPVfE?UrA!5Xh;QsY&3!9T{x&xH!7r zpz|P{jdRx{<8w=HaXBeV=-;0$%UgiTx!xM(pSq@+VM3)!+F5YPuQ8FGG`yNVj8epl zdOWR*f-H@s(YznIKf>6GUu(tjH1LDIO`o1~&m0{N#^Dvf?|poGZ!$N#9EIT)|nh6l8Qyfvg!X2#p( zWzcEx`NoNV@xH+*c^@}SU#TLn1J(f7*l!i`3&olaV#p97<_`BsvoY5s9}aj3j$>iWV#3S@I7Aa&-{k2PrRR{9*U^l z_BIYzHI%l_e@vxuzS>-D@>N%+mf{;#QTZn)19HMOBO!98xn_%bL;3{4;h(ncn54q0 z8kuec@QlX)x7C96lO*!vTHX25CQ!JFy74;m$-}AD&T;eIC48Sb!}6L6afhC1)Xlx)Be5St$OhI7(=&vZ`H<#K5X(LEO$N zt39AZ?90cn;XrZ)%ydI?1B#{ZQdTQ%i2>rzg@cLo znBZxALoSoS!!hku z(}FBuJ#p?X9&FKV%;$K;D4%gfQg8TcGTRR{p5Ye!^msF=3vG`WNK*WA&3IRmOi3RyXv*1RP`%fC}n-vl}f zWE>^R*RRzd1)sS@r%e#z-AHy|VaEbOVGgFgfj^s_{W96V^}7jvabUkeQ{w&h1J|sy z5R3(^@W9{6W%2no1}5?L$h{~(3~ZO}azn;WFWY`^*8w?l7fX?le*pOVk>qNVFnO>Z z*dx+(w>6-pFBj z(%WUMB)T+MkvBZlIIk2J|&b_K!oJKK2!xR5%Ho7-T!%@0X@P5aZj?oNV z4;&tsaLjHaGE(6UZc!_cc|+fQNi;&DK#saNKYLhC!F$j(XW%+EwS1?TNZ-jtHRKq1 zF?>>}SA>bp0eQVR zV>kbWe$fCMu;u8r)>)mP&s&EPOU37D&ut$A5|&D-&>I_HmFOp%@#H;sr1Rj$6Gh(p z+#KRjRo+$g7D3ui>5f6j+t)3Hzaw^t4gZ}o;E9_*^qnwtSG!x!rDW}%d{?9?1GDDb zmy@g_Uv4zJf0&)aCwgafEb<+W8#D0DA-j^9NaiB~y2_#p^TdHDf>J!SVp%i7bKj&Z z!NU90BIi#K_O$nw-JVD8^^#p3sXg~-SCYJ*b>H|wHhnuS!0z7JqlCC>h}NThxpw~t zd@2>kNzw@&J^i4AL7%sYuIuSr1XQnO@h|^t8>+XFRufsYIo&6+}x$XQ}wu zK`F9Npp1P;K#KEkNWlA#9^+Px6^i0=yxNwm)8Rf5c3F4%aUa36_^0PT$u1^rKd@86 zuSQ-ix`XfQ*h4Y@Zy5IP%nSC_%T2l&iC!3vIYa)lwZ{;I7KWiNPL}^pNC}Vs-1pie zgBxGLLsq^_KiOl_O+4F~s|vO0|B@?)8n7 zAg`x+F8aPf{OU|FJS_+NGN}~BbGcp-uFAV+<3q`;aSXxHoQ@~meCSlHPm$ilNO-9a zFT~O1AvFPC_5=4s5ylR(t(V$+!>q?#-BSDm0`SmVU7!1)o~wRV=R77-;-3p0?Orgq z7rJ*m2x-^$(%r3*qWV=U6$%@E(@+-W*;XnXSEBhQGgea7aW{3V`%XLC{eoJCRSe;Q zGRAA2%uy!|z1#Jjq7ZAkJ(^iEB@9{eEB%^jz(b%HkB!4l zObh=i{w*FU+pcAl%&H`zDkJ6Mug{JsolGRJp6QAo~&h` z^|Qnr#GHHHz*yzN%g?rPyBj8?R`x3LpZ-Q|#NK}Uv&5+=ahfHGwaEFt7ldS@)Ib&g zLx|-k2wvEN2jRq%jUhc|b+p~o3~gQ;qorddvt;`2`W+`oakeU}RRauFl0%LYD`1M9 z(VJruZf3sbE1-ZXOgS-za0#9(DN}i#Tz#_*9=&;W=q-8Rz5iM&hunL6ENQmnlPe(S zdZf;dmQ^{ad^hB$=4S>Usk>Z@FC%PBjJhTsN4t;CYfmDP*g|PEf4>$I)<_{5gLMSk zj9B)JKEUSOrxcEHgDCiq+aH5zpL-?+Ec+ToKrSTsK-;yTn$C_Bjgnr_085^7J+J=Gxqe!9VL8 zRV0JPa(Bw~1^WXZ=L8EnDE;@mEr%mPY$uC6RcFOt^m`qYLakSG!c}4pS1Q=w^mZ&Z z*|V2*fF;Q1i4!Fwt%=7*EJf~{mEI30F-H%UKDJXw5?7yZ3CUW;O#BtoN@JmWp) zIEc-7$!7QOCr;_0_b;7YvA`8&U=k}9o(M@OvW-tQl4fFo@q^>VYf|(QWN+2w#bisS#pm$ z{Y0k<^=QoOYSqUX&WT`nu_E-!6kdzR6q}IiXBcxZ(&h*eqHZEoWI|I)P8LSuLZOr@ zO4L$%SYX2^lrPjmi)d?{NT+c|e$#4mgxCs{1y$%iwO(Xu>}a)`ro_7=h+yGHI$_q2 zqB_IYp=_l$JNl@GNq5vZz)qDf2t3D8ermfPMa;;UW;~`v6%iE$>>DQPQDjsa9=8<& zwa7&!R#Cf4gED*u72Hg4N_NmrX<{F$dM_{B{Lb#T4X0l>(y0&A@0`hwx|Eo4!9ts7 zXVN)8PgxVP-l(}{^X2crB`8F2k&{8Eq@7(HEtgsHoquU{hsh0ke=%iN_QH8tlBBv~ z7Vgf#_sfd~Cze`jmz-!N(ObtY5gI?VFv`nhwW&r$*UuNavK;TTGrz`gmn?>x`cwLE z3sc?PpZFwDzMT2|=;561CjayiI+0FK1z&kHHJ#gm_D$ThPeqRRW5`7LNqgbL?FG+; zc>%s6EbJ#2_+lTy$n(vCiouPPBH5%Uq2tNI9SZ+dBW2}Ti@s4kSiHB9bU$-kw!iF} z=%O5F*4}ETRDF~9rjcW3Qdd>zB?`#>MLy5k3OgzN2sO#d^_cGUJYm#pT3FCF%Pj@{ zY=%4j5AZ*PV?cZ<&Cxt|E0eXgrHZo`GD%TkhNWNJKA2#9A6{@Kj#oC4nN_V4W-ka1 z<=1Gm4cRqOPpVWUtFU7ekX7^qXK>^%p4E}Qod4Z;pOw?3FBq#&&&qxABP%i zS}QLv{5}#-X_u+{gu!EY$n#$SB8NKt*JY2k!l}w^0mNE%fy4>Ox($iZ@khbHusqI+ zpTz@>NbZ>}=o=I9V{nvg3F1D<93xuax0XJ4h`?{O^wd+o+ruX{FW0Eh%9g6zz6@Z~ z5Cb}8m)j#9G~l0UMS~50emBlQ7{e@NmFU3vwYum2@#$&eGA(+W11jR|y4y2PviTF} zqTE|~SW+Vl)c^QwGa6v*JqMv-%I);FX8%ejV3c@G{nCuW9yz+!k$><_PDNFH#G3XTdVW>XiHy zJf0a}FP>M*E&b~1*3@uG+Fd4%HGHCMN%R?$sgF8DimFx}2GY1YlaLE9^JFNX5-19Q ziek{WQzzUCZn6sIY1Z-ga3-=_veRySa6fOFm*P<@VX2Q>Ma=T_&StrZKcVE)6T(0W zUj5%j{+R)~jG?YbLQ$Oq6YMpIf36M!)Ym**8pW*E_;fL5623~w$K_!%iw9WA&MF0V z(!MD75EyxOrJ|&ki5vS929XvUpckAO5@pv4n+juQ!8|o<^h0qYgj0}3Q z!(+%`t4Ws)?6E(WhwAquyr~BC)&ey~JH2`t6F`KGRwYETkYI<;+;@_P{0zj%SIlA! zkE#5kj~M1-1|cZW${!M@L)(0b39k7xT7K#dXnC-d!4ugK`-lNmB}h&9mv3zXlBW*_ z2dkMU*$=%rdmWVY7SV&=*sVw;iY-GY$#P5ybD2didahrc{&M_Nf zci~j9pqnD$ABsR187L+2fuTE#{FcLo3D!Sr&j|+80=`6!ne>e=e@3UQZqgVbVsa*6 zK7`EE3oXA&cmN!n;x#w<@8j0KVoFMzz44dQ4A12JIgV^> z^kKabP*CdieV*GU+EK%(=H-E zP^i{ID?AN*VR)s;PRqzxBr{7D)ko?GYXw`q{}T5ydsH(FFSpM9wa2{s=(d?j`wTr# zi~NQC-Y@qsL_;;WN%!_-K6N^{edm)X%opkchiN*EM@r%s+avNYcbA38K<{O#Zq&BG zg1ZY79syH!ugm7HGTsA59L3B)m7`h7qx?n@5?=5}SclG$w8n(HjMl42F$Bk~NavKX z3cH%tD#F?3%GtKy!*T@IM-D;NvdgN)OPBAN!C~IXO9LtjsLNn{JH02v_>$6jl}i1m4w&=`!_cb>3)l_BCFVe1mdL0z@ve6g9L0 zA%mVYuC0G{c;^zJqr%z{IuEN+j;V6 zckj=-)s6YG`1r31XMI~i8daLM?TMp1)_Mot>#azh%u>ny{v>bAB`HwXgKDUEbV zcX!-$cZY<4(v5U?cXvukNjDM_(%oI(!oBr*_WS(>jvH8O&N<>b$2Bj1Ts8wW^e6-J zPVtvsZp}lr0pp|Arwo5Cvk}Tt7V2Z166I}4UtgMG%du+U_LIs&54`JgB#}x$pp?rM zLve0K&i@gBn8@|WS6*Q?*D*EdX)2U2{WcJBJ!K&IEjOq_X{eaWbfE9kNaKUA54F?; zyRT%J>PmIrZNYYZE5K@#>|2I8b6YJEiIzL=&v>0YUiAmt*v0ZMG zOZ6nowe_1uSM59XrAmK3xr26cSrK#As2*YD>g}mqUsT;)w2dUk{VF5QL6<#b7SS}4 zYo}s)&vkfX#4M`IRT`@uK}>*IKIIdlx2rSh;9z~u%vFD%>AK5BBHs%W*R1d6K`qV! zckpb*9zgVy;JBjFONvIRl{X(HsVSLTbKQ#Z-fIM3#!N zZ5nSBq^ORbaVhP5_icisrwvFLa)$}Uln2)>){}4R<|Baz0Es8#3vP^^7D-ZPW2-IW?y^2=2jWbE~{8l$PC2KX6$fxTB&dNQCErPw4Q(s)^w^xZ;LHRB?b9KUM={*$| z@j|JORZiHZ(_Sm0WaQGhW@5$GiRo@4^+sDo*@y{$2KM;GH1Ab##J&0xhaRA zY}a2=#5LDqo#kaOP@JW-evSO#o`{UK!xj5fcF?R{ylX-6DdewMe+>zd0qE!`Iddt_ zi^ZbrDUwH(oWYow^m?b1$b`&7Xf~mkbgwIsq2&Fv&sa-Wh#B$0e=XGA!NRF4giHul z5`*f^pTb59;#$~k7K8wmG9R%lZz{_GG5_7fR>k<#* zZ>{c<`03?-Fp*a73&Y{Oae)v2>{v(YE;xahB&@Msu2{KWavM+;^m#e@j6^0%n`8Xyo(RE|y$=F>qgs(z;m&sB6spRoAm-ez(SeJw$KVf^(`u zbT@RdS)^JqBN3V_a&MsXJ_k)Vc8$?z1w6rfO-1P4Z{lBNfhNFq&cTV3U!nO%FiF!P zD-^SEJ+k0@pZ>3^G)`@ZaW*m4JWieDpL|--Mf=UAGnA@j+OmM`BbY)}xCkbhqZm6& zbJ8OC*h23y?dDX~7QGYj2|hVi^E6NVnjU{gC;Y?4fLP%z4!hk1y`V^?$&lJaRQB85 z{^NCw=J7^RNww^-KWT?)`%RAztpZ zULg;t<@2`@f%rx9b(XKLirH;6sZGAC6hpub+Wt^pLTgiqY;CjLEa|X5{Ib=)x-j~2 zCcaedXO!^Q%3c4kM%}gr8Ej9XaA>Jm;;&^m^LhgkCjMB_n?wmx5 zCD-%vg9@uvBrg;MTVN%V9z35gU0in#Z~%pRPtgEyXcx^{AI(O`XBN+eQvhB>xg&>b z3l(GWfuQR;!(OJO}#wCG;o5o0u$(MrZ+H0`8hgyfh6=BcP%R|6G!(v5D=Oy!% zPLMgB{_cK>BcT|r2(`(sF7(J9*To0+`YMR%Yq&Jlw}&ns_XteMwZ`N*C`M}CvLbSD zWaCe$qpa*1PlQ$6&pKR*{)jL6?|esj*5KxskQ}wwjPW`DndK^l^udn&VDdR z@H__yxs;kSe{p~yya)|_FRqw4`hK6MYD*2k4a(jH(7d1WtHn~W)Mc6@@X490)XhP! zhN_mi9a3m{*9=+)h#icW(xO-(l~Jpxai*f+ilN7!FP_eiV)BUaRoQ``ON=G?DRD8V z)r^*Za+*zR7D=eCOqD> zAB?4rNL=_b9DM75eCp?WC~+#O75;P%3hY;Df< zSlHJKilxM}=#+A3a9}p?vuf=!k49-YtbYvm#IUFoy2y%t6;d!iT58^Lq`Ka*VviNEc|@P#_X?< zpg8`mXPNBmQ?GY52u@dG7ee~HD#$6UwgQ0o9b6Fa0|$*sLFMkV!?ss`ZQdI?v$VZC z+VBehy$Ap#C|NSXbqCIOiI}i@?5y54uHYW^?7@sBVsW>Z_+GvgtQt9HmEag?Xo71p zOP|Uz@SP_u}UShJHdYH}XQ62ZmRl!QdbJK84PGqYrN?Ni8yXQ1Z&!GgH>CKtt z=_-RZDD<{6d!c-nE4FhkaZX+_*@U`U!eQ)O!lc_|&2lesx#LV?IB&);$Hu5x^}gs5 z_2=6RDi(d)YZdY-V0E8&KZ^>n8|gn(G~5HMz~it6|3uSiY}{EY1rZ^?gHp8UPil9! z#ZpFFKz?dwXlgju*+gOBw&G%1PY3AJJIg_*d{P89#UwYIluYEar0wly$L(T+byX;c z`P8>T#mAIoAr(LMltVKCuf`%otDaQ5fX^4hm&APFxo zFRaPd^wVtJ+GZ{BzUI=Qq!8Vf$c!s<9aW<0tAiVDVn)9K>x=6X-kXVj^qDURRdy|l zm1TDoGc_k|K8dh9$2=E9mhHYfm?NHhb9x>ntrZdOqfLvAI?VmL-aF82d^g|<>wddz zO9|goe-PD^_jCy3l(#Ijs;Nyn678NGi=7T3WFdU1HXTXfTuyPl|M|*dcQXD0{k}fg z&|?pvKHw0tHizP~Kd#_p?^WMld#B$D?cq59`NgQ}Ug-%w_ zucZ4w`M&^alNXwPKlU^37|Ms|t=^@(kuR!ch2>Z}D-BkJ%0eN!ch|Z)V=c)MiOT+4 zw6eE^R%Nm41aBEK3J4I}m3D7SShL5!=4+psi&jqK)GD94S9hGB-84Mh!T${YDx;7< zGxx#!{MuCKhr|WViY3@KqC#VYwYrGeRfXENs3recPYusrudUhDgLI}o;{xLL>5BIaOTwdmQqG?$epXum1G|x8?I4stzK*tOd(<&Z_k-wblepXj~wI zvqv&w+}jS7VhuqXNKw%=HRGnGGKn`y^eXjMg?0mQWn%|FJB{8;G#XZvR+~|)L{FMH zKeT$644?S4>+rOz>w2lsRd!}Ynve$~{9N)D^s@sL(R%}x+bzWLU`P^yj%x)$L0(;ERS&y-fzVL6LCwQrMW;otI$*w4u zn=()33S2-C5}X%grzG>nwhjMq?MA!K@&#jqs)i-pKeeNfRwoZJoD8{AT z!IedCJFC__lu(8AGf4B`2vWWYUxd=zbfmCOUgUV))?O494M74p_xkDGRgqogzY-3G zp*5Vhsj#2er4n@wn#6{aAy@Bu!{9c~z!tnFi@vTRd@ zVb&d!UE7-_?kjP92S1jE+$pcR=ro#xlDz>ZV)cxvTPNISd|AHO>1 ztzk|IFIf|4zu{1UbHHTDLg0Bhj=|1$VIWi=Zou|uNwbodkQVVR5;kjE{F{vI{!+dI zID9S%yq3!Uul2=h zP$5!Quy0Z5H0xxdXMz7$FqPc~&)aYNxk2z@!@+)Xu)g^$*;iuWo{t@Uc{)CB+yoi?ef?BfokG9zH4j57WYeBkNd;xy6p~+3+`A+=hfB2kGP?cDC~9?$kaJ6mm@t-$Z=rS?^_AJ1I6mZzD#MwrDNsMnLtD4I>7SmnAp z-jV@>FTeq2<*v?qP}{~Ea3~MffmqFLH8ASVXjFE}_|lDwWY9a%@?v&Cfl`o-nsUaD zB$hYG?7z-cou0@8ZTNj4mtbf7=ph9+fq41jHbRUq7r^0Tb&r<(7+T+3G!d~va_I6qUGBV8=ivG6mA z9Wb2WtHH27~HL?pz#Xcu%i0| z_#VjcX8aJlL%iCy>_LWQVrcZ7m35P+e%+CP??YV3kq-5zt1=neBaw-T3D(2ZV>plT z9)dOeLxol=wRFvZ^2bE@Z{<5xFNL9dWRWo$C8Y|{H(r$rd3N?nc~NOhV&$G0al zDc=sR$ULUO`x=ZMz@Hu~z&R56+fl)&mMbOGu-pt{?ur8-G|1QJ`nyNEbt5>X4>5snCUl>M#tx^}i0jg{?Uy`yMIn8-=k5_ zjVB$@V5blHdlYN^S36#MGBu~v$COR_E)zoHF6ag(7-On6(3K`unn@?uCQvvBJ|F5w z9IM2~0vnOi?*lejMXV>3wa1CV2<^~sZ8T_{H4Gj>jCIbd-CBz7iwGyg`^Jq$x7wiB z7o>0b6))zblh|9}s9mcY1Xj^JC3M03mh^8t=zRS0qS*XgkKLefuOHaGV=ms6Ir6!q zv)0TXcNHmZmAnv2Rp<{Gq(|DzJ<$l;irBeaueM@+&iiIYG`Nx9Eu-759v0fsLWr7O zhsz)#WvWMXo5gx1xQi5uI_otgO5y%f$pgIlySc`^7m*?lZ@wwJ3dYK(%zLk>5H-`% z7$$FB15%7&s}{bfuk`&iS-TG>yW)vb@=s|Ka=?p#EFN59m=0q4Wd~o|bqza#a)n=7 zd}#1hUaun`&XD+IGZJ(ow9r|O1>!4uGOR$FcTwDgwm6cd*Z~jkN`t-euH*2X3Tuj_ z#mlKui60311L{Y?K~;S845~3ks8+dQqhDK&a{gn59tRjEcy5?@w%j9gL}fe6yYD9QxUtwaD!9Q#lqi z4A(LoH1p)AW3Mudy7Adilk*vVeW7Bo%YDzB(P)|B?-@TeF>Qbjn)&z1P5Q?vOW6I{ z3W2FXC*tdrjs&V-=nz}5NbWk&sBa-vlrxGHWyALYcu>KgEzb|1&EVJeXtg0eTriBA zEUi09CWlN^zcpNjIPnK(ih7a(e3;E3Kv&IIrAuuwjtmRUp|s*FKN>UYWhx)uiurDT zdfb6$J|2Z8_du&wBH$zFvp0_$qWi+K0J!+>RHbmI>_Epeq59~GsVN`~$GSWZfXIfE6mJLIixYVe1ai7l9WXP~c}p~XFR-WCW=T?7%(X1x&wgSZ zzQM2|J8%=VVy?PB!1FO$5527~@>6CBkE$eS?a&Q(abnxWgZ@A?mhWE4z`N$hiWm~n z!39IK=}U+saAWJT{*Meu855^5qDG~ILdc~QonbjsCU_i9m|siVt08~iz+!X&AFNB4 z!U6adFe21oBIQ*s%aF35U!w1=WYZ5DQ6)UKnU+s6eA5l~7%3{Sy7UORWs82c?L>nS z(z>ol*J+15e0o99O9Nw0vf*{_ZZ^Z*rn6j3q=6YL?-?>D(a^sn;(t%^Yfgv<`SqJQ zhbNuve{1>p@%vq2p}K@M#ah=fJJ6RU(v(-6@Iu8#p!{JE*4J$Uvr^IBK^1BIa%NBW zbCND4CkOg1gBHZ$T>_eent3rwmy^Z?5Hp$z66$E097CrN4Ne*#l-D#5sqO|v7h3mV zMfV1Eb6{fQ5TYqevnz(7hm`x4dNu0ziDvZjHj8^Y4r{sQLJqx3o}*!)E5qERC%+Sv zQa|k2k|}oW(NRM-T9h$-I_;;HEnwuTw#iol6K*%W0DHbV zhYUaQYn?VptfmNGi^rz24kfJd+p-9?aWz{klPs#J=*7VyXTgvz>rVZZ8Emr;B&vE6 zV_l8d48D4THGVA+lT!k-o#7-uuHM6r{o*uOGG~EJgcQqo$JFFr^6I*s&naHD55_X} zJS9ZeHRB$6{nb{ruur$Sg1xtUK*O(HC1(0Y75z%NZ|}oz#2lZ>1Gm2)FBBk8f+tT@9Os+ zJCQ7VZ9zzZ>?2{!{&u3&F577kHXssilm2kX6U6kEV6|>Srp4DMPldrM>&$@i@FP|F z6;)CKO(4`bVl{$^Xz~MFl|SWAL zeNBUpM}-arUiZc!PmP5_iy$AUG1tFLk~v zjl+w>bRDz{qWf0j0%wM(gw<~zjyEYv*ANy+4E~IG!A``}&9!R}-9f(9o>^$eTMv!k zcknFj7!Z8F#KUmP$hU7f*!b*9o%$=K z9tIQVOTf(x&ob^KwBaVPom700V5=5c|_81L&$v zr?Hjr8nhXBx~2*f(#rM7Mv32F;r&t}`Je`Uf+&}mpu~(em2QA!F;(FFk-KYG^?i0s z&yiIh3fZiJb)wrt1;MKoTkB83H`_Wc+j$cUbYR@Jnpq_>wN==8;e1QR4+qs*OkAq zrsw8kpF1fjJ*`rf!xQdtD|i2UrjI`_5jPJWc%!0jk1H6KCnsQJfSJurWTxi-Q-kb~ zcDA!DnO$Y`qO~1Rtu5P$Fz_hrJ;%w#BzX1#{Xm)QTd95N?FosC4-~j^b+|L%)4f=z zEdp9%TZMR^JUUN5K2D5Ct7vI_Q7O>g+?#Azp_sU&jqu(9gs7_5>hw~vOtASVr4}^A_YSA{mVi(R5W-D0Hj6 zaiOweslKyn7Xs};y&ceL%eh>MRNWLTfdEH_`L%fKr#0i&{H8Km&wIaPtO&1~NSys$ z4$G%G?pVereDX~F7*$)d1+O79rJh~CQLEgAWI3LCD`Y{?h&g%2k&xhS?9+W^wH)Vv zT@zeYP^*sbwTTw{X{nY6Wcm=Ylo;bB85cC|QGc-z`l6x>O;0-GM#59uncLTlEcbZts*1Oy0_9H6xG`~UZ#@iNNB2!hczU?kMXblZY8Q05 z<&}t6jaA=teE6YIwFFuMLJ>g5> z&u~OS^$7#kWZ&%skJjp;2LW#Z75`C)@Y)fy9h>{7LLi3gAp!FOe_sEFK7rVQ<9?oc z%#ni?2;CtPTW62FpT>YJs559S_AC09utKYrAHgtj0@lLrge^NJpka^Yw3Mz;xEf&) zRE4{wi$?KTaAHtGd#>l*#d+-+{@h3eio}_RpQBg4(@YqcL5RwIVs`?${j%m@{f!u42{414mtpz~_}(`OKnR+>AZbXRY>& zA~$+xlj4i=gfx2F(q^m^@L4B-%Zd{5Vb}{2aVV2|*Q~}|zKy#{j|z6W6Ow}bm4*Rc z)7KjlB8lH7^EhuhBM|ARKW|m0&TLFKUkZV(lwXbBiNsrDhQ#6(1H?zimG;!9pWm)T zUQ__H=LTPzL^EyhvJK13f_!9GUlu<5@rwbn% zSkVfg|4r;ckj6$->Q^70C||gLH@QtEp+N2@=wm(i%VJNP*2`^wab!Qb?lF=<1?MA? z=zg8qnWpW>Mi3XH$bBc0x)5fWOzm>$cp#Dj?7dy@J2Qgj!P)FGQ6fj(^$h?DjeHh1 z)4V%?E&}=yoRym*e*_Q-YzT+;F?2T%posvtLTNu}UkO?yVcC@$&dY!e->FXvv7AEc zp^S1BkojQdQpE)GEhnP}{{%iB%Epv5NsfaMuLq`*R2>rrL>tvG?9&?2>W~?)E(>0Q zzzEFuNI{t;i)@bGVaZ`dI++w!_P!6kW}`<0F(-# zV>(W+TVW(zvmBrw^^i)+6O*e@zNs%TM0LUAP#+XJwMoOZ9McY^fOAvBQ(RTu3~dZKUP7$qvLK+wsJS6m|;u*Wb&g)xr!BB=wCrt5bL9f*tNo6L&W|5Y;(ie8H9=cXOJK!v~!f}XOU%o zOhTwGYJ}q7aZ;tl7TV2#9cMLt*;y&zCi)kQCwmW{?E@8CksinV9#)Q8jUY89JcKS9 z_WcCq#kWYuI3Z*e-?Qzp{rWKDlZehPzo6Yqj^&*1nethz7WiKFpBTtFp?uy$g{{;& z6q9WTzQvB*x&67+7=BLQ{MZ_F=wJa%L=f_NN}=UHK0X?OX+@Fwp0qR1vj7AWA$UJC{A*=SDy(I6G-~|8_`@@4q zR6czHc@Q2CRx?opAM`~)ivp>jv+GXOI6<;N?% zXB7-={E`Z9cnQ#4xBNt}(Wf*7y_EL_AsS-&^r$)PW4G$@L1)+)11@y8ffX6t1;I)t zsn?+Euv-A7mQcW&x&(01YzTReA;mrTg`0KQY7Z(=KtEI7?u!&qoj$viwvhS7^dvqp zM@j_^%V0*YkP#W-y^x#wW@?vrUuD@)-Z_son{)bh8N@%HkA9!#>>Z|7GEu5MI+yI? zKGxynH1&F$O-_n!Z!afo>w_}=f32RNz$0Jko)WvHwQ7nb*4X5e0=FU*jd?-Op~p9n zOq+sl-7V_DcpD1J#AeeV4Sy!%;FZ75I`=D@wv%pB!XLL#m@nxUA^MRsrFii(`aJ~d zWL7BVKo0={QYb5S99mWs7+&KwvrUVuaQZr=V3ooS0s#Mg853!Snr_#kf!y5KHlc9e z?KTkfjEnYjyJnmpkiozAk1s^^N7NcHCNCGu8ZxBMs#K6-ObBoXukua?B;t1il6}lv zI;8@u3t_K(BLrh00uJO=l{=H_1P{SWUNJgy=FN9u-tx?Aql{;KBAra$)Ih1T8SrUP z*qAh?qs>u6Lhpg8DuIrptP7`$^@$K)&WXI$uw?la$a>B)lroqoc7Fa4?dKbgV1KCb zy_BBT{U0XKSD+ge@Z-sW%LGEx8i%l*XDzT>H)*N#agZ6%JEfuZuYGr*JF;ofOIA5d zkWNAh`SQ68Zx~;y2edm*NdJdIaYKaCT6k_f%yU(rxTE!E!b z!1VrJF~qTh8hgdzzhY1G*}_X6y>^w~BEJHTBJnZ|BpmRvjOr=_JUjV&lfrISVY`SX zf3Kd}j60ZTA~I&|Uet8^u)jsAtu{fSXo^?ga*NJde6==Jo7p01Vqk3HV2iBz&| zcNfcq2*DR$XKengHo}62EmW3zb6uurK_v($BBEVj)E}V?jQ7XtfQ+w?o~alaF*m=* zF4|-Q^CO~*4Tl??F@8eA1Sl1Y!ykl!aIr)R##RYTHY*A04)Im{pxLqvz1Y(<6~YP3 zTir*bJMB$d3?|UgV$!I4PZmagiXG)W3}ba!A-3nZK5X4x`N;uBp)CFqkQ)zvNN1CD zCD`Gh=cqCJ(9isDNao3cv#$#bT{rK%$N+z_3k^@JZcY%Fz7vlan*i=B$%&K zn2D}+k{#52a1fP&5QI-C)z*RdzNb3uoUa*BcfpCM2=nxO(&05OD>s%@nxs_Rfi8LFiN+$&>5Jr@J<&GXwM+tuTl8G)0Jpx)mp>pf&`zhuvdO^yD=kJeN zm6K;`9)ZkT)D~ZMFfn3gR99Rcn372u(#cV`5az6hLd|zE6^|dXZ8j2_qs~-qMV@>t zRPOH}Jw)^jh--a_-+08wQ_PM!mgL4;&1Vi3=15asPc6rrB>GKsBjr{d-!4W)>E9V%$y1!$J(yD`p3TJPwxRT{_i_!4WroNY1A7 zi_7;luO)c67-zA+hJGdH^cc2OgQGm`>ZB`K*)R*a(IxmC_5ql($+O$o_IkGx<@OG=sqF!ZP9?Bj`854^5_z%fpB}Yx+;B}yc2*0*}467aQi1a*MM@Q z1FlLND-+_TKt;*mu0oS0=KgcN_@fNa0`~AMJHwnT@h?z%I*L&zlDyAv;gc7spga7Z)(E(H$UkcS=(VtW1KWEB{5vBn9hGrZr3A*!~j;PopZ@Jt2YZ(pw$)E#h13_}0Fv z7>MOxKrrGTFsbJhsME*w8tm>WQq3cxWu6t+)}xv$94TV;VSRiU_ULUZju+BdxYd`3 zIt&i(qBD6+CWASP2Uej2sW)iROD6bJ5N36q&p3MoybWV5Ggb!t^teE~pH#A{oprm6Yf4!2Ft6cM^|-LAn50|=}WcD!kd zyBeCbWX7U%1HSkZ0kP@ZjlXy$9KmX8vZHQMfZcE_{={Wn()g+t|tm_hI9}cMIdM{~f=s>Mqu2jjiDYk=g@F{zF>TN^I zXk15_(w7g-7ERuR7}Ev%wp~T~SL2cmx_{g(|5;w#q@o53{?xR`C!&E@{_jko_yGnCq#?)D)e| zLo~YP&y`D9N#sDKtjXO}@&WD`aU`XKL9e26B5XB<636gW{h3g^d~30?mNqk$Hdr<$ zE(I0K^uuQ*a!R)&StPAfxaKyfxIKiyi);lA4)&UjNXbxYN*13(oj}J6UX;y$1#T6DB zRgzb_dOhP>v7DVQi#3|)Z_E6sZ7~4X~2_*q9X-!FjUSXE@j#QpO;M0Y*6)#;S zWtlcJdzs@&Vtplq`A|5ijlzdBV8*DEd1VmY5UEE4riWYrZ|ZUv_@FTD+l{^FEjUr{ zNPApFDA8_DqH^brsTG8w`}0A+GtX5VpC(#yI_)~zRME4Tg>nzmdQiExJWif)~iZhZ4{E?2j9Ny0P*{Ub8MvUi*#C0 zC4SjjRV&xe0yx6YVwgR}l_ToAPV(aAF#$ZLXVD-|s0o)X0Y#{2Kui*KOA}THb($-b zxyR1Dt`k&Tl~sMkcwJ8qd)vT)njYmv7u!Q|2v{($x8TBNx~#1#J8D3!`%;;(68s2b z1-fB#3J-V2E11$VY)e5VCcg~$DKdP#&27h`znvGNsX59S36!_bHXp|HnCnf(BI#G)^El=2=$6r zpIP9~0rnsNXmM=t2(Z=Xthnh8HzvURGY50uV!yYE1WL4->xUW4;OJ&mw zHcQKiPavt9jjN_(k_%usii1tv+NXWreDeXI$Hz@5ba$Q7Ux@>oZ7GPk+l6r3R@MGT z|GIxnz`VEKM+#|j*owXupM5IG+Y#5X#ak#<3YO90O|we$X`ZqJI*Mr=5N((np9uuP z^z87KEc|eqUd2C2WhW;1r6WnqP0#NJ`NCa&@SVa?fiP#Red&su&@cuiOa58W> zIe!wn{|r~czNECg)b8*TLy-QGP2?h#WZsmbfBr-tk(b#VrxHxDmvWUMs0OcUFJjnu zhK;4TP;`{oog(N{{jfjP2aWo~s55w+Adr@-MaJHe(No03$v;j-;Id3HPG6`-pI?}PWBYX%nNj4r87Ke`2k(OV*ZYtZ{ZqL0k* zMg}@L$ut8U7%dZoUgN^Ra7|PAI531@RAu$KI!V&RQC_6P>hV-|Qz2B6tl|iRB<9PG zb3p%OB&hjhsSHWIZ8RzQzWU2|o8!ZXDw>?hs`jeUo_`)GpuewbX?U=l2LVY^gr1T# z+yregoYY@?0^(CR?c)a&lkXUYz#iJ(-d6bQNpe~)A^FcM{adXN3PQcK1Uk}~A_2d= z19o%aIC#P?NmAjzh5^5Sd$6c?E}P0m9|2ABS_?Y&Y83g0FRFl#O@2M7{( zR_mMYE4SpOfg##ynyO{qCp+6`2e7N);G{5b~%;7v@k;t~Z5) zpv(|Wo8&4J(Tl-vJ;fDE6e``bRfcgIHkRfS`ZTXg-LDFI)pdtsQ!u-finb%%4C^Xs zOjV>TLdf00J2Fzcb^4w)*PK)++JrBM%a{}1jwgz-pj7p&rcieZCMaWK^P!xdyUjsP zAZUzi(D9)E2+C(surHIsuL{UXYyjMwsObWq_=pOpFA?~^^c!XJpZTDhss`e9ZG0V5 zUmGe~z5;KIWlK0H+)wJ+m9VRtcfZiQF9VM1%EX-Ux~+dH%lzVomwQHQm!Bl zVxDP`<}e@jswmMTwuWX_gzI^i8*gM%!B;j6{mBpBkeC>!oC>|BqGocYT4K(rybO3D z%n2Nseo!z0#c_Nnlaqw131?!ilg{4iFupkNszn&$9;4x{&Xb!=Sube4@1d;2XKCKC zv5g*?vs43hlk~u?0L5~;DH|KMgl??H;jnqojYjyYSpjn1yQoRhq@Fo5$0j*dlm6;G zEroZA)@Y>(9v{gf>aLBqRHmuzZ~+e8W*ynmAwTJ1HdE66FLK~b9K{GVJr+RKO$n3= zzaM*A)hv1AKTjGC;+Y?c2dz!%MA}0sjmP6?^uJ@x&mFoH*_(JwOc!n2B zyKjHDCg6IB^;N0=0L#uP@-rb=VEWjpx}x4|LWT1n&i<;M0> zxC&(SeLXS@6SraFsD6P}EpOr)^$U}r*nKe@hNYDHnBRLLSn4(_p*Lxo=BQ!Ej*N<~ z)Res?C{<_!k+#+H>M->AoVwPSa{3i%L=c<3IZre1C#!O=CSy!5{?@U5Nu7NdvMDsp z)_2{N0fz-*H52;=FJa4zke6Rqy{FL>kFAXiqS%=R;tBXhuFRl~m`M!)mP{V3M~`0Z znK|;*O3Og(_lBB^;f;|o^1_PM4*syESh0YFM>Q7sKax=4Ka!AK%!+k~$#?31d~vH+x*(>rT2pzMl_L#lI61)fQ8+LnORdEzr=Q5{oo>d9@f;!+T|Tv*9GRY;9xl_F4q$;{|Mhd9 zzhtJT%(<7Igx5p$Kob7(SG!C?l?H2S=CMt0Z!j9&uT-FoX6qSBo#>-a5ow&}7u;{1 zK73uDwpf`6#Vp;~Ow`K*<|X=CGspdbsl7ZptwycUZ~n8J^v@d%g_CRF#CLUGt$$Ec zo%|CqUphsu>c3NN9`^@~+nXEpr<->`UbO!%%Hf}5`Q;*xAHu+qj#}@qjdE$HJ6yi< zjzOX-s9@utK<;x-@X~v^L}vMlvZbYpp*cJ#v=ByynO+d-mC-7vNAR_Tp_r}o9a|_! zHs~17<%nihR;3# zrLV*sbuxyt~Bo-6n}P>GE-` z&I7oSg3}N#Uk2wIGMRJbXG>qwe{J8x=Xx&pCsfwI-(4sbqR41UJyrKxoq$XJ%d+2O z-e@?{Z1Jmv9TJg9IPPp@qS>#)Sc|(bjk>K$@{R57!qKq|-ompNJJ~nyw1r-rtc9S@ zxreTHoXqKFzT3`bQGP8i)^?epX~qA%^GJjn^CJ%9-#3Y@`uuJY0aFSuK5t3=H1?chFn_!N z2>#dOvWfQP^!=oC@j7Qt2V9TlpYQs7iV#RUo+_Sw{?UqlLp69Gx!!SLDvTl_(G+Qq z&I#d5tQe;$pol>QF+=n0s&Lv_qTW@SGwVJLDXLOOvk)p(&hbkW%`mr!WRM*0!ysCO zfDoKdl;1<9*)Ouxk%J>LGLqEC;nMF1qqjWA8c)yt-#=etF^sGmzU#mbg;m{u=)U1K z&{YgE#>6N^&?cEwhi-LpruFI~i1%X_5^8}^$wRQLSMZ@N9ghW#ORM=zPN6wRrTMN; zN`X*n7v@UVOtmh#bR=o}#I(vIj6Nps72wlz(ZhncFQ>)o*``g6MjBLmXWqkipbCJ2 zL!k;}2_o*C20W4M%w#dJqznK48W=dD&%^gulBI7P5-{7G=m+840h?_Z3d+dpA8nRj z%7o2W<{*Lp}pMP=Vgt?lm8dY@u*$=>+?==$<_D8Kjp5)q-4lqFPB)}b=_I*&wF8jV!c4H|9F_zym%+UM&`TqX#@?w_roO7S+ zzV7R~&-2*Pd+v2L4J4k?8J1Lfz<}nV*g+wHr-ilrId{P7H0~0sEjr*t{a~CzCmHpr z4rt_f{d;7w>Iw}_TVDBiI)Oo((eD%@Du(g29*-3%Zg-DyicUH371!_9A++z1e#14D zqvXJm-AN=TXuJ^&JWs7~47jr(aPdbokW3PNAZGAQ_hY%FEQOLST_SAWhbSfI&U*bz z>B>d)8SFG2y%I|BQqMxP^7#$-f7WZ>$M&k_!Xomha|l&e-In}L5s)x>0YBoNoyHg> ze)(#rXe=${#6bFo6xy%PD@cv|HJiQJ%%J;xDDuZ3Ku?y-UOZ;pVSV8zOQ+3kl0gV z7S!&tZzQL+kKA34oNL?cU7d8b_U6#okyz+TM#inj7SAl^>?_dVP2ym~|KeC+uq7K9@~U$1se%#lma{%J36DS_DRjX@bi1#3ZP{s|(YV2Xzfln3 zS~ot57=7@wMjuW)0_sVVGb?DeIM7{5;Nq^^Rnn-_PyNwdY4=#8@@24ok?qW4QLXNJ z6FbX|8)FtxliL$W%ruL`*jHUQGu8MW|0=fOX0mU*n_@Oh@>~aX613Enwfj3-Q#ZV-E7oo*7IoX z&46=7mZOf_ua<@HvqKp~9G@k4>gVsorM=nLMmf&E^w^oaa|s_+7dQxv>)YZkp-H3I zl_V}61uPJ?a4x-7eG|4HYC2J3_^=Wu9b&{xcgATlib%%3l=4afb0*n7!9_WV>FEbA zxd8UTKA*mNjmL^&US44e_j&cw^-f)F8k*ha8Y8sVB%oPM`5;de=ivihnx~XRIT7vg zHv^HbPd7jL@+^d?^p%g$Tm!-EnPw%d>$pQhL)U&_)>&@f*0hg=(;e8y=4$Sxl7X{}Aa(aVakHYMV=}wdPZ|me?MNO>4S44vIF7Hq4Ujs9tryBj7L@pJ{-zT6Q$rF!5urs*$k` zRUKf6d;CQLo^cw^ozE2%+{iyc-TCc%#M3FyFQFG?66FK>?U|kgw1pk4Qrh+==JO6L z==JnztwwzL0cH+nP2Z`38;E3+uxKzT;7 z=T|AVZ>+e-9jrP{XKQp``&64CrWD#Kp=;qb;h>IM%(?xR;=6k$fe)qlZiRlnMCKkQ z{w3jO`>wWKfwVJD_u(T$#Ec#muRq)0c@c05pd=!zRh@rC7i?e@zZO13QTT~r+As0U zqfg6m_QC;6#Ii*qyD^e%sNZgtrj#?UY^tJQ|`PPEpgq){z*8*Qw%VQRNuIl}Z~T+W6G~C+mPK&mz+)X`2HY9+ z)p?!B#kcGTP-ISil=;51pIgR5uC0l!529;b?mXIluhD7JPiV9Szmdc_lR*_KZVeAP zPSioza{e(=)2}+Htqy|g87sGnSww^uYBj#Eu6de#$Nfg9I34T32F#=j1presa5JKZ z852C|xwb=5oTEW(+QMSG zAq_vcDm9;-=CAHd_={l!SqEN*`kwIoibzDhuPcbv&NZi!;@v`*)*x4W8yoL3_)|U^ zs6aj-{I*U!2LPPJe(hZ$9t95QRW1-?iL%SVxInP9uIRq41Nn`h&G`$l3HDv67?T5i z09h~}x{$Gji5LVZXYi_2NfiZj0p+sZHyV7eH|#4}8{3!4@{aS+4(Q_Q+F}lZF1fLM z61qJ2;`5D=UH6O{1X~<(YlV)-YWLB7UxGAvP4>o%fOM!bv(Y5_K z&is7#r+L2{eJfub%iH&D(|1{qX(c4z>y7DtfVS4dfaNEQ>0iKVL@Sm;**iPq% zS9S&N!t>lmseoLI$#%zL>Y6mH^*o3an*AO8q%omA3>l-*!+rn9YZm)?vu;nAs_^^# zK8H!9Q)|~G#eD#N&IT(63b#^ zaM#!9W*68hI4@yspU(Dl=ag`S?L?(?aM!zQXy|Xo;`GUE_ty6aX|?6i((o81QPr~c z$#-x#Ax&HAYtt8&$D*D&#TE}2!s!YAq1@?MP z76)|ekf@dM>W{I3*KYOp*N1^fvOMc*0rIe6MY>qF_)AN+@%nIuS#i6^EKzrV{7NmV ztSAYlVb*HlRcl=JP-CQAex?h!4UyBAtCj1UT1I0P_h)YxX%HQ7#R|5lb>-+(^Y_$f z6c@R7(2P1Q@v(vW9lPW`qaMczv91!#fN-u9oSbtUY=Rmy)uq@BQ*)v?+DM(GRrn;n6CRq@b0>RnyZ;K2*=@L#`VWy9^i))f24v0};7n4nS7{8Q7_8cZ_B-aq;pzn)oF{F>^V_O26S zOUz<(=>SF6v>mL5^kf?lyQuqdbjX2IdlNfmJEmGcyKjvj6g>YbAHeGXDp!mbh6nII zY}bjtiDjW!_>^MSJ6qFUiFgYkMEd-^DaCq13u>^?xs;PaBgKvI%Ehq-Z!fAljF@M% zS5E4YGm9xb>iFn9Bp8)r1D-qc5wMqiIgu{ZR7qqRAL9nij2D zVH)#Hk&ALlwY*=rZ!HqelrGHz?fH~?P_vg%LF{9%Hy!jT{l~SOb$ir+%!HeJ{xjr; z;xH`6tj2M2C0O9#rc$TJ1P^dpc_h)WhcWX_eg@y4_FG%yhOLSFxes~1uKgraf)S;U zv0qsTW(5-W7ho?MNO3bz2%F45x!GqoUJ9mL?v4z#$AI(pyPYQiei`F2%E@D+=c!R` zh1AY_Xfu%!2-Ce$KIY~-xQW^m-?k6M(&6FE&-&0F3a2sgen&r+J+DRc_1QKczc*yX zWrQR*nC>_yNO5=8_ewzAK(n=LA1|VL5MO(XuRkEL+!2KGAnIHnl=eKBsp}|+nETzq zX|E?&UdZJG!Lo-}BeL)tG5Pm0*x?(?y`vUS(<_G^_pZ@rl`*{f^p(f3IcBZAZsI2P z(FCIVUwU~Cg28DT#TBGd-0OBa3tn|xT|XL_O(-{k1R9BIhilKiIvamqwVh3WXR_~8 z9DVBNkCl*4;E|J@gAmVm^KW16VYYbp-60M$k79ma{8F<~R&5wSIvfKU+gurE?X0^u z_@{kg>PsX4198;O2oG*0PZ4~&feo8&`SmN!%|GNIj3Y@rQUz{2^Q?HT=_P68y%rFU z0iMdjAds1-&V5%a1UwPXa#a5Sr`09T0VsBhE8&u|SZX2uuRu`tMR-xTEHLh|+m3K- z$gESe)s>=L{eeJw8b5_g`jYM!o-jmnq{^NzI}i2q_m5IT!&{OD*U*fupKn*OMdVYI zI9X?K{P{i!)O%m<#n{LdUCe^+780{xTabNVMQ`*v+5Qi<95li#1h3Yh#5Ic0o>5YW z++2&w@1I}Uc8>QNwMUb&(_?=AhS4!IAiw3l0bP>f=Cz-O$hC<6F4HY*V}U`;R6q4F z-`$cUHU=IR#)&|R>y}wh-d(N3WIPWvo0gdZ3ZvVtMxK9=nAt{@4TwkqY`!+&VMn}N z`)bN~dv=s>d(eEHyfZ}HE$1OMtDRP7rH01KX`;CnBiP2w$HhW4uP++mEqSwy< zQ%Q{6T$RvM^47a> z?+j!%E(v^3+hOMozRqP*7CY@qDWY<&99nf;{cb4K?+>wh&i3sLIFI-qztl@Io@D+5 zZ2vbP0UTDjEi6B7;Q~YXF+r^_wQAJ0_AE)$(-O@J z0>B2E`V??IoQTn#Ezx5)|M~C}ZjL(~5eK_-VnTc9-sySHQdzUHi4i<2EEDoAeanYQ8Vg(eOmJ(Q13mQ@5?M!IPa+lW%KepHVG0 ztP~C(K2WGB;pj`x30SC)qo92NhU{ku%++xgCnOjUc8-*q8(7rZf&GK%BnqEWBhl}L z=?4mdETI2QrBQ%$-e?tBF1f!yq(a3Zh0v*Xd`EF@u~l!;RHH}NOxm?>j^fPLfkC| zVc=#BkjlzRfY857cUn#8(E@d4agIB^Q(wl?7``o=#l|m-E%+|_XabeY&Gs~Q+J&c2s%*O% zoF-U>Nz%_K3h$!7hH(ea8ksNx`H&~)5;+(X=Q(k27*?r^%^QUWZQSDKs<+nEF1GQ` zZ|rTcPtQ~$TKck8f_}wBDo9CrKdaume)EgnkLHWEvoXGD6+Y-OCx3dBI1b-J)Fv5=b#tTnDJ~#lG z^~2K#lVHQ#3|DqKK75ibu-Gg3|@(YSnTT4=lecG8^uo!}roBnwiDUbL%Yx8beXJP!L<|ar1EkD`v~& zTI9%kdZ8E0=M7h^zjeUX6Pf^B3)F`#TDz&gk7eSdJuoxVeC@Q(EF5sT_=p@Gr)q||+mN3yc5DV-7*_9#060j#|Dv>?N4k%QeIZ0Gr(>8!i2 z{kf#nmhFCN#)UeH7Xw`|0?R=rE>=3O^@s79di{gW5xHHUt3znESP*#-HN?*;E>Jq!rn7nErXrn~7h;gPd)<5-jF`cByH1rwUA zwJZP4Ld>O@0Uar$T(qnoo2ivy=ZJWJgFkvp3s=esMKZ zG4-0T099BaYq6oVaTHqqnc$By7qX`4AIZ;Ybo5^Pq65)93_}`~wxzEofFlUatE}4E zYDjtR_D+f0tF>FnZm=k>$078Q%xpE6FJ0oK6x)5Iac?m&rZej;ME(olL~dceH~6jX z&{<#mba`(-xA@yVpWDK>(lc4)0SR})ArW}S2#RX5HooxLL5~!|_*LQB9|KC-Hv2n^ zfDX~}ndl%CTM}5#Z9fFxj1|KWr7{S=&S2Fcm)~;g>2ERWFGbrjJi^S?O?*&@Et@ZI zbaa{&>c}!Q=1{H^*Zx&F->NChmzH@tb0Zv;j~pTKT-cfzK@4^PjLyKbm_hiS;{np? z>1bKHl(>$VMcY80>{l)%axRTg+1+x&&Bf}QyipEU-O`q<*W6NZCm%f}eREhSP4E^S zx`(*Sz5l(jt39YxVD8}Yw_&6XRo4%^6-Tv;~4|Vx%digj!B^l0LK*MjED&jwBLy^gIO}Ymz6K5oY=u$Q@ z>oWh5V#Fil(k^FKlg|_3$*22MwZ7G^wY4?BWcSBoV_K`GrB z34|6D6p*$p*SakI){v#XzjYy|&V6gSjjzDKAa-Yr4_ld~dInz9UN1{t@vK-hFnsj7 zT%m?*(A~PHqVRQq0KA~%>l8O^e@~H%NJ7KwpEz*mNfO%h8?yW5KvKUS9JlMbZG86=KIk3zpW2;P6ZJeeY6*9oGYKX;@fTv z`IO6RVb;50WL;3)pIDG=i>zh0qUtqZR~k6N)FqD1%5u0!VWo1*8mJ?S(_a~|or{Zj zS1)%`Ak#*8UHio|C;y_CCE2`YraZ{K*1l4?8`v2hfA0(yY$4RN8S-1$O8i6QO*<7w z&_c6C5dLcWB)r!OJB8vI!uXP4Gh)(Wn}N|HsrwHSuN+rfBuvW01S?XAzSEbCrhnaP z>~Q%0?Jn**zfY6piaEVKf4#3sUIw9ju4O1(!RABj=C)3^seDYLCy9vBcCcHe;he}?@K1to;%j1jBA;a zYjp&U*?a$`0*TFQVd4mArXKfS5lWz4Z`CC~$!j=9|D7gw7NHhQ3kHG~G3AmO1u7w?-9Zqr`ZI-H6hU!lr&vVQR>U3F?y2Yk3QvH zPX&yrQpqA=@Ri-j+l{cI4QD-v;DH->-6fK6Da4(MrZc-lfDFH3fwz;KJ-w9#224Nr zTfc@i>*bvU=BZh|KacQ3@OjMSpjQ+`dw+;$en!I&9#>NGxgpn~n5Pxw%T>LMM_1(o!j)rsGAWZMyGn}dcvr1al8qm!;7Q)+ z0ISl^ukxucq^)P5`A@ero%-Mc#qnBTgIc-zFiUXDDZpOm|BjmE+1&1#c_@PzL0+e4 zI2nrgq0IR&WnSFrb=h&y^AolVcfv@Zus@u`{Mc^PDNDz@ZOSx#E(VfGASK$kX;$=>*@$k2aV*)0qx?l*Cch8Z1 z@@6FO(bK+hv%N`e)!V-^nr)B2)BF1cU}0TGDj-0m;U@La#*KEK<>>Osb%BXAd9qXE z-zi1;*J2c0C;%7&wxrcMRfHcNff`PN-HS`^T~L*v*w|9Z>}G_qmz1OoPPB6@z@je{ z#HaoE*I?^g4y)|3!%%0PB7LQJGOnGQKr$#k)bSQOsZ;Sni_Hy!8G}T*hM(y!+Ceig z>EHE>fme%hIxz6zl1XG2(4=VgCm1|2tO5?4GKQ&f{^VeXF5r}5zjskB)6@6+#fUM- z>vK3Vsk{Htfz%@zs3R2ZX^+?W)M=e%wF4zs&GMz#Ift>hvVV|i7Ge~~4E4fyg3TuJ zz;|CNy*6A$)TL`S~sU2Q*l+9lKeqw5xWLJpeq#S`*_!{| zC}j@!f-cGbV+#bG?J=o3NtIrb{n%uledcy6AjAd5=Eyb=;NE^A32#dk=FU^o(rVJ8 z**G{ND3(VFO=-;d|C(wNCL7z6T|iIK7Tc+MTTp25P4O{ak@V4E(^zIOYQ|x#o#s{_ z3?(CiPeEU>VCJ9JDN?9XDDcmYK}zWoxsD)DhXtT{|MD|J9A$9 zCm{knHFthSKEMG#+aHK<_^+Xc?)k)hbH3E3n)0?n{MMvKB5cw2pA1k# zPJiJf?7i!;K=GdpU>~SkgZ7sRHsOp*;Ljx5M=G3v4dNar{?ATFd`e~9Y5Kum zYbJH`c+EbB5HTE0Gt(VHHzFkP+(&tKe87{FUJyQ->0=`E|Di(}(?TZ+Lh}0|i})M% z*?(0%euu|PZ&EB?*$Io>GLz(PbM=QVUApfi>nHX%8;~p@sUSwaAbu7R+7NzKfVk~z zX5!Hz5?0oa*kv|8?^dV$n$51#7t zI3Oc`_J4%BEVuN-hfmp|%N^}u9)ah`b5ZuhCvk&aMV-S{JSwKD2YphH-5QcUr{h=$ zO(JeC;~~fOzbFqEQz$zjc&5<=gh<+1hjcJ5*uU%I%PiR2LtXW=Oq-$Y+SP-{24sH+ z6rhUn91aH8`Lwpv)d*k8Dsp%E8-i@GYdXft--)Uaviu5_8-|Kjn9k!F8lNPt*@;%~ zV1eqdP}~1MB7M)bhzR!*!uOJk^@i6T{8L~Abg^xbVwvs3E_NHPJDew*9~j`yO>7Pl zl0xj*S(=_Z{(MRIO9fj6ypcAjQHNA9+;szb^kEgDlH)|Wc``qeO!Y*^IPXz-oQG5| z{1@l*3T|5e#n-UN(GAIPWub4dp{ zY(PlvPY0xd-U*`KLKff61}6<31%32)&~eH=qUVwi4zuCE@g4r^isRo!G&9M6gT98@ zK3W_H<&w%+mmceH^}Vn^9+M=K^Zya^zFT$=JCA1C^bH=}2c)=*0qYgv@4T>ZtQKO2 z*H?B}brK?9YQ;^RAOm5(7cw9|`!!t!I64aVXRm5t*_8I%vsXmc{$ga_Nf+^ql(?hG z=lxMix^S7G%m>fveF1_a}wg1!rss zg)B2pIgGh6u|J;8SR$=i>HY^FGD$v?+e344-zem0yV}+glCNVPwZ}i#SDL`h8a5Vz zF15c)-A}f^7jUkk6c;|u+ulNwlamjn%Cv$4W#JO*OVg_MjQFKL(ih`kHp5X>``5!{r}ZSM@pI_g6Q$dUdUR- z&f(F2YIPrv1mHI4CYEG5>-8tx(K^}Ke4;>*ldpd4xrrNQ0qckRKPVPrx>|}-z|o|h z*Qk+KxHNBvhc^w0-1zH_hZBDFkfGM`S$hZ3Cm3pUzav)L?mAft!g9&&hHroOu{Qa} zzMa4Ym*klXK+!L!Et+{64dXg_7n8EX|53xjF-62UXztU+t4nQ3U{ljO0C2l5m|i;u zZfuM@;d#s!yDSEex85(je|{zqs`1RE7m4HCUYt|6ilXlrw$8P<+^?z~s&MPs-lMN& zq0wbJUw@p>164`8mbd)=c>^(LBd9|)4o@B20BJmbVXIAHvhqP1QzrkTyWxe+^oNgg zPoICff6nqUv;M{4uhbVU(Gpc4R5$ zZf$&kB>gxyU*BC;b3-Fm<<78Q6AMbc(2ynzV=BW!b&d8$p+1G#BHP}=h@dJ|w))FV zR-mi#Kon7vyy1BALsVoPmu1GtWkwC&EzWn;^_`V|MUcIDkGVT%#3X(W99-@9T<%H@ zl&9(oDLz|;7~crl$2VW@Z+zy((E#tW%-==kXE=_l63Yt=8JA9g6!=Y2=ZN_nXRE8! z$i+pt&2{`$)K^PBm#SSFjpnKzT)g0xAJppnhQ)N-Kc!OC+k)2;1otT zIbq;l!q}bA!aW1P!k{#qX&#Hv*{5u}f*++M@(K`ESP2ZW^}6vm(#bXS>PYR=jjx9z zwiv_R7ac$u#jyfm#UBIYSFeIWj_cKV6tT#vje^Nddlm0uS66`zS5aL$3)N5gESR+! z%o0J%pc!|pO2tzb@*wi?WX^{4YEpNQ6OR?mVtoHQoU(>*Hpt0o_rMKEnURR+_87C+ zCE+7k2ylC_c%#BNsuYV4%tPGqhO+-pf<+>O_|D@{$wxA&B1_V*x;8Y3QAH`MJda8d zwz=n@p#1%*K+?2x;gZHd{E~X*7f08#yB<}7I>8p!)>i7#iL4@E&dBx-_70i;gr+SC zu;$j)G*UMq_^Y75>oHZ|D7^5SbRFBfi)|32990U(kI~zoGwF=1{N`+1T^WP;kN3A9 znBTf2B72RxPH|eV68?4|c62?cD<*!*{w--FF;xx?y7fhW)x?Xro!R>PBAIKI9U5%E z9Oc|1o-en}`Cnn*aOjfQ_kmyqDq}K9yjCe$Px?qP(Nff4-ZuMbwqoYatE{?2;o$w( z{`<#hNKh8ecWfyfLbc$v6JG&ksLlNCxUhJ0Ifo5GSL-GZ?Afe~?+cnu7xrT(m10y@*k8Sx(JR?U`;*-Fe-x7`51Q=DbePDI6GW?cz&q;HK7reQ>&%dFrix)>k zhn(@02PjWHmm1FGoQ4J-m&1g)^-|PXP<@sBToF}u1NScK{Cw2NqqA9TU{Jh$mst$_ zPKLAzC>stMPa16XC0d*Imj+p8OfDa|JuN|-YnJY#YEg_n5D%AOe1S?E?X?Qzt0QCW z$jo?l1|>ZH7nuNF`VxGozrtoYKLAw?P`>=Gf4K}HdyluENz~6>W)NYci>hUI(QwUG z1G~obQr||(J_~yjJzEy?T-*5>2)N@oQi8i28G`W#kwa$;EuzTpu8&hbH$XVlxh6P8 zzV`P6|A+>%%T{2=y0Dd^Rw3j?*>%L{SHqX_sWU4CC&%1BHE(15|2 z=BSz!&4oz@F@rRxlD5sltyvnn(+Ea8_;ukNK*uk82r&-Gq209oAL)iaG6tVGr19-L z{EgxecIZX)OA^>eJaIbAc9J@WoErGRe8j0ae33&~Lw0#~uEn3lx;fMrQ)6vUV6Oe+ zc@Jh+j_L~a)YhG z)S$C%>LZ|{&3bJf9^Qf5B1s8kLuAl}L&CIC!_7yDpA*1N-5H3;pWf*3HYgoQCdTkZ zQiLXpcRtUhT^~+JT^rb3oaD}Z*=64Qb;jG#$uB?M@o#ftSoC)6G3;&}io^e`1nrER8#!rWz2kjgG~3puMKK6X zta{|vx)-Q`OfV@X)kYR=6f6na{sa07r$z6?!VSyrmoG*()Hr@=d%L2b&65f{;BM-v zrYk4&bPpBQOTqGv?Q%zKgK9C2%@urvNRk>ptB{7?wlB&BWNwh6G|#4C)a5Hzo(61M z5)}FJ{Y7Sh*%H(^gb(Y`~vM=0+lR6oX&apg%32Me+zBBJw6VODsbAKg$Liu<(?nSJ29| z6y6lFy=5M<+-d-wtWC96HqZ^|PZo=c#P{j~p2#QP;Bs8r0K~ULnZUf9%G`^f$KrS= z$r9No&9C$i7okiG^QQboq|;mtU|;-%ZdL!PuxMislYVLCR8?&fgnr|wVde4F3Bw5k zJLm)PoI`n~`4Zid=l#CzyqjsMq`40qviE5&x0T)ex~2>AZeKyqsidUq_THRNh@zIBbqH^S8plKBQ=6|+_i#rU1W>-EkY{KgGBj}td~42$ zbwf#+dv+i)y%ay~(F7<;>edE{nW2}v)bX@! z1yMhKc1@zTQTE!zp__AUbam5m9)-0nGp;?%tPGAt9~EW0%)e!5Z*SJ$&zV(KACUL! zz3pJe!ATb>Zn#uyYwc0^{Gz3AFkDZrgSI7j{A0zc)%Hk*PS&8QE+ck88f%4k)sH~E z9t@luI<6~Et=v{P;q}-xScLp9$dBtXe#1A+eY#uV*~T`!w*1&b1d;RHfsscFRQ%GY zayeN{%V;l5fMd{wYe{7B?70xD*-G^#LS$V2y}Mi-StW=$0ugHD8YRPrezL@^vCdv8%w|I)ROZ`M$~OgSGkM!$qxEi?A3EEe_lZOs;a|rR7||k1@JP=*azfW)i9Iq zwSQc$IZjQB!PpA&=TD)HjD9}CV?fLz;I{e}iP*$Y3X6>hsEs^Qr4WkY8YXI*p#WWL zR~$m=%5{9@WH-M45SU&R7hQk5{YFv1&X=dES)d&G*hH}EKj=wahhoRpUl)xQtg$34 zxbI!FS+OcLS-{NX$Ocw$-{;c^!PP$Aw>}8p(~u3mY7yiv$_}m6PENs?Xb{$x={oo8PG48XR^- z2Ll@UrrRYSkoHp;T}1t@2xthZFi+jxozaRM`BBSMBNun;eH_PoWf!(lZuqm8j$BEW_2_-s2!m{B@8JdetK(u18q9$cSt01W-J; z)sH1f9G#D32R3&&9mV$e%EJCDs+`X%3E_w&a7i08*#2$UjSaCU+*vjs5!ouLS)w0? z`UY<|3hQ_+Etc$glvlGbYo7h$zddf{GH~C;ICZsb!M8>@t5OhY(ipU!1w2KKe1`j| z|A)W%_#6WHqk1rK8l&zZ7FaosEDTE~oea9aXVXh^{Ln(F{a3Lt`_bkK9!jmeQ-v@_ z9ZlSSWS;z4W=u01wel$MrL$09%a~po{%NOWtUbKX>cX6Hk5(A_Loa;8L~5MGjjyv>J<++4%Yf2k66z~yL{`3{I8x+^h%WfBs`0; zlZ-vFQ+c!G*s3oi1L0%oQuW3(o)!j#>ABI;=E8XRLW$JS2G&`#+&ipBODs zxTBaD7Lzmh$zbvhI_LDH^R*(-BN(Un*bLhkb|_6qj;Cb*YhLSHXbzJ*=G*vB8$k|h zag~_w)4JT6N9q$GcHIg5lRmrI5uGjz)ZT4B|TEyx+-pl zS)zSSo(>%ASC#hMo~RkpL|b#tO|TidoJEev2pYYZYovat{{R?QaPcL3R~gWE(hU`F zdB&Vy&VjqHDy=(hK&>doGqHhn4a4Nn1#EYBsW@Ka;=6p(957D`5gwbd5e#1O^Ye>5 zi`+CemaF^n+P}wS=P&sgs}}?wYCW}V0GWh`%YT-`aVe%|q9xVIx2porM$oj{tSomQP&w;lCJ3pavXZ-Wjc;ACA_VAO1qR>d>V?Jh7`V8gjWs%$#Cp>=~G+m%3wD zfe^WSt`M&t(!#v}dl%5X(xnhMLzcYX%j1}<9geW{Uyb=dBs%Mrs&SnrK32?I3Ez^D zO=HR#*nDeiM|lJgDu9EiS1&e>JGnnVx3!@RT~16JJGQJI00i#uhfr;BcTs2 zop^UKkKmIY3Dfu6HiL^6!ww}wmU1(&kOW$G%g^#TJQaw3YUIwB*DaCpDQW3np-4*w zV&s11Mghk#Y;_{&DdKTyZ~?WWtDS3tTN%bQeQ%s5ZjenoOyq&1uHp8G*gUn6Wfc6M z9|gNw)mV*sIP8NTei@VSI&0%lQ*jC`e}y`1qNITce=h)_2l90i*bAcbF&LME4&TTM zIwV3q5Y`P_z%o6GG7?+wxS)aE=?(oKqr9c@0_`=s;?^kF zTGO!`5KWfz5kO|9`kA$B<3G1Kivid=744NDym!=eeIeJ(>!RXwqCV>U7GA|=c?b7x z(xVP~?I65)bD+fdXgN8jYd#y>ck!%hN@tX|nQBlEe zlLom9NrMz1KNPnI+-9L{JRSaFqa^EL#^8dPrDC#Zm3SsPIAk&e9USR+u@;l%RF3Od zz??F{A4(^T^IA=U74yxPa##ijF^chh7k-RC0eMvFdWRo%1Dt5Ys%YUD@LM}Pt-nXI zG>Z1MkjH#60c*wER@u|r)Xx7NU2za@j`(Tk+8L<`jj@b zAI=RO10J!u?ZZ|JUr2(9@8!VZgD)gNNVMbB=;KyD%Nt*2NV=_qv%fnBx~0IKk>%@e zDw|PbRu8z{PXT>8i(Y})?mRqUfwXAgVd?Z8ybKF8WdSP-;8#zwd+e#D>k22HA(o#g zCj5^|&AKZ5$`~J86y8Cly4&Pd3(7CnxiVX$tgk%zw$jn>-|byUvDc~6kEHJx_ph94 zA%QY{8)FXG-2aDP>OBn&{H^hDn5StSy-)?hq7p%)AKIOg<0AA>ri5zXa2v%-(&k*Qs5+C9mEd%FuctVR=FS6P{^QHZU*4Q|DEL(|b}%K? z!X~(~Tw>JL5YOBr#HQN!>}`LSqd6pW8b#xgQE@L|m$NXN@6~X%H9W+W9<;Ycebf$v z`DB83o(Ur)r_sZWy#8D;`8b?x6s7ivoSd99Z@v^~8L2jza^R!=Fjd+V9s2NFpze1` zgDth1ad-!SwyJ)U@k&d=hM9Qvu+YMd;qu?EEo~!Hb|NC|1|#;7uO}gF%*>nDHGes_ zhhIdGAXn&y3)jf371pXnt3Zzzc${-z%c#z11@`ySHipx&{5(7bSGQ|{&(NotanjK% zspF;)CMJ=PD{bRB#d}Zf&FR^Ap#qU>P<0Qd>=G$ULL^$Q2-J)^N3A;gDlMx=NXcFb zWs^BJ%qwd@)V5+c#??ocLqmvMf)_I2E)k&HfaTTd0|9Ov6yDNeK>N^h;mp4-U)kh; z_4~iuI7wc3ceIIrI5X;j9>)B-{R(aiit4n47Ztfr+ND|k`~Y8iVKypB1}#Oc)Ai34 z=UlX5|98hi|3Nt^*vIfR{#%t1_^vfDXXbr;gq$LXB(kT@B_0^b@!xS2aaKcrug9!BIB`5iF(*0=oFgemPppLNF#xlh)vH-$7i|H7baHvu zQaKhlkT+JPYsWv+>Oc0-?s?=~e9FU_s(ghso!7;!m_-J>-Q0h}nDuD0`)KMZ0o7)A zA475uyq0!0OH**%{oo^XnH}ifSv(Q-^Rn%1>2dgQRN?^b8Q6Xl-LQ{b=X9nx>x_Ws z5=#9JO$x^?kqs5mfZMJQ;FajkT&eh+daG>j?$5WTxz{PgZ@CcjOgDdWFAKTUpPPpk z_Y7NJ785uhkp#0U&wn#eqT^&Xyv&EKH;1VuR@)dIua8PJqAIo})!w%&4A0D|=i(N^ zd*_ZaHs^8Y|M``}F8bmj{XXLk$6X;VzsKur4s9#@YRLz+shL-&U{8r1v}|g!l;4u( zvR@O7Qv{rsg)#>aWQ6h14U9ZfjPD!(>~9nf#ACXz(}W)J`~#II@)2@ z6!g4s*LWL){?k~Rz$pCasheSct?4JR`N)5ZOLhv{ci$g@v*bA0^p)$d8+!-n@r>JC z0Yi5Q;iRFh%%yd6eUFyuU*62!*h;hoOqsXIn@vi=k!n9`SHV{R^;5J{_F#l$+-iLP zQasKQ06K+ig&6=o_WAR}g|6C;z=U^u|86u%qWUk>XUY<%wa0e`DEidHi8@;f8-_u` zcA350AAm{}4E-a>ZC-A%vnV#>F^)pt{(b@^p@0fFcbzmt!op$~XV;=C7IB_AS)k z4!|EZd{69#hTeDzc;?ssTkmDHbD8o@-g6jB$8Rf~MfwY|k!7g+q8ce$4!I>`?ozLw zd%GPZHjUB9sT-D{>0IsnjMS_hbG2^(=1;Mv5eJ>~LVSNNsqvv5nlQLte0;K8^856; zB^7F>>uQw5CfTjv{S4EMg4HvD3M^bpUl@1#=itFfFxuo+tjXWl9mw|J!)>-Mf@nhPY!qb6wL<-Zrywr&`BZ9(7$YbwwE^s&iI7oQZW2x6K8})AjP2zkgydL$LK`v;V^l5*nAL)cd z)#Qqmg$&FDb@$Y?Wkbpb`x*GTU3H6`_Lm&!>||mgzAUwq_tq^VXT53BJ@G-7iA*}3 zv?l96Og2jVe^1K>{y986@syE~|7hbRLC&cIIC;kPeC(a>JQ0kAxniU7@CTl{9)3q3 zh#GTY)Hv~z%-+Xp!U-4xcO~l?OmW)1I$M_ecGW9&m0zx|N3Sk-E+0C>wQO3)x}5_{ z!PJvb(W?CqMnva2`CsQyLAJK6*eq|lf&G7tbq-=a0=HA}xr~)@tU=U>kp%w|5|~^( z-6-6`7)VCsFSvobUu;JH_;UmyarCEi07z(I5c?<1DQLA|U=grBzW7T=(ps_38&Oly z4e)5^znHqL8_qV%B7kUK6QYRwc!4wXtN*re(4<2d8~*N4zg_R))kwUWbmy=b-c5HQ zGX$F30c&5hKy#&$9glEH{Dk}*E-JR07KIL`dtC^RKZBELj5|7e-F7du)xX>I0-3GH z34J+n)LF}g#|QG5VkP|Muxr~#)fd{gn%+-mks1@TtV;S%&lyMNt#7610Lf41=LOH$ z?2Sdl4QzJr`Kxnj@jxrgGVX%{4&;;G6V(tQu`Yv2A2~qOS4w4Asn8<;R{%w#Vo94; z_ziu&eBH__XkYL6(aun`Qg^VXt^LEjSTV52;nxsp+Y&Z&0490U1oJQ{{)#1&6bbof zue44rdjF$C^!b~89elcxMAZ)A470CCVC%Mvq&I9Xyb-K#tamj7nQbW%N# zbOS<$e&hqG3R`Hp9{J3AapI9;i1~D{TnN!YS-vfBQYQYJ#lRD*`GGI)&m(n#Tfs#= zzj>C^kdLCtz|ekMokA~C<^-wPFqWHk5A9WW1hfxJ?Ba{fW^>U|4oMV0R0RS`S&}iMw+*L)9c(0 zDuK$Y=Cg;I^;vD(YC-9o9dhKR4+OdtE@21nH`DMxF6(Tl2y4WiE#=*Hgv&XP4i2t; z1deM7Yv0;AZ7vd?-}oTeJ?#tJ3pN*#N1$uH+8mCsI9t09C$Nd%Bm52|@v8!^5OQ2k z#05cu31D`Kg|$6&z^mSOtqpiZ3<|2%OmYgKuZXhd&VG>#?`oZ*-wK8tuqa(w7Fw)r zUfXyFC?WYvn&T}dUGjdDKwA>-jPqiG@7@X50DkjM`p;Qdz!M^xdHh-tUtckhT4?QO zFOB{|PVzd6xYm4em|t)bvGYwacsw28l*l&;jZfs)|Jcb!J>i(^B!$qW(*)WfJQQ8z zZ5^#Q2hc?`BP!K939bLl@)+e@oPOX9z55-wH4EKRPOF-OFNEl^ozVNHB&m7Lm0}yT*rrPa`Hv*Y}LhLFcwWMg?0Szk8nH`BBL^ z#(zHkAG%zaA&y6HfU!zv`3N{NZxOh`ljL3$wFb4aaQ3O4Gi+~G%zKD*tpDtL<+bJu zz~4gT;6-4EOq`5Y%MPVJvYg1Hc^nB7r_E0qYK<(LU*P|nltEZjc5n;8s=?JC z_Dpib;c%Y3ebe{Tb85Q-0-bvpZTomqXz4HQr7d@NAYV4FYVV~R?nW<`GiEAOD1i9h z{VI&dd8lsKqmMJbA3!*$vODbwK-F%>a+UmNA(+~t9I#!q>a^~}#DdiXAt66n042@9 z&nUsVEW@26CRWXv>xvFJ2e-LW`V0s$@$#@SA+kaPUvQH2W!Dpck{221sNwdhDg9@f zow7fGtKakl*qG-eKcGfGZ4W`-0VFWLu@=>^R@c5uY6Cq#sNy&3u7Jq; z?)i3y;1qDf#51E&;OR>B1jepsDGxVbpTO>Gpl)_Pz7jwd!gb3pJ~pAmPw?UNGrjp& zw|r3w4dB`RCict6!&W@WWqP4o>=Mz-TiSs%5cW_7tsNj+B&AJPa3mfSY!9Gn7AX&+ zuER5YAWiQ`)3XZJ7_X1f(Nm?sJJs$_8w*Gdnt$oUF8%`gaYxQPEUegGVpm zS(2B~J$v(RjizSZGkv5waH}r!udYgR`W_HJ1M(WQ;wwREb`CpFyPAq8YBgJi>2LF( z9KAacw}#Oht}C&0i0UkUfh|+J^k6m)T=(1OgcG~$LKfX=2A+>~VoKtp?tKI29GX!H zfbAe$<0uWOx(}>UkGreNM)xG2JZR!AS&p_$!>9))gaIajK<|B3hfYe^zX>B7bw04Y z<4%qa*+0@RlUH=%@GH#BJKhUaI!s`or(FhHDCZ{Q?!G}HdRhbswH)&*zNpC(5=7Uh zML=#C`kBF4G_9=vwN9Yc4a$4Y&Y9AP`Z{+gUBAb6m0R{`U*4;%xJluM3F}!GG6Z6B zM?}A*c34&KxW)YKwE6k(YXag5OiB9W;KE^mM;%HJm(WFq|1clR111E*^XX@FYcnV^ z<5}}uZ*7mHeXiP-CN|voJjc#a4CS3)bIrYi(NR+YZnmO3pdlWyH0*V{E|E(Swq@PD zG3K$_xv(a`W0LTW9VuZnZ$#CbVV*uSL)OPAgPxS>>%CU%15y3VNi&7hB)xBA&njRX z7FYLg1*d$Bawrs*LZk}C6wOX~MleX%y)hdFDQ+(tVKsOmoSm2OF1^9*W}3{P$_yZa zBT5uQ?9k3l`-Z?tS%4YrH5B1aa{*T=8B8)i=j8C!Up3?@kcQg6@!_?1q;H~MsszfTfy+;j3t)3K3Lo)czoFMq&Z&wZ%>*PS5tPJ-_ z%hoA^2OI@6qalU|Q6TY<5ui^GT{$nD2)aH-sW%s0^)NdBvRZsLu=QLts*RRS?DqJX zf5geBn^muPl=BJKF<-h4t%$sjmG?Dwq*Nw^&vYAXjRF=`hpZUJ>Ia>Ys|D)@>bJ-g=`T*l)Z^#WM`ZsJC%r#b&j&h$U2U3taC^*kG-A4Q5nZLhpZ!x z@w|+~@XM*L6Lw=QZxYPi|*hT&JaH`*^ezwfA$xfs=yDZ%RC<^ZKo6 z{0+`reb@`ICc(#~Etm(yLVzwp$|ke)YUtT1JTwL>YfrMRg6G6`V<*mj4g68}n0dM-$7)9M#X?=Y_px7ogUPv^Vx_Xv`AfK?+eI}NPIsvyh&OMIBpdc zu3#3N;E*eFWF?~8`ds_j3aw>6%wFS2M5+HujEWveBQcnV8D? z-`-!Asy~OchdL0XC9a%l72{Hd-)zX@In_sRGZ`2v;uJrhJ)(3g%$fD`B$uy_*laY03i{#^;X* zS{Rx{g}L`Y8#R3 zJ%DM>db-QiyK!8h^ULk49nhMZ+e>YI$-MZ7zUZcMkkzAJfWC#>SH8&5hgsc~rxs3A| zE9LYDDW&p$biDV@^dqy_WhMY)rjM6XQ8}X+9iRrH%}49)mix9j9Nf{{U(5B@!Yb~3 zPK%4-A1QFF8Y2;mC5yz37BPB0DvTH|X2{Wb7ux4xGq36vVM{O_4IjjF*y2 zioI^r*SMyVN;?0+`Ek%>;ESA_y;>bAjG1r6bu6(}V9MHtp?0Xb5%r$UboS7kz2#3r z8|Q+hRaKtAlqbgs?E2#>JAI>iPIe1t=T`v|Jkjp1R}zA+r0!5d-f`YYcOxI+)F^IIQ?f9_%^F32@;b9uhgO7pkx_T05!!+*s+j{Yy z1MV=-$x<;*RiMLFIXs7sv0YCq>ql??KBQTfj${w1!!%4=;}VNv2tS7}1@b1YLL{Pl zlofz|OVAX;=Lb8jA4pM=F*|?+=urgBaCp)$M>!=aD>x-F>O_*ex<3Nw{V6p7`Eod; zl4Hh`ae+1Wvk4(XLi^*)!4PHRiqzPAz6q(RPt+m)z+qrwWE};_NT+)Tuh!q$OOTQ9 z{{O%p-~SsG@x8v4grWZPHoJoLwl9iCWe#)i(A0&)LBRtLZzx=EO-5e1lEn3ztMyc9 zXYAQfg;1f_9}LXpke7m=EfKto#rUuS1rAlNv!ru`V>c^{dM#JB+}^#rxl%IH(pDup zm+0>CJ2UmFqCck?Pk&dF-?auV1=DEAWz>l}%XiI19at2&|Gh_{2Z3ri_~BG5eySMR zm5Tp*dqR{jxLW9c9Lz2O+?WCn{@cvI2L%?D3$3St`-`6JSnV@!>b z6?qX+p)yvS(J>ad8{Y(`dNG=vz}tZ*CX@rAc`AiQxZhOwuU!{1`NaEU!Lig{1^(sB zm#ijhg)3R}PR#%8@wkz+6bBQ58EdqHEm7_=c8?JM4$wx*;E^({3Cmkd{P*bA|n=G+w_hsqG^g?4l>;>y@Z+3mXI1_i zJ5BD{)ezQBUM0}2qyjK8@zWT+b@TDlpir-rTfg(?b`IigWXH^^k`s2|Mr~@?q3z$Ng61!|SF^?flf30ekxQkXaDhp(K#fwUTDbK%Nf(kJ%!iP++%gG+6kx z)@4x5>7vrLk6mUzXuFKql!e*mNJFL0IxV9UqDOU`ibH9+3~%M_h9i@e4}US7WITMP zu{oT(>6@fs$nfmr0FzDy5ZRYf`awM|{|3C&YnW#677-KM4j+5{RDs^rSjQOA`|ON6 zshc>OsZ!|qm&`@WK9faUz8`RvsREnR;$5ahcgO zeR#7h%sk@kvQg#uF;PcKjWhEvbLt;;?*c&<;VpUnXC6~JqP2w|I+x1msfu&clfp6j zzFCZ7KW-tD))R}Rx~-_M&eYf5NCGvTo`1tWVM{Qg`qXQ{WXha5p_<|Tn#5U4&!HPbcfU}E^ao5o5EU#4L?s@!@iJW9=>W5 zYH$V_1gPIIDNjQN?6+%s=k_1}g_Fr0yhhG;(8P7aqg61=Gb0gV-fgEjmTh7$jr7qV zC^k*pQu_BV6J$YH7MCHTV^<#Rz|x2Ew7*6&0=Z>6t9L$eB?M&%XaYx5HyJ1gmfmiY z^fp6-`x=yC?FFx(1>}5yrP)#b?=>%c&ei$cKckz{-y*7Fxn9;O4|Idw)tY+_%_Uki z4QLKJz2wn_QK4q(vViX*?n$!m!eJo)1N2D#fma_W`h|F3(>Dx$6!*`$njHO1DUE7N zZl!xcK9?@!2gut*!(FwQ(3HTd?Jom^XVB*fYhM&~9>P+nK96Qtn+D3ieK~mJlFmS1 z8IW`^P!V#uUpb_cC-KL8TO0hi{n^DbkCDw|9?k~d2vrHY^y9m}Be0`NbQt>_O0MD6 zb40Y^*g*v*PknzlqvvYo8o$^*gezhp@bfIuf+JGiNs57~=n!BdKh!2Kss&N^2SObp z0qsSVoAt#@rG0RyE>a8Pp#S1W(j?YZhPT&C{@E8ghMzoin2O#95tUvde7&1``}#O@ z1cT#CHHR(As~@CY!k<|gLvgMaEm@tHp_kuas|gY3%*5g{n#RfB#gi()pN+e6yfU*m zJ<~s2KBTzR+}av*f^49eAK368h$Me_Td9*_4pWh_v1f%=TN)3@%Pjov&-a7zu%5p* zWz(%m^8L6k$=O_^5c)F@^bskjzbYE?i4wY}NYeV(Cuh`ir31b^_7b@5| zHW}lrX`5+tN7vZhu=37LYYizwS9H-L8NL$cG1NkPs#!5EeMf|TXdjL)1~jj8Yw=du zrFA|0IsM5J>y1l;x4m5S7NHx8mFkMM&#MlJ>$XSmFG?@TKX*4=VZTT|6z>X5KS*dH zmhtuRG7^(tcMx^Q#9lKuVgCyrJY1#G_t+;AT%UrbX=>qrE4TLZvG1qQ=jzg;ccwEh zE58`KYojl&G(A1K5W6ix@fRCf$1k=C?nnV(;3Ank2j^?RIm@3_4c@TZ1@kSfdAF;3 zm;sH_CQjoro6;T3nT>r47K7GZU3CT|C|@ImA!FyrAp%RmzeXo1T=4pf>xXD)!|D8R zGiBxA%UoPj4^k7Qk27`PM_;muuN;7q2SNMS+@#GokNkEmcJ}HE(+@f{8lS4Ll-j|I z;%xu(>z)JtqX`LsJyfA)PW&M@98TEbZ0Ve)3{(Mi#^k(vAfJqg6{Fxm2 z_U&27rXHtDdQU#@{%YU2$v5i6#Y5e?Ezx-)8Eb&bm?6|c?iSqO{_?^fP~~gh>uzr> zPyUscmh5@-=TS_Tqo0u?^4=TI{NZinraQMn%^y2tepFGBhR`mt#2pWLR&LmtQV^Wqj&Udd9QPU*S&^HGfu~lcv_z z3ZL^*oamwFwrz8=!Qp6B2NvpEn_FrzSD(&(8<<8RB@?@_VtUN3`-9JeDKT4Fy_T&D zIuSZKiM89>bX^rpkal^D2os~gPbZd|Blj8b!A_Rw@oj>W(!yp?a)1=l5>9k_c6eCC}8IfQ3PSxxN(lV@vukyd^9 zIdW_5pR}@HKCjGq8WVrGyEtS`Vv3ON)06Y&Myl@l`W(8H)i6KS3iOH(d59{O#7?s`NwWGf4iT7* zIG5j}AVnV#@mz+?zNdt}GEq!t%?=fvDvYF*+rpyfFkw(njQ6jj{Hf) z>bbD3*_^7;?k%HM0&gF_Ae{v;zGkVKS(qkR@s%Easm19>v4kz2_<=RRFZ4FrW zpp~@2QG;~9t@geHJo>+nS`+9*&W`)`^)kcLrO^1*_@L&$vxJ!In zJDc(0!#xd+$j!^stKDCP|E-=8UE-hr^d$JD`?OVmIi5ROIGZw!+-o%iobwpoC+H&A zUmlZoIfBk^_pe(pTy4b0cp%mV>|HgxSsR~W9gl=)Cmi~vXiKKiw)TH@F&d|PIH_Gu z$la-K@}Iu)B=^Dvk(Oa*l%cA|>G64g)z9YI^LGH>n32g-b@NHa(DnJQ?6M8}zXcAc zjI;cO;V6GQAH6(O!9ue?T0Q2{_Hak)^#N~}$Y;dWEzG3V%!E9(yPUT@4hVLMG)_O* zVno&OR~(0_WriN#9rx1e&#CO9!M_F$%>L?E(2{cHhBI5;r5n@b&|h%%HRxE*&H)BC zK@S$e8=l*I7>{!`=z+~8Xn^>17&-292&xN+`n?pVyguK_D=I2_d)rCWo=*q=tKmX& z_TlxZk8q3DiqM4~F#Su1NZqgF!+_$euiY!j0#asJubjMRdf8e?P}iiy}5(eem$=T8SW?kooDI2 zsP)G;93nVrj(_(f+joF&8@#_4^GS4@>ynz*u0PuuQu=2HWgyH!rA3RD`_I)&I1);w zCH=#L>UoGH$Et6d81Yi6JUo#oXMyXY3~D=^xNP zN-1lWW*!Qy`c0ZZ{NM$<5 z;NHBrXoJNl^G;82Y!Aw$UR}F(EiyX#gY;|9&09@EN&sQO|G(N*VMXYMR~@Fx!3eQkE3WID{k@*gL(L_~@^(sht6ab~C_) z+mm6}F!)CqCTD>;wi1D7!x??JNCV~E*H>%bxzv79*;xFK8=8fr(HR&|>dVDXvP&%w z?B6UnKm+rHb&waM2(WE8fUPs+M2?x8#7?kkTR~BY$5{^Rd*rl75L)5cKt zz1LIM8XmuaVfQK7%1rnFz>=g-zbloqpUEfz2O>_~r}1w2*gC`P0JqCsL{EdP? zYr0QmU$0&J;JJSdHTgO1rK1>>qYC`)MruraJl~NcMnh~YIe2_`Fi&V8b5CU>H8oP1J-MzNJc`jl;Q6dW&yI;*`u-k&dWYV+h4(zO- zu&ck@%+Ti31<^Z~lVeOo4JIKZy|8tUX3wV5X3+13A;3Adjh87Xa!qCD#0Qxm!{Vgl zg&)A!bFt2@p+evwq& z$<*vBSMs)kDA!YC-SvV#DP4N|Hkxm0)CtaREUo}rT2NSeFAPpGa@jom(G)SORA^^^ zW%umueC0>)He?dKS!A)Gcyqkv+s5)yy~4}WF+#-@6+fCtIGnS)+USa5m{4?{mtghU zaqGQi2fswq&Hs@#5!yPfL^WUmtYp8_eK@Fe%z4OY3PI1i%k}v$Fb2&HSdYKY>vEW# zadE@HS}>MW`73|$>*bR_=rFdW;_{JIkT~%McJekiCf>FVYG~!Iv1|TaS2|Bqf``EL zjoV_16i-C=^qf)Z`V5+}dn_%?rJvHDFG;0Q(Y1e@p$b3_R~I3NKjmH;5vS) z2na?H$H%b?4*CnT@vTA~LB@Oa9@CsBB`BhX;XbTPuB506`;7DP3rW*OGo(M@LC30N-b)2b8?@+XSDxC)lL;BrDva4N7bi*1g);cTd5tEsweImC=(8=yTqeJMvvY zDc`sfR+;_ESid%7eck(7M^Y{+t+BWm0iu$AfTpX;!>7E! ziSwf_BERRg^H6*ooV#d(AFis%dOce=#&cuf?5^lsefMb|oU{hCC*`${&Ge}C2+_fQ zVw}4ncBko?&0d5Sc&#(9dW=0gRF1clNAAP@I`-u@s8?G zzH+q3aYSDbR6$t2d0!y>dZdAMcWw+ijJ;eEg->IN|8AGv|~=l};@m)ipOu(Y{Q94A=MoP6WZdANS#2yQTq?*N{E)y~jOeukROIxG5A!mK`nusB(NuO54&k?OJ?{&aL1#VGTmTmZ1^)C z+ivhXe5q19B*}HisC(o#NqXmY?vFAKl9VPfSM;sNc*6Lxyhh%^HCBZ)p6QPz%;q+a z=}ubez8fjC49qnul3$xT`N+r1Jpw0Iq5I@;Pn6d4)<1fFdqH`CR#fOPcJV7%9mltI z*nX9EM{>F*wNGH)KEOoyW#RF3`>2u<4r-gFv^aD&f{RyJISOiQ;jm^lh@2}JV;(4J z{{42VZKG^LqxAYnSB8z`6fQge{6JO8-GZhO!y z7!3jWfLW3vsuv9An2B?4t}1b{A2bq$Rmsz=dh~X^PWTHm4bmJ@YSPGo98#K+)GPE# zydqk@+Es98qpYpOOSG2B5DqZCMI#C%$=#(2edbQm>?ldP-)egSaJk-UiXAvQ^dilJ ztHSqHAF(6j%a^+=qjVS&-J)d4{xpMnO2ii*r)fyty1GxnsRyVJ_g=(_v zzmG4m6R4{*u&q>MAoK8`Tpzr$CjdEcPHdgvLnXr|)*aa%a#I7Sa?;RfxKNi~k@D;G z8PC#}D6TR>7IGNpsQ4t#P{ipnn;W$&BxH){87SO0`>d_9o$NGI1}q;TgJJO?SlrFS zP!7v`38jKhKh%%UkO$i!uy}Q&+;o&3+xCh{rZxMB;{E*yZ94<&a) z4?QOXiQYADIKdPgZe|LWnK)r!)MA1cW*`T@nWDB3oVM?LJxIk9i1`Us?W7GIqZYzQ z9w&}1oD8WpMWKI!TirZDhvq(RI36VOznPjV+c05fE^6nZ^0| z@bOl|vqhr@;#ClA2-D1&c=zFqQF4WC?neQTpj8`Xqvqyho@p7MRb6}+b*~q|+^Ur- ztL>qlTPw8KDsTP3W7N-deiWUt?t?R3_G{mNC9L4hsc#v)-^ebG78;$D^Y3+?A z2dZW+cSCVz?z5*t8JV(T{BnzK##dUrC@NY$G1Wh)FCWs{4PCV*IWaTM`dN_YN#H9*)Rnkd3p%8k2NQq%w$8-yV|D?zIMYruEh9B^wK^I29UPpxn6Zp z8F=Ql6mUD*rHBcBuwPvid7^^o)7F`Qq&L_X~NaVK3yb00`t zw_6;1nqtZ9Xgb2qnsb^HWq@ZpGOIYkPA)O#*RSx*sSgu<@f7UiMyOy|^h8=#pmRTu z%ZEbxJ-Tg`^u$3Z1!C(7N0lVOFKT3h+H`s^%(80S137MoYWhY>bM#BAub4tZ>{PaI z)giX>#EZ1)IXUQ>!b@d|t$gvN_DEC(T8sg^XpV=lDGpUF&t@Y%`vjEj6Y5VK!Y_A0 zj~5Rshq7h2=rJ2RZ3HcQB9|-p-_?+32Gc`t6?4|rp3P0DTZODvpn>c?a3+= z5X!Umgy_?&W&D;QC4G>dm>8}rcvGzCAv{~Se%qi+dybGPxn$8CRx9=JHe&n* zKM|v_*Z~_seH1i@nW7|${4gdhVIusB4pHOqxW^}M+unC=f@RX%=?2G+!}#ktb+U1T-#Hi3^(xf;+x^nA^VZ`_pt9}gJCbi&P(!yz#N_=HBb`g@{+)m_jx_- zC*t_5hysF380%{K%~%YFE)~4yHEO zn%9d)V#w-j42H9*>ekYK(cR#3MGEU5dEc(>+C73&&JP+XG=z?JPomEd1^Iuh!G0 zOCJ*-^S4ih2P_0tty^B5XlL;(Z~kr$Q|tk=`uP^9ypb^XARZ$RG%N%zG9jEtw)h@g zf4C??!MH_CsM{Cn`L#+9tSr~@qRy~&8@;g09GR0_JarnI_x1U{x&0e_-`w}@r^bDz z{s+g4qL?0^;WRwUX?>PZdMldavh~@%KtY2o6_-~y zQ$c0l>jr$$9J%JAwG*o6%6(ty^e~doHo82mkp+?6pI#V!0wA8}Y$smOn)*K*p0Km7 zdH(stYq7xLeqWzHQKW^Y5*}_pRs3(5q%81=OK<)`{!^?~r+P&(Q?pM>Awy;EZN(R} zA@GvuY<5abnoKl^Zx)p)b=6~Ur3Yr=)?rCZG=)}|X$9o-% zwKboCld@LN z4>0Nb)mHnGf9rlsz4$gbjsgr70 zQg@oJT5s^45tR10-O1H-?015^APE~Qk_vaX8>t+syR~G?>OGg8s~fZY$B&3E{RasC z@i#B*x>CtJN1u>1V@%mlzuQa60LkMgWg(KlF>8eT7i}?fCoXIZkVLt*m?%kia^ZfEKU(x7{ zrJJT1-GGx5y+~DhY+I?8oUU9~aE&J4tAYksxT&&C>jI4DH?UPs<7q zk5hCDeum5$pLpr_#|uSEiJv9c zAN}G=0z2d;r7Uw6Zw3f^lzs~^F<6g@c$dB(s;?_I^C*kUD1U(W_GfryGg>mO&ZMR- z5Ovk5%j5Z$*FML8Z;9>2uldE!>l~#IYCs0Ug>bJ+ZkETXk&Nr9G07tdz;+1Hhy62Q z)#LY^x&82CaVlY45;dn^Ba3(>j+n&8VI5ZqTc_C1JCWZzmJFDt)-ULbMqU}T}~)AxS0qUf)*K(5nY%gQZG_GAEH@-8HT zId~@uIh>XR&LOdFh>D2HQ_nY!VV;A!pUlezhCfb$Q*QNqOuq0yk;21AanXHWN~OFR zHsHQn$st;PFo1k1X>{)uj60|3$-?3D2>K_cHJ^ot=*mtFG4t}03NuMqogX1O1vhg- zzgwnxaa9=V{*#eMcgw2XP#s=}R*!Z#QZr}nJtuf{n?gyJH~>T>3D#~B*kxw-L7!i= zihnBY^M=~KSECcD=}-6i2V}qar$MUso3;hVpH1g607NX9$!c|1>K?`%Q1&E&1C07I z>w?RGgss3*>S>xMZ3qT^B8WXgh>j3W zpuOVR6BlRrFHiGp>7oP1~#AXJ4|H%jP|rm$?pISAjtsdSiXcdDiDC4R)i(dYnHK zcz#M^tDcl^(Nzlulz#JqTQ_cp;Z7o+`5u@#v(87Em^UX7k<2S2o=Mdab;c$`Bd~2E zSEiNmwyzP1<>jS-r0SG1DS^#0QDlMYll(6qzIM?qU2?0r_Ef^2Icc9L&MIKlw-w0v_gekI$fzjZ<(c%R&*^p+ zGn8Qhs!<;Ns{A|RnkMn3IWbA{%kb6{9QqQNm>~4UVMsBlwaB%|QEV=^#!*gc&A!So zpB8&ce5Iu(|1){ComiPOj$cS^I4Bw)E^YeoDXotkv#EVc)*ZU{SCj6WCd)smx!CqS zG~uRg^5vP38;~{Grf!CAdokj%P_Bj`pA_=KB^=}Fb9q>m&T*e?vdd8-o21LL4<9aL zGjB2}IXWg9I_aBR&n##_Ji6UHL<6wmUN7r4goHK0qBW3s$<*q4ja#SzOs0LEwN0+h zn*nRwY;4uaI{CACEreijZDEkl!9BNN_=hj6O7Fm_(D5>l_8vWlP@jBc8dqpS{$gLB zM|F=!_(8acG8l48*chxRi>v~`Au^p+e40>A*EQB5BaLM+a?TOG|gsDt?`zrQ|eu^v=V%2Jxg0wFs6n;_T7&2t-c@PC6BHqfq zs~MLM2ap@2WLVh&KHev8{{&={g&btX{xE-WtM7t>y+2A^>o%f4KX#zwj%2#}3r|7o z8XnQ7lLdxz9saC#S;zoZ>{Tz)En^d~F~P`~;Qx6%K{z?^mZO&Ggn$A6p%YdW%L*aK zJE5wVa2`kxvANC99%=P!Gw9G6EV>RiEAxa+Zq2=4Z+~cB=fK5MLJg~3Hgc5}uiK?3 zolyF^t@18$*t86N6?tc)LaFG=am$*>l0tXCSB6eKdZrHjw^9?B4YL<#kG6?F1h3I0B}`tF0Vw@@Ny&m|+7ZkUG@56=cczaa(0oWT0U_864- z*S^lJ9)Yex53oMk8$-fr-az_d#8q;bR4tlQFo^=unzgV4Rf5YRAZlQpS^y34nS8`1+KH4gllg&;|7x z_IyAdRKnTXm)E1bknF5>dB|Q?6_CB|E4?{(wshl}i9+*bt3g;*Ltd%7duU1L0Ba~Y zh;1gFj8iOLH0Om7@&XnWLLoC3$avJ-7`xJ!VMo2>UoZFQ9damD#yeb-@O>lRr%iOo zT+HwGD5VXT^nyAdkT6z!HqzM9&+Bn+TD^{)y{kG>0GID`7eM+Z#9>w=6ZcR^7u4<+ z>e?B*Or#DgJ_DKHh#9WD`x?@>{p34%ha;$&45X&{mp2Z9 z@Z>Y0ke&gBP=^!sfZteD-)CblC;Fwr&6bl=14yt;5rh7lusr>iu=2-c+n5cIL__!0u5Nql&mCUq$upg zA6*-SyA1sh{Z2RmN~MJ+T+LxzYvT=az-5DUIAltS&y?-WU{wNc^vqx~g}2Y%g=~+Z zc!6h1M!4cgE1!HhNRo4T{UL*MuQtLC;7dB7Y(sNzHw4OKH`Qa2D3jBp)WcRLf6RM5`Q{z=N|5}2ZInWX>gA`Cd*#CRV<0N|Od4O%Dp3l9=!KH54Z zApin6HP+VzPel1_UsNgO1a5^EsTuN3>4E%@DDk?D1U;RfYq*i9)8=dL4Zy3&N7$%T zaMVU?VYMbj1iJ~1;p@9gB$GA|;znfSNKS|iOi49{B2sqA9D2;G;nc5-a157K!?pcu zFG1}gg8&0i3orn((EAn*lF;1KyjBhBPzlRlmnb%;4W5ajo{aJHQd#8q3=y|7xMWi{!xTcC@z@3)b z_DFLG`D*z~)r$dldg=-DD4%NNoG4|ZzKR%qHDd(+YHH<5oIA?Ngla-GUrWGN9mQMQ z2cr0m+nQh;_n!}TP#R8ynO1_!(U(BfMDq9-Sgsz2*sCHGY^y6i&iiDl;wJEYD`r;e-NkfaeL}BG-Z*2CQSP|K#`f12%3$p!P1{#~ zm6mFLSVM`oqeq=`h12G;=OPR`Lh^Z=MD#*TRSk;n!#d$b_r+;MMvXsreN{0))wB*Y zXHF0q8qXU6+I?MxrX+?Gw2#qC9S8pRXzy+}57FNoxq|fwSFeso8~KDX1x&E{)c<3w zn0SBVdrr_4Ro->ck?I!r0Amp|K(N${QAG%%?~n}57^&4tpqX|_GWHu?deJqg+a z%Y^M6=Z9j877s(EE^?OwcU7Q$8L+(iEp4U)qDSLw(*eHAkWUd_dbvzOGSeBBh`$Zf zd=;BWk96g7q@u@TbnmxE#HSOLNfP%TvsnfWik=sTkD8h&fuScF+QtXQS`AHZh;M<3 z-s@Oi=lgjii5S%s59~=GB?PM0T#a4`9`wk(`D)pjSc!&2--6}gSLDA@JQiWsG8!hJ z0xcO86+WC0D(NXk!raCNGWI4V^A$hh!wvCvD`KDh!UVq|DM-Mn+|a~Wl0!tJ9cyU` zmxAh*I$3?A^ybB7U}yN}>kA9Rr%(q*>u29PvwCU5Cj(+e5 z47+8}Dw!;vlE57*4ogRj4}G=Me^6@q(osd{JTjs-cX)myE3=JK?yP58Iu%e&?Hl>d zCmERdk*Fgb#~>k$Mye!@AN){eOL&I=wnz&Uk zb5XxWX?xqdwhmWRjUF3I{v5NopB>RzC)U>31CStpNWA-`TZ!RC|VS$M$) ze3im``g6&md4hGf;29f-?QL_h;;sCMr5k=#0?{*z<3E~DExJT(LZT%y${Pb1${XKw zHLQzv)Q7TWnXVL|AM2Z^c;`yD8^o3_BTBQNR5!w^Nmw6t6~?7=-(+yj;!BiY7%u-h z(6LD=&}C?InW@teG10($cdP+>YSBrhDC798Ope5xARBwcYy%AlG&jDAJ&7+hH67uq zS#iB-Ot>KF^e`i~z5D}}skOPfI>q%;)ds(F%gUO8DXX~jsGpAt`(i@KeB0p9_V(!O zC`F?2WCFg^Rrv)eUPIs93*v!&P7F4fTsSze(0me~M@(a4Obn+>0P(7{xaa4kC+f~{ zIB(|hA(>hseh)%#Cjt78$VB!jFa+AV5OE|4;v-3?5>434mjEoUoPFln;OdRImhz;;BmqS1@@nDY@a8xpV^NhE z!NVD0>`{kaqyk##HcGS9N&Cln%(7BZ)xIgqAaaKX+yi@bS^BD6OaFr!yoldOKx942 zPFf7Hg`KZrOb^$umOxYo^sl7ZBS(G2!a#^6q{gz`>mquUO5xVxx%*E|;inqBeT-!n zVO$e4?%irDwQF})k2jy;4cs_BBdt{i2yKZ|&PH5Cz=}GLjr~j*24`v;MI}iPOtX(6 z$zpT3uM1+2O>+|axO48`Ah(wY5A-+VOY`t59Qf45d^z(_9Iyl>^!Ks))Tm@<2J zm75*sT9*STDR$Ygr0RvC_ck+a;j^&>DXQ`{F%^qLDE5b~NnVhfwrRt>*c3J47J%3sdLYQ zSq6Cm0XtlDwDVRsjU4EX74Lj7W?kL{IudN1cYTqMY-CMa(x;#BZ-U}ap2~keB~KiQ zwl-y|yggxsIZRDW&sqLXkNFU1(jln?>Y83QLrMt{#)7Nu4_tS;i!j3Qq-r-L3ArR! z7RL9#-E+kL{Y)O^WOO8WlU&p(P1v$PnOvJX!=_)Dpc1BE1802U!7Nlr)fuzo#PJ#A zGfM&QL=J5xo1XY@X4N16??0bxVKVYdmZC0WL3~CPYOhXA@!FKwsXS+L^QbfFgL7TG zrXJz&0mL@15_ph)YpMLJ7dk#X=D7jypiLJ`qtT+FZ3{)xQ)O0xL>U3x71gQv0PC5DQw zF6kx)K1z8prz)Nxp*Eeeh*2P5lL9}!uP?YX5j^eg~BpMkHKR5Ix(B!>~~9(xEp7`n*Pht-zKI0y(@b^`m^#sjPTL# za~!%-UQR1m;6#s6LxzsUjO9AGAs&suo?RwMKfU_nTc+#S_eF(!K%mriDWqnvh zzcW&;d>Q#G4KB;d_l_Jn#adEBw%rZG>7GToUq@*($!}8O{KnSBETjts7128ajr8b`GToci!l$}_~{i5O01VDpVNdDBR z)3wtqmL9XK)fLc{VXABSW74WQo7HUj+?}cZ(r}|2 z-wMs)-<;m2alZDMd(Y8W0Xb*%bj^BBCC{MYXk%`7s~w{HVs~bHWI9&o9wKpgJT;^Z z?hJpk49YN?79y`7AEyvXGGWL`woFe0|e-MXH?g{xz3@qjTsSby=>^ewA*u8ytQQkIIv4_1nan zVsRxiL*N`+35UiDERt*YS#Bp+LnjKS>$_AF=ax==x5aU*3$zH3o&Dy1hU{*Q3^ zpFY4NC~D=A6F=k)KUpLTatiXoiVi+DiIR?I(N${^_N;#c8XsPfdiyRw^eqFY8r%-C znveC5FVM6+w!TC$Z3gh~7ze2OWPcqD<@5k<=;xhjIO9P~ z(F$SWj~H2}thm&yg2!IXR5SMrH`rRN*6Esh$yv3;=P`d&hL$JC`94XwbxP*7t;#IpRE&Ie4X_rIy`|A^M_ACtWg@DzeV z9KOYAS~d2Aq_E3Q1q_&6X_Zta??DR)$nh>hgs_1gP~-RT@DTj|X3VVLN82j z8Ra^UD!9mmq}dmyrf_&~8Ms%YH$|WPNH%)%tv}s;E^(n0p7`1hS-SDl8dq+OvhzYQ zJ(f%jFqpqz?fcctV`Z3r>?1cvOt;#(%jZNKVc}AVJR@rp2W*nlAdEu#+z}LmhnDh| zQ6oO4vwmOQaSRjFry#F9*4{CXIr(j6uCG;@HVzzZ=e32%ORdxdCN&PPtk;()si;Je zNcQg4e$`S7B-6wW8Vrj|gRwhSB)`naam!|vNpX0omIJ#^8#30rRh3KYN|wW~V(gqE z8F_V-+S!LMQyUou3oYZkW+_R8RQ&w%!^%iPQ;P)O*6N&H{^MLbcpFzj0_DGkPfNu= zB{N(ATAkmIt_zhvGp}Xg(z2j3RY_67GN~FPb)N)L54e9zjXdKySm#UnE+{OI^^YF^ zF4*}`^(uL;+`F^*!AMlG7$jBbNXQ`VOOmXt@F2x!{hOiVfuaHhb@saxS;~=HSHsWu z=7NZgd8NZ#a1+mn^=W4JyMv#9%FgsVMb9|?tbXX&9EV+a4ca2>1IBxL!Iw}Mg(hN0 zg>}N3vDJgL!PEUY+`@ElRj#Is^*E_&pIqVp)=d0Q4VU$rMjHbP!CV3AqzC1#l?zQ8 zg$L;{#f@0rrNVvTr=WAg9I;Y%NF(2-LHVjz!fSmjX>D-R&F|2`LP*^G-b;Dhn@e6S z(%&lcuQ$_uNL3Y{j%K_JgxHO6rFJuPmTU1i71-2aV_{qr#O3yQbeK!qWYOn*Vf5p9 zjq-VFX<6H~aA`^bp!0Qg@(eh2edef+LP_3BD8~kdtF`Q>ZM z$V(ZCV$Wkk*{u>}FLCpVRX!s14^swRb;d04TGhS<4|%1fO%V(0DJ@CW9gxecqUN!0 zI&&z#KRdNNzBg4j&JKH7{7ByC_%aJX1CEtdA8FN#s^W8~CEEE_)8gi|@_;deF>i?} z;Yu8MM=%R<3qLshqODZpD%1p0;zz5V&c|{uIIHb^oEXja_r3VrZmF zj~iHsxNp+*t54?^wH;=4_~jl?lyWes>$Yh65tx zgsodH5H66q&ch8X7a;BNqKc`o+r6_5Cn#39;30I&b07qL1RQn{G1qG~93x;G0jj1Q z3pH1nbP|*rJ?a!sShRn8&rx+BRqbrYYG*krFpCT2os7CR|8$~b6}vpzH2Vkga4M&C zY(_U=l*V2)#Q&F~?!P*MuTbZeT;kP(f}s=c_}Ry_P7s*JLd2W5>?27H+cbHGTn7(_ zip^lPxdvmYYJr9VL(-uI$s93O_j9xg=bom$?!6nwag`=4B7#Ezx6ZH8Hd`~2@ANqT z<88V#tz@a$VXXnhtCiUKB&oycgd-;sWw^d)#^Fi_li!!9sHl;1ER(_R+YK~@x>sIf zXBN{EQsV@3BP<Ji6$_ zyoKF>EmM_1-$11ii6o`yVfv##kN5;3n0F5O=u&S`%!;7pbi!&GPF+f|3&buyPgbA3 z)s8JnZ`iAy`Az z#M8{O?lFLr#;OLqW~0~i7KQ3XwlP~a6U(`0oUi4hH-w^hOWRk)cVnRMO;8u@k>F#) z0dL~*TTFUh@uDTkMP~7y?7V?aRpmSTOyv~!ZL9DICHMN5@&z7E6pMWsDOO!sHxI~> z$x&m6ut~W8Bu;&y`1WzoEvRj)pM8RJ^M_9?7@+NC9g91HLrkM?kkBi9No*!YbFb_3WyB#k4UlT%X`9lWQX6IFQb1A*U+gljv9M5-Oee48J(QaF%DTW zL_SauAy^>FI(>}^RXT3JC2v1BTo-s+{%FOc-TcN2veiT8IIX&gS3KU#12qR7Sv^&5 zJf*pxy%E+{;=@1>cDy|7J2>CUc z*@w@5bfo_iNc@#X13#$sC!+3$H|X@{$BGD?3=dw2mJi{z>*T#!NQ#uYeni5VZ&^bF#l_VUpCo-53tyN>a zpza3@HI8Wgqsh_L4LKOD>C~2`896oa!{B8->RdK&P3L$&z1ApHe3tQOg$7GvZ*PD6=x`9Un(zGS z)Qb4C%YDw%jq)~b{0TUEL3_*#bmeCtp3j?hM$xeFk zv*$5;m`xR+Y8djihu$;TjBPp0wYh{M(fh_rW?ng?C6)7S1F4p|2T4$?xe5M|nlF{B zf}@H$oerHx{h~W_{UN-oK%?vy5N+*3k+7n7Ee){EUVUOm zw6LIHtiYPq7P*}(P+3{rbP={*3OgBiz~qYPTsvC7f4S$rjIYDiDEErTtU#WL>so{v ze$!AwxT36N&K$MTNmp*W!N1Mil((oO<$s;4w z1|xhH&)Lp0)S0#BerYJaS~$-ETm5{tZl!5e$Ev%azri{liG z_@Q9(JwFN({N{>Wk~JHr%xpqw`r(_9_p6cSHbP(A4bUUotNGT27oU-^ml|R@j!fNn zD{Teu9T}Hj3Dgk-4O}QkM$#3yUE}~?YHsbIaMJ>P3;np@B2ooj{$z4{6o zNT+8AA)XOe@3R?03R{z&T^g@U6T$T{U6)4~uE)JhQLyVwI zt-5jqon~;`b%9;5C1$e~tMvHX0GA?vH`BW2e$NIudt>hr!d}>I^FoxcZ4#aDB3Gvf zXOtiJxY|o(*7%6KGxc;69@BR!MciW-A7kUlUU_wGyrx2>QIA`_s7t0%aW}W}%Z416 z7&`Z*rH1&9bb9o9uz!IGia+1FIO_&9T<;0?jaj$VPg!3wKPQtQ2?mTfHr&%dOFdRnJGR1wY;1&k8p_q^7#J^-?|8rD||CSJ*au0}hif zQc^79d9>iVTKMfy zntK~SV%E|scGanOsd=oN{H}%IeZ<;~`LY~@ZoBDi|HF=p+BG+$tq_GY3a zZuZEgT2J~k(+vXnkHKbU**cES29M2JKQBGPgQ)eBHC~qt9?BsrN|2o0sQ~T?FYGLD z7Tun0Q`F^~30D*ah2Ox*0K<9#F8Yi;ucsOpA|i_)bO(c7`ajtMYLp9&PqSG5F@XkX zgi^n9roJZr5_TW)<`dt!#b_qMXl7t06d(*wL8!0ASn+ZlxM5SY8s^z|ozz z$MfBLs1!v2(JDr`K!Ng5rSqb$jUXFJZuq2LCQ;pc9a27ARwmHe>)*#7?R zTJsKik(07N--y%=yh>lDAMUPP}3ggM*$T&M(1#)ccVF!s`7qb7y&y#Zn4FQ055dgIe*HtqH@ zUo$IGo?DO#GVar=dtGz5mqpKz!@)cq_I}AyKT)G{vjn>a^H7%#EgxzZhYqL;JRVAc zxj)7qv>ttuo*c=0VpKjuASVFiTo9|}M}ao(nM`n56Sbuq3$KQ;%j`8Z;aBW^xRC2_ zF^j!Arfs{AJr8>muCaA3XI@h zyV=t6CcX63sS%!!xTjfq&>fO^=w41);JOttYh~to&C!;&gs>~|N@PLVm>D&_+62rjJ{^vLiTIVwu zrb@P4QCsGa9Q~SZ>jY7;XHy0X0ag66Z{?l&44?|+kqTv(az)qlv<7ooR}!oyt*f7k zYv*0itmJgveiAczqtd%TPj7gxu!XK0HDIeU6XC7z!Extfq`=jPU=dT58EPo<9C9U~ zeZm;nu;>Ei-W7H7(WnFZ0$_udRm3+ znGaWf#1wT_pM-i8F^5^&t}(<|y%4bVgmNSRWZi0hDPqD1np5S51o4bQR%HA5VcF-9 z?D$!@gB~4S#aRB`Z0d@{l)p!d~9g2#H_W>3>vZOcKI#2zkm#N zITJXf8KvwdnCxn=I#DGx3$FsMKEXJAwyO%4Hx@n{%C2uTYAfzMX)p3RT;SsYitA`J znBKM%Y8sigVT-u9>uWD@v2+nYH*GnCU^y-pwE+SwgD#`7V^2*cJheJnYtDc)a-9KV z?9>X`ZhoC|42sT1f>~Rw6N1m%hBC`wHn~_vs>4$3-4B0HJ%0yi68^-km6UQbo7pu1 z{r1DJz(DEuqclb+QYVoaf}Q|S4b(rVX2uF}C%ajv@)Ek|18O!yTs$+y2B()=b@W350ci06l1kyiFz3=r z!yFC+fLt)tP%2pj^2#vi8b0bi*kmZaaxYT&K6&~l>2rmzON*vZA6G5vVFw4|9qY=o!Z$4a+hvAdp>i%#oJ4RkIEJ9d0O zqlsy}ss!O2VS+|}mcCYr=?R?Cs42Twv>*q=-$+aFj6R%dw4ALEO?|0%Q&V`OSqlE> z8LAjI;kI1UQ(zKE1&qd~rNrRYk37HRo^bEQA{Z~;Y6yG4rFE2s68 zhgJ_52+YW43e$wa=dS8e94X8pG}dMHX(b*1Fm)WdwS#~7mCfR!a9o;R-0tMjVOE>! zr0{BmPPJXb?B?{S=bzm9S-fV(#;>evXhk-5nYqnY-32V*db7JlSB}TQIj|#^H(Iv` z^=75%dksZt`5j+9O=Ic~;o2$s1gQT6j#8JRJ&e};P&Hx-)jQj^l~~{43mO2a?V`4H zrJ_3R=un0sZuOkoLEKHl(JpxzwylA4g2@_o2b;SI@f1)|^fs=4obn_yq#Pdf&%`-1 zzqYGa2DL4;xf|@u9NJWv^;$zRz%1T%-7bYs^4yuu)8^9`Wt}gc! znNw{@#|F@M%LV%DuA=NI#H$t|r4t?plrQY>CAc4k45cq@%%xlPxp2X!(SC5ILf@k~ zugclOtqy;Xj0qaIC5_^8V}@wy(0#B>m@8J#0WSv~?ey?mqzE=O#abIf=#s?j3zTPJ zj$4X)W!9quZ=$1@r0*Bjf{ylLc&++wv9DoA{TL$zCZpL!p^m+;M=D+gKQP_9jH=7g zEw0f03jd@}RXUDo!hH%vq6J29ILgD0oIys)OGA^u`RV<#)F?THBg51&?6Th&UX!!U zK8{~1WWmHbaD;}=SDuULI;A+qQqT+&#Yy@wq*Zy7@>}Qi@22^)*e7x3T)M1>mdIvj zjV_zn>1CD{p=daeK_%j}vK0g6{r!as;Cgj;2&JqNo5gmjEr6(`-h^pC*j|GnujS|z zUqEsrbOmn@`F{%VC%~5vl0N%SwmJa{#`9<)!59^3om>BcS{1jDN;lp*>FQ7*f>}?= zEo%-4x|)_E6WWrH08w{zWYvi6Ewf`LRCYFD;uYOzly`>bd1gX{Vb>=Q8)r9r6NrVo zHI+lDS2Rf@#XKN^As1(boZSIr_ys8Ca$7|W4-e-$v?8&GW5vDQExO&RfHpzN7$TI? zW|<}dHYF4?-Zx{v&9C9brC zX`rQf`HyL*YXx7*079azefg+q`Kh6=852yTT~IUa&E(ioRu_I(_?G+uM)YBpN>k0N zE{|pQ&4JN1A*1E9JQjV=%BRyxE3lF?%SOHiSPK^FPD1f%rWy*Hd*t|*6J3NcbHl-G z{hgX=p`YEfAM6%@F#B~_1U17Mh1Kf$W7vwFwLuyCVq5@qmf=MR62ElKe6l(&W^H8I zb72CyChw_6-pyT<(q?;4O1I>U%Y67&ErEX=uXJ)^$oL9ns3GQQY)8bZ;TEWH^fDtUfqjiKnwUJ%@|;m{a6_W*}b5@%m_C!65qJK!bJ7*zGoo zW@PhfsesIuv-;)jiMN#FhS^igtNP>D$19v(Z?-DC?UfSv(4b1=Y*dY&V+-}_0GLY$ zZtbIYA9Vxef}0{8EDzKhHiFj3ccU$b@{(emM=oP8X(kQExr|+mWMa3_Z&r@F_ER?I zr`i4X>N-_=dNuomI=x`@^a;*_yNH?h*B%xnC?&zcpN7bg&gcmcP655zu9B>?%$hGH zZ0OjVH93%>B0N_W73KHAX1pS|7G#=oHNLs6&5=Y>iuV+>bwH!W6PfpJu)HqU(2_ZH zIQ>bnP$Yct!@itNYNy`Sr~avg$1^&?vbUdP7H2(eoa<+V_EYO%b7u2!Rh zht&EC$Q_IFV`Il|k%9~hh*&^h3eMG72{y==a5*ifE~@1RPSTjYdCQt{^Ck;Bzl^Y^ zR3P+BP9mpzchumG_|d1M>n$w3#yJ-!g9p3kqo1MbJ!1e zM^X*H{HGKmFqEK^nEb{lax1ST*PGY9IYXHo>AWU<`8Y7}fwWVOZ)t5Epx2BmbI|4E zlTnL4e53caC19b-ye33}-xhyY;BkeX@e*3#h)UK9Vtv(?LnHkCDJ9T5kWFi6C)}th z#5bomCau6;)rPKUy)9v_Akcc473@Pw`Suv@p!I9EMo8PRxz*gf_A#Y#fYk26m*USq zW*h!9>r0@118BZJ&gfpCTp!61U0%%&@Y3e;As`Io0LL}+(jN}lQXSQSB@GIubY?pr zl$&o|+-np-I3Jj37jqupXcBCf^wS4^2rTHWg)8A+hh1RTCOULl&CLk zZ|UPltZSUu3Ob~mrRISu1$Xw@)%W9){6D4Pza2b0`v$$kD_9Dh@h zi=W42DHd^!MSa{sbv8o3;$UL3nUu->3%I0-391QXlXI|BS!f(UB%yXsO*$RS&!(^J z_|7N1&D9gq7{!@3{r4sK_S1B-uiV^dsX$s=m>o?}U*J$Gpk>t4U1g=p6=P+Lcmedk z9A9(4H4R$q`(kZuGR~=8bblaclC}Qjnb$k$5%mEJ5FkTf8qH@JQe-(Oy}x}1oKf)} zRI1z|hM!TC&=POemKNz*!7>R zEFh~Rb*+iW>-kWqys$GGPMG1Fc?WaJ=~_lAn!>IN<}bykupth6+O!I<14*D}NUJm^ z^I6YW z(~8>^!NgYomBLZ_Oa#TEDXC2&23vvgBU|~Xn*?`D*A0^ND=ocwmNo3K$~}q?R{rQu z7X`PR$k|^x(cc`*FaA4rhKRZw-k`WSoPFKCG0!uXOHS6_{@DdCx)!;E;%ke|V4w!B zi}bcTD9Jher-0J;oADx}X%=zU3}F;i&t3LcUoi2%MK>{#>g`Q*v$+#qRVA`Gl(Zkb z56*qZe)|7j7Q#MFm;8EFoh~y^L*A#RHnL)Ryb*-WA?&gie$1odcipS+_ejkd79P&* z$4vyfUEWv+WDi%LNBihEA+kUP`PqJHY zIv`N-5e}H{ybtZaic0-h6WMcl#KX4_1S3^AN%Zk|xhlyX7u=`=61A#%tNRG7Sd_d% z_G9o9^&cAY|HlQziV)3?!y9VmZ55)fOmqH8yVCh4_F9Yo!#82+%x>4OmEk!qK=z8u zeyE-O`gPBG$Xy$BOPB#wu*z%isG(YS+ipOsFN-UZBj=PBX7BHk{%=o3B9WUoJ^|z0 zcb7}YrQo8cdD38fZP4&nW#Wi@(d-`+mw)pGUSw2xS2<&f}>m$Mmt<6aufCi1!n}You;U8K6?f@XC(^x15 zRK6v0ovjwTa*O|yIX&w+_h3v^-fG`VeSYW53AC`t%-TJ@L^4A?# z+j29{M5ki8>9O%w(H|3ugjJS##)AG|*Z(gj_QH3Wc3GYY?;a%1}#LepW;vcp~0H-_Ke~6fBkc+Z=Vxn_eRu!WQi&zWMLbh=FsA=)<<4v z|G#icgq^H#*449T)V^hp+3*77y7GdP_n&`%9^a!%xcXP6#hVx*bA8$0g3iDF3h-XK zGm#zj4-HT~v~xVeZ=FblPicLX0zLTn-eughsgs%^#_1@RJ!U5^S;foi<`SY8+ zOzKKXml=eMI70giPXFsK{o5lApdKpV0LX<81pP|;H`lITlQn$&CWecT@4Dt+vi|wx zDL;-!|N9-NX?>HiWW$WOtcT5gf~d}pKN$u7j@Oadn%EyHti88F#23TCf|64Hv48*)aswKY%IB{>sVL>0RSF2uOvZ3Zk(hh^33+(MHzsQA z(-|vB!SD(m%h{%IFn8d|!+xuykn4Xj0mf^2Pqv)Z#1MwSxn*gRh`qoRJ}V`C%1iwB zeoD3ejCt$Q$AqU$6x(ejH~CseVkW(ftLZ_&@xv8wpoSB!uWypx$Ft8Z;=`UeZ9?lyBNE^+ZmOrl1?hJjp8-V*rO$IJhAcOn{uyX#%?24`eskRcf6 z%Kr@dAET^9Z4RJq?XPTLkl33DFCSx>lNgH{Dyz4cDDu*AitYH9WjT2{Oylb#EF_08 zh}b^@+NE2UuM9E%2MhoC$OC8S-SKIe(g{@n5(EC1SZ z{k-zz&@nD(1$51GZ+~A~ps7u4fA@h|$Ag>Fz6ZW?8up59dJ6Qo-~QCUUs9EXfyIo- z_Ub@~c^3-6{)uoJ-Q%av{o})4=dXlCMyAr)RH=o7p~_GAItD-2%Q$}d^sqlykEaPw zSp$8`_@@(MX%GRQF4;LT-B^IR| z{&h$>BNS6Nw$j1>vi7YxPmyUm1eI)p3Uq4fs&li?2R6~$M2+~}p?~$U|F}fLe-lrV z6i`C;K9C}lHLO%?#Nq<-=y-n$oc$GdjJXU>AV*4;lNHU{m0Vq|J^1J40NP%esxh?P zQ^v>|o0Z%D37*idatC$VF-N;tovVgd67FJ^U>7vuVcVr*)RZnC6G@A*KbTt)gW=i@ zIlza=b71I|Qh8ULvuRhB8fq@Geu;0Hj2;txk@f?l-ql!jjCQqi;68S7Wqa-pzI1u$S39B+-j{62|v?F7InU`lMsj6!<#Lc zk1JxM<7rY;BP?d_m^LM9SXsqRK%fDJNB%1J?}J47O^fUt>h<+KizQHS#9Nre^L@-} zk~17^SZqm(Jj4ZC&vA4yQwF~c4Gk?`^`T{2^d?`*tT#b(Z`YlMG&Hd+tkt+!uA05h zRLw{(p18eWqVBst7jr!T?^Iq~4K3xYSpO(J;EZ_WKE9x1$+5Qs&0?YksoqKJl!NVd zlR=zT`?@VsvB)mIrXJ$A}k>%EVLTczt^zWETk!Hy8X@ciap;S{i75AB9T?uoi%;5*} zY$i*;;K zYl;aOwih|Or*ue{n3x^;dF&%6pe}DN@u%A|@YJ4+9e3~DuK0A)oy3ngp?AJPu6nSy zQv|U(Ub)aCca_(2hrXCMQ!SX@uGC1wRsR){>77pZuda_YlwKv!bg>S3cZEp)w|dNf z%73O*4REQ}nUBjK@B9_H($3_4mFNCD`f3iY&9+7rPw$E=2;?w62H)dcnR1LncHLf} zW(4abwC_Czno0X!Y#8OppQj3c8y1#GM%{{XhxOK8x#T&h1j;tiz*vl6?uzo@Nz^hm zm9Y~Je$+hyhfgD^F$JMUis(d*c?J0L{;{L(@p`|drD~)xDH0G;%q>AzJZ;3daA&$A zH|C(~)Oj+DjOHXr=`jIaV5GV*MkKA%^cMO9oMm~mLBHj&F^(FfVYw1cRkRSp#l7=c z-qfq#a-ik#wth~KQtVzh9L}&_kXDIZg(DCMCxGAubfcP3sF{A~Dt zBQ*f$BSECXJfGoG>a5@c7Hjn3P$wMBM#61s_FE9YMGV$2z0VR(6{oGrrl;=0kNmhO z1bw0)iHH++Y01tjw(q~hAZXt=f^NwVO?N>s0=ug%aj-SQ67wm1db{1b95Pkc)K~4H z1GIKrI=DrvBD~<#-j6JH-(wpW_;RH^ZtL~SNl{tFV1^Wn{;W*>BOQzm#zkGJdCYFO zAYr@C@2L2re#mF;%I?B?bJH%%&&jsi`|sh|@;fWzX2s=SNi)ZuG*UmC8gVPq7& z8!Cnmy6A~3XH(BMV7g(n^e2X!rkZ=>jP+=VUL|&=|An1V|NDo`dfnyliyVh{saxTt zI|qk>tT~$bvRooZk5ZpSji(nT4t{BvwCu6u(u_HaDfmzjf6=+i@;ivp?*4&Z2I8Ll zIL_s#pZ-s;d|7X?SY(XI@H%LB1JPALbO8|1&DMU>Pri}I>-(D>PTW|pTN5`w%D~9# zn1v#3%GoONKVLWF>fnU|mxA~9-QNxG#7qc>tCd*MZr3~sv!U4nIyiTMZr^@bdT5sJyf%?lI`J-@-&(tMEY(!= zOz@v}r6HHpKCPBnzGx#;0h(wXFJXi#J534Ox5RZdHES?Ce9x#_yV%MGH)GR@$yt#F z@9>aG1@|g#94%i7u?=F1;?xXM>R*)YLuef z10y-=Ik)!q_GtT&HbrcZ?Nz9cnn{*8aVX8ioXXT zs_trF(GmF*B8^j{FPG5*`f8TU*PM6P&xztc-2u5?pr_Bq<8lX(*s&+pu$|lOzGhgr z{-t8=q6J|#h{;JB938<>e&Rv4eFZz>&A7Ei!E|vXyf)R!aET}O$ygo%ZfIpB5D#ql&E|{;19hp6`v^+ zuYLm9Lk-tzMf(lC=krcpp2{c6txl`(?B!R>&}}jA0;MDm9yW9X;RMl?%tQFPzq|2g z!L_OP4vH41z_{>dx{~-~WSDK0`~5-|k8d8Sg@2iz2F@L5gKK#$E_54ZYUX>pySo?A z_uWYOGKiE8v)uT|m2F$wVqdSDd+Xrrg$u^MDEq=dqXdUS(a}TDEt8ScK)3FMc2~h{ zgE~nuY;f+dgMiG(p;*-5;9!NI>8drD|5x0~ZuYpO`R;SS^99eJ5Oj*dD33A9Hj`ee zB$(Im$+G>V7giM?*?`+f{6u~h!?uwYcI@)==X9r@DfR~|oY0f}!|Oa3uo&lIWVC>7 zl|?9HDrpfg zzKwo*0*E_SHVhuy(N4t3fJKpKL$M?ZpIF!|M%kw6kRA>b@4hJ+7f?Ttms7Eqjg}?Z zH>+d-ecj9UEYH|(YhC$3WM6t)=W84`28Fo_HSCwxBy33Ct@`>v$Zi#}Jp-QKo~cBw z2T3&^lK;_SK&cSG+dA7Q51FZPQP4^Nxc6#GUy9s|-T*La&_?-4EDlK*+dZ#Sd$=~Id`8!?ckN^um<5A6Llav zV?5Q7__r{5r2Fd5{*j?38xvO+m&jWx+MH$+l* zcZsdX@o;T^+oe3IxzZZj;aoLK{sr;l2WH^U#x}!>HH)Rxmb{RexXmrOqaJ?*jVB^8 zQNn4_F)Ca%mTP1WYZJkyCflE-*6lTPr+ps-3a+wE-wH0&lI;S~(X0P=ICvrE4@rb! z%6u)bPAvukU>;5UG&=eR-!@+3XvSZ|L1z|<;k3jv~8QNX9aAiwC`qUU-7tfVJap@Z}_hh83E3Qon+-XTyz}i zQseI7krQJyrywTwMhgRKNPkxIY*BXA-{fXg4Yj|&KV<5)9R#}Rus_`yx9_?Ghdk}m zBctH7=6m<!Ivf(4fV_RLtAhSVQ7G?`$+MF#0w+($wAUzJavN zMGmdha(&O7tO}Q&Vh^Y$s^(p3*KTCiAKOda4bcLf2QA@gswGxYL3^J*T?3tVo>{o< z8wtwl6w^<%Z`=p!J8Y{{S3GWQsfgm6J%k`DWvzaZh5He9T~-rkF|8;3ei0D-xqE-U zYPccMl{K^=2r#N|l?b-;ow+GE3E2Zko20>W-xhV<-mCDQUZo;^L8b#WwVX0BGIqQF zG|cxBb&Z7vMgB+qVi2kDXpqUzZ$4>!(}1*U<)$QpJtM%_*Qm?#a4Y-*9aPEbqveuh z3YkXV;G{*1i}{R%qyFUIHUdTgecw{x-Z;i($b>EC$AWMK4S@7nG z;D068B<#olcdy_P0(i&k%C&LcV6S7x79|l2)O7s_#k4mI4->vYhxJQd$E82y>PaVB z9=txj-;_QS@iuy;Ait7rVb)5bIFmT*^WLoL=(}jiTi{<8j)kyri$%?>+Y9GE7bOpF z7VGrYD9*1$8|g8U0C^fvYZ~-p@-S6JRZONQJ4;V;;IyonwKIdxRYb3UG~TYsEp0=$ zCl1DyP9~?ZRAt7H>ZXt{`O|&@2>|D?^qxl(qBL zp;^gr+6z1&|KJMSbc_D%BwsmCrALplPfWPxtU?X4S*j6br@i9MRxN8G+O8lOfJ0cTN4#)c@;Y)U{+6qE45eBAoQaR^|Msg)eKE zS{F*>(-I#YW;CEUU>GLh2aF`5eQXQZfCJYM4U?R`bv}OmhhJ_)AGNzccD+7FK}<=J zCopSSw67Cd1_xzKP?7oGVC&JMzE3S{T3#FuX=Ofsye;W{+cPQ5+g(OfnEg+7wAOJ9 zm}vZG_F%pe9{pak4)tDgI<{n|tsrzEl0VfaE?Ei-x_bmwx{(p}%K zut$1=_A9EXZUfWPu9D9@)(`48AnU1}q<{$nq~Yy&r;}}00lW?Hqrp6kiBCsrH)7X+ z@PGl5Q%@gz4=|0Tpk*joJJLsHIk{X;LE_L))ORhEQnER7RpPq_hwrrg6)C`Mge__A zOpT;q6imI?e#tFEwfpqJO5$Kpv*Pxrcjtth4_`Ej;R;r3=J`Ro*p9ak^hQe5QWFR5 zjOYq82c_CCWhuCF=uIS9rz!}YKoZW*ZF2}$txyfqE_s>?5_amkCrzC<2=%v!}89RZK zo@LQro_p8wdD=+*;LXqc{fa(wh$Lc~MPVtQMZfC|ZhzqofBSZA{WR~?esw^oVi#OF zkk|3STmaZq0}QjQD6u(Gq0)EnIcXQs+9%uuu)tqJ#a)&n9e)`y~%Gn&nzLew*$caTm>`%o^vFo=iSE zAk5LK<*F(dTlC-Zb`cw?w5`!Dt!f^@$4JQ)bIm=c2F8%)=kTUs*)6_jc+_(=ixsF_ z{W9?+PH(MVU_C>?8GzmOC3@=d)uj6aN81+fjxsr^VHIc(-i>nX;aTF$FiCdxUtx^OiWFX^#lD`NhK}HJ*~rrS^;$*F-CfP1UosLVnAIe{s(M{>?uL1b~aq6ahd0 z(5yvzgYla`k?_`9J;n7Qc7YAhMVxD{Q7+;4d{-l;&0e7JM}1v|DNSQc4=gZm0SMmpF+FY z90du*05wlw0JP9ItDH4=&J+xo5N%y#R~}#2wiub24AA2gb`_(z-vwfNy7J!(`bskZ zeh-L!cN|FM{7wOpsMu05i0Jt7LP|(OBZK-@>KT!s=+EEWvr-k2f5uI1PXj-G#*vii zhZ_x}QACX6RNi2I$)^vV3-M-TOY^nfWUU?i`EbW1YERo0TMtSlbVNV#O<&>6(Jhx& z6cGdmR_}czg9zFbS|2c7!Xyau&V5#{Sgoku;iT=2u`SmFhP}JxkMD!T#3T_45EUBz zzDJ=VBHTtXhgJShM;{i7MZt3uH%BuJ~PJnL#% z_JH)7wpLQzu^q$I?{=jm;U!-gVm`~{_x7!O>Xb~=!jU8ki^CaAt0i!d?`4Tn zN~Dayr7O8td`RPa4>zV+98F5A_uW@vJZvv;NXt^sBabWyxW9eGvojtU5M85G>9VFQ z$E@oJP?6cTZG!H*uWr=fL*m``Z(9l%Zua(0#}5Magr4_6lQiel($d22&>dlKA0^Ix^^HmfUPV0So7)uo!sQp;Ud+RBGNv`PGmNq(V2J- zOWElt(iHXCCG>F=_mxXR7IEMoJRb#i`L22SoJ6Jg{xe=o^P)Q+tEX1yHF$xV8}_H1(WK#vRh0oRhaVzLqMMR zim2sgMu6g-oUVco#hi1W&nxWp1tFIRkH5Gaq6i~8l-Feo@o&9 zYeht3DjeGS+Q0|a&NnZ{XVT_g*Id>cBuIxj9A@0;J&evfK*rfGbCx%Oe2@L;;8?7iIVWdfVb zC5Zs45X->uM)c;yvW2G|Po=*@s!S+jugpS?C-@ADltr)Cpv~C7wT}NAqYoSG_ZS zF`~X>@lW!C3z|sNxHhJ({?_yYQ~b=V$-gEWRlJ=gCyh_8E8RUoLV#LcMC3CVrMq5~ z5?{9}99WPfVyEhp73}`Je_J zZ}430y?aECua!S%8HKmb-^u&I92U^L6S1vSxMrF=XR>Ao9=<&8q$Ua-SnQ*KwD0d8 z@6Vx&&u<3?p!s%MPHAJ>X$nfsM@xc7z&+AT9fz88JEpHdm2j=smgtIY2*9|hN96b; zM6&Fr^;P56M=tR$GzRIBj`0pi|@&k-R--l#szR;FFKo5fLxhHNiAooW{_E^3b% zBLpVq-j}}?Cjid%TauxvAYZ_EER9Iy?bKUeU%=2Ms)=1$ujpHSt*9H{oLT}n#+8#G zLRv(5_VU8)F_za?0CzBY5?DWL1ri1Tb5WiJC|1(g`!9iIvbjFB1kJ46`NVpwEB!L# z*~{W70c8oH2zOjhmj3~*%CD718xkqAZ|T-EGq2fv;q5}@22?K)F9p|A6XBw!JnQ{+ zC!u;)FRER?GcgjY#1ptVE(Vd;Gmg^*9}fAFZ9A}xz~V^WJ3*-`o^mM?$6c?LrGe=0 zyJ>4oj1=2ja|E5<8KRnY-2C)V9)c!`5)h)-C#5({nJl$Zn^$1qxoC^`$a*=(uUjJp z10=r1l?)A&r9;X_wG$$prQ;AQIp&Ratq~wlA(uEiPP^`d90=evwwK2B$>%zi)v1vH zdc8%n5DfAG|DdV*^qqIW03EwN;n3L(WR2@2uB=Jx^5#INK$Xr{Q!nLD0W4XO23XET zvv(U;o<9eXl%*}nT8980GoG_nR83L5J_tCzP?v+Sn%{#Of%ZrR2*huclAd+l#<#^| zwIiUo_tz^0K%96@|7ED8&`Pi**JxlZoTKg=a`TEM5!-e4+hI^}tayU7FmY6A(pDH0 zZn}(%Za6-w+e9q8VIq$<=1{PnL2|V1Bah9CcE&*^MNTD;~c$8Nf!#HB--A|Zj$Zg z#c)Nj-loP*@AS@@wKW7@;Phjxjb3)iWP+HAzPq3}^FluX8tm5{I5o^N1jTUTx#v$o zOulqt+knOZWBfaWI!BC-xSM%f?u?0|%i1`XzCIy^84meJh}-l=l|&JTB*=DEQ~9Y0 zHH-J!n|@uRP0p~`H>sa`Z?e(Rzr)526WR^e4ZL`#nYf%l>Zq-gdN`%K@xsj%1OqsA z{_=vFx57m|;NXN(!ZX@Qdqr{eZ|?(59)t(;vxsT>fh#MSMiOz}4&C*TKs0+9Ubq7h zl2jHRFz@vDX&4IpB3vXuinQ83!PlCp6KFwph9ZyV_P3)M{_rX!=0^*qexNgQVi&vK z8{K69bFxrZlehFU)n2u_0Z_OId5F#y4ZEtldzH73j}xl)SOu;`Qd**Eell@zg_0U9 zEPAH|7+M||n&Cw5HG%@3_OhuIisR^WnnO)3$1BbZY|gcF_3WB4YV>ESW$%?Iz&-$) zF@_AwK%;`i$Fh9&54RjOFm43Y~xBR`7796Ckj*eh7qSMzWR`@YHL|pdFSn<@i|vwBwm!7AzD>k zX4>y7XaU^#9hzJ9V7lN0SjY`F*4ob94ds~q2z%;Hd#l?V=pYIvv2580Htl0vO-_4m zurHrZP3t@(Qp;5B60D4A5^`F4-x|rWY^)cpj9UykJUr~sav4cKIcs#-nZ3}EwN9M+ zC?<)|azN+I_Y~lcV(=)?fh5GiEh}1a|4ztInF9)_{1Qb+4IF{0$`DeQHx3;gxKw+VL zQGE1!)%P0YxpPpRZ5b*XBPBSlVykZU&PpmwD-W&kPcT2D z{5(;Ev2KVkcfd*nux?V%Wy686TTF=HJAFLQ{{D9V_u7P!DCN1cK%9Yz@9pijVvqFi zT6@wKs{vqWH7{Dgda9r0W!-l;#F}R{>6{ZV{<&YRieB_2M9|{!Abtsaq`gk@V~?`3 zAJb6B2)WL@)8@5Q)znLivm%~|=T^zl0l$AWuy{qxq4!)$LQh#f);_jL9S4lF;vVd~4Zwu}JjNCO8p4kXpfsOH~w^VnR34+t3P4VU|5sta}k z9Z*l1lE$Gs8FnfA>X$hL*ol$$DWCX(r63?P;2)B6fYUxJxkX zpu@ii5pJ7Ik?^io50EPY?-GbyKKpoxi{(79*TvQh)G${U8X5@32A~^b^^N`OrgRq+ zfLfTKq@d-weq;yHlfT+qSZ{o7WCYX+dj0P#=LwP^J^jJvFV@{J(Cdz5_Lx+QA8a3@ zY%_Js3zi(+g!#%6L#XGtOZT1(Blc%YBe;EZvIcEb4J4kwq$qz#1%78$?Buy^u|GQ) zp+1yli^$!dDMYB=xb|rX&kdk7^FxPlM-w2f7jJz{_%^Qq&g47WV9Y!f`B!nk zs-m4xF(zygjj4r2Vkxv{nkWkeWc4!nor2`k5Zrphg$6WEZg3L&MGz^HXBp!ei>>CY z&Mv)FvXHJfI$*K)MbS|UQ72Th>Kj#}kHnDUiWfB^IAHORvCXjUu&1eKbZ@B?yWiA< zY03MZAT67EN>B8|@+4}bo)cP(eyhC3@zodHz1Vznfo~RfbV;p*sIS0H<;-5^A89fI zSr8lsMaH3@uYRz@L?A8GaUXKFR{{~skukX{XzeGm4 zjU#?1Z!#Fy6sPX&zj$FB!O4)AJuoVqKT*ykwn(JQq|3CkM&e)rs~$pCE$#z#3{UA| zS0;TZ=F1jepg7Fxifx5h+imF98f9bWUgz>QY-j#H7(2h^Taz#}cs4=Y9lyT!`aO?% zkNI>>APLF-7FGrCxwN~{JgG?ahTCl&ONz%&xk?&i=luY>!y!2`)8jr*8c>{9Yf2z%mv?F~4H}bA+ZLdhP0O{+EM-056X$401))@h;_A~03E3?OkrbAAw}+vk?g`Wr z+@&7R+FV6(yR7n_%N}PK9esd$&tRzdQ7X{8)S}h3>=Tu+ZgXmjnJ5EoyruV1z^AIGtl=C&fr*Tl<^*v?RBm8Z( zy~Eip?Bt|ghd4~c2?;zUARGEq|0UhR*Shf6s)ukkFeY{Y3j{P&0^Chr^{=t9iKkdVhCpXb*ZTdls>T3KZvtI=PtR>9W++l z61^{9aTGrqWP9;+A6HFopFp5z9-Da%xKg(8a>crc8;~#zb@Og;Hy*m+4o3as{9%J zYb#Eh6pfFTD7rp$?rDAFWR8P!rfS$KJtR=g+A{bYFac1ljh)~dT9Pk1w@)Zyita6( zBq6~aoN?T$!K)KWAzk(+PMfM#HdWOKPUQOtU=}WQa5CD)y;9e^ZFAg zNZ#$pXxbH@saN>2Ll}`vjoIHq)DUXX{Ykj%7K4O}7EoBUfIK-~oRka?%sox<*Iir= zivxhfilZhWE|f_Fq^V`BAP^p1{Qv~IcBeDwJdkTLOLU?5I_QCLQ6*E`FNw%_z13H# zBTVQJ4zxT4aqBE@dhoTLblNK=jSAB}@RULE|B>|;P*rx#`|u-zl$3yUiFAX6bOjcSGWcvC!TUf5-)?#pD=0X%-zMmjo4RY4@jPTq;#y;OdF zex2|)Rpsi)i!+hlb zzU+lE!?Yf!I>_>;QRs(PKL(-<2hu|f|0C3s4c+W$h?><`NLURg>Tf%VvUZAM^N$nSiW-Q??3ok)m0VEIBOsn)X9O^N@k~T6@I;OjQ6hXc5E_d3QH;U>>jjy= zkVotbP@DOeD*1!`n}D_b`0=BVP%D+^j~?PpCkAWiWU0Zi?ZLzz;ZgGp+q!8)jn39P zK@;!0ew%4x&ReO=BZW>)S!Rq57ynPD1b)LHIzm4I+K9S~*+Gt3ye=r!P00rABwLvy z;6G;#&H!)`ubXmD5S+RWWe4webNurTs0o9ZLH~xzQ%i7x4SL`s@dp3g2LsqJ^byvj z?`2FtOuR0K3W@^8#_!=+x)+^tZFl_*Q(z#c#56|4g>bL)o@{kix=un!uf}Sa{h+@vvRNMX4>g>0!gEpS3x3e) z^Sp)Lm2JxGuocwJj=Vmn^|@L+C{(TauuXhZetCJN|2g`mwbD{Wbv6mo?RR(cFPcTg zBo}sn9y9MQ%c51x_f|E>#iO(P$z|y@ApwC#hN}H+z5e226-aVDg<5wgb5Lbwi_VYW zrqkP>*rpHn+s1i)rgSIm)@)Wk|FADIYCYeWDaaPoo09?>5Y3v>-+sZ4)gs+PDF5cZ zJZ!qqVxf1~efZ&jTgGb|iK(fno2@!KWo3vJ^^p;ljrj}6jk z{jOkI@uvFYU;t@Z|}Fz)Wcl% z#{5J|k6J^&4%y1B&y(prDyf3M3B|t|xRfBOxk-F5>)^x=pIIvf+bZen^+AkU0yL z*Ck1ng=2Z?j$im#>1@V5EOwRWXqvDT?WgQK0nid1zM6+6&9!_-}jKV3)j-S7Qj%x-)H$9yr*iyw0G3R>b- z7|c$CC>_ejaTPt86k@)T5Lb9n|JpSKsIh8fE>22k&#z8OKyy65_5bDL?j!g(;Fc^< z3ixbhK7%4yMb&Hsg`f5J@lfY^n449L69+hRscdw6NPYz7MWjEPT?EtyU3hNR2fx^~ zGJ0&9T;LDK8Y7wn?!iDUDXV5au@DT^Aoe+xS%Z}2Hu`uL$b=sjewK}(99>KAAEwXl zea}}?X|!xsb?G+%C(LG^ctcjI-kW432u9?Z`JLBQ+fA2(ij>uYBL6Go0rJSLk{!%% zS>t~iu#9{#qb)aH{_VIAX11R5EFpBB0gJ36af}FK*Mtk1fqrZt&I9)Z7*Z-Z#xT+0 zdtfyeNK!7qI<4;KZ@$Ttj7+1KyCe5|q%sGEkD;G}oPN)RY z*9h?IpT^b0;AlB!)~i2ljm@{!PAU?bGQc&zA;=O3Sw@fD_KjE3uZE+1V>kQ$5qRj- zk;c4{a)E{eiS^le`Wn1~pK`D{cur$^EKzEMEURfOFNTVn*-vxyJtUhzL-4V>?zSL4 z>4OZ3)E0EFIyick!L8r)c)%$Im2K3`8OhG$-dcl*J|nEJ?9-gE286suuEP6w*f343 z4Fki#*WTPyAwurYYwnX4mO@qe?X6g(IbdCy1Z+h_0&y(AA8cw|sw1Bl&#eWVE+1Q3t#u_ps2HlBMAN3=Mbc5v^U0USY*Go@U*(A~ zZv^tEEpV9A`0=;NLcY-=h#Q;!c?{lzP(VvI<*uv{%=+{*0(`8bFKAH8vBow424Nl! ztm6UAODBeL>vpYjj$GVVNh`B?-a}fReofaP@+_%`IJ;20ACZhx-_pL7(>$VhcNNIN5+;^#l-L zo_~9LXKowdK?}iA``Dd3clLSS>idc|?jIdg5F>?~Y5^6>t(;TBaoWNA&;G`EEZ$Wl z?mfA!HzL7tv4DEAGqfj#xMIEqeQGts}f@?SQ}$Pur}rUPN1~8%ZXT< z33O8d08lp(Ym?+7&2e*>@kf@xxE5Rzq92LJ}wo%=wHdAeUAWBLWNq`IdX4uY0H|9sS7^;w7ZfOWgQ zJWn;(-B(Uxp(E#5$(8OuPCR{va&)g62g4XR{2>fs~v}T#;VOUztlO2 zs`Y*$CAsiCNM;%~dqsLpA%$w5)Nk4GKRO3yH~VethaY%CeRGJ78gBKutPCn+=1hhF z=@0cAFfQE87sjo=E53F7U8>E+or!>?^KHD*a_V(t;M-;PXQs)lUyklE__?6@&;5t~ z!Wal8gs^L5FUS!5AJ73j`Ye@Q5KM!%L*Ue2W!zb*|NAgTmc`TQ^=5y+!;4QP08p89Z1gtSk46C_SaHm zSaC({HKqgy>ixO;syAmUE!pyB^)6Ju$q|MGFzO?fn}!1ygKy9@Zt@O)@sF5@8~TU} z7ZtGvA&81S*OHS3Fkbyap^o zb2i3Rs&wmx^vyYhU6`S;bGzS7wS$)Kiwdk@}t&LpGz&SvgTj!Tcj=K97phv z__PzI@4h{J=95b+BV7iCUBE{nY3f_MI;0mX$f?2}+_dYa_ex~M+?z^k8v^!h1+Kpa zK!P*}i)<#pZj3FHvNXGx#w#Te9aTXSPwOd3MINb3mjNXAyAXPHxF@?)WH;;3n|P5^ zK1+rS+YD_^D1}z^opTXYSxwHIJHAX^*8LV8FY^EEnM*NAwpmC-%2Q6)GBh-7M3o(2 znRouHD-llv`RZz77)68LEoJfx6h_0PrvvG)wL8;`i(V zn7oR(;pbP8MI*IF?#KVOG1PZ+2~hu8Qcx*h(Zq!{Z0U|jlud~EZ3NftSlw)w$O$-V z5EhPU1pK0Kwv6;=)~A1BpW3@T_9HLma1xGF^kTZS{`Bjd$ILeiK88)rC#98$RES#T z5Q%~RGKY4)L~UbGJrVoYpLnd57`kB!$je`O>Dh#5gEpXX?z_%x!W2&o4q>?$GgPa$5CL7ad@z_{GS`sN&;kkVEz9Di-fBiRXj`cDVoe z=-ajx%k!~sJ6N8JXXc=f+oWg~(GUUiba}G-i>%n=BL0Ys&$6vc_OSH?lK{WMU|i3w zLhG`61j<&SHZk**ssQNtuFj`1L@s7n&ezffitNEeficr~{X!sB`?S0VWZ#9NDQD%Q z9jg@6){~Jt5k2pY%kJ}IBz(r+%VBs%-CHdSevjF*C;(ur+5 znzt6`@e7=bGrS*X?ed$hq}WI7a-B!I(yp{4e8YTl%tW~{gMpGFb73f_Vy45fUB0X_ zJ5$PTs6$cr2);i`%5zTHIqKmF4nt7Zvk61o;Wy&`AR8roADIeMxwQovE-8SzH~>w( zD$S6b38?9h2#wckV{EWvp@1sv4pril0!&Ce0o~hT~n=vDV&Ntv%8E0WK!Wh zx+c=KN79R{qYO)zkA#sF{}6MaPGdF!UwJ1M=e_XWTOOs0fl+*w-7>l;D&8bgDMi4@ z+gdS0E)L_ho()V{UdTk_LXfEh9u`l+Rro~tG6oh~ z{1(lF2Mn^)pTvZlhjDVQkt3xvA zH7KT)jj(Dy@-c-@b2RQ(zq?$!$7|*8U*%|Q91Y|*+=b>jpFcB>qPd`4H6>|zOTHx> z;bu7y;oT+_5xZ7JL5&~t+PQ%sqz~UwTvnEsvxjozQ=N7%WWq-=`$Y@Imw)Aj&Cd^! zBzCgs@*OnMM36Rdbbmr0c^hy2@D9welu^QWK#CPSck5Ym*!e>9Dk^@XHJWrZnz>`kjIZ-Ur^)01!`9#;TM#Ou@ZD6Z z#1uU*!g`WOedNn1;rSy-qcvUsQWQXg%Tm>kpK}MJb2OBaogZlp{T|k7976M)y|y3dz7I(x{6^_}`Bc$& zm858RN9p4EXra~^uTMQ3i24p&zZ&rV%JkyK>f%~QI8IOF9<(cbx97`g$)9WJ6$dt- zg6^y)-|@qdZIO#t$3`vcIAGXGm?)y4?o)GUUiA7U2~g(-644jkxWGp9C147jj(k!B z-H908x3B}3k@OCj1d^mmGO}lSuZO~*xU&<;SjOPXyMykUtW-8WcLK6eo5W797TrbM z;X63fZ}tw>@_g75hBrm2dNUv@8BMB+GaM#FrBtQqVWBj^@Xi_bZ}8BgQ}^kkk5REU z&|?fhB`U&fFE7u&r&Emu-P{<|UZ0&LE+0ju_k(WZC+!SrT6Nqxrzc`3s1zIw*VjL; zmKDaOd_@h&$#!$EW|`JaeLs}^Z!PA(`jFb3=KYD(bGsAzn$2Vew?ber!)e!%cr!Y- zL3KJV^-46W%z`;j>;a?Zn&3)ISZBp=mD8;D{ruu24g>A}P-=f~b)i4o#p}XP#Bt3s ziq|r6g`;1mo<1PT{&3=|d7>**w14JOdAdA)*gq%clD2of)a_ZM-!GvBBujS2m+0AB zp9Gx^Ya%FS%2@2lGg(Sut(JazbzhX*&a_-OAe1pC{~-kEG@FaDtsDQsr{89cN zX<4+OMh)C;Q_NAP!Zqe0`=zQV{=VA63hxbVNAUKrTN_(zjG zZeBf_Cy$4P;d_n^)D1`H&lN>XF7;<*=LCH(NDVK&MW@E!K3(lcz4mr!pxoa-0~2-n zd~t<1E}X9RE+YG>ME&+J&XzxrADm=^p2ABtu$sgUR`#s zACmc4$NS{e*^42f_{i$`{fg?@gHFH=_83}EOGGx5q`ZYvoZlZbkWtwT*sHN#Smz(9 zRWvW+o;dxEx6hAc(wd%HQdqSCcUF5#FE$|SFOkE$G@5TLRw2>BkBq&cp$l+7^Ks(< zqM~|3EfZNk?5VPGjhbFrXp=|?qvT@tRD7MkKFXJslVsp* z1p21Ie3~bc`XVJJKvH*N-ZRwRaUEZ2Nps*G>A6mly)k}8B2h+G)}&*S?yG$=@09Gq z*1$uj7GG@(B=TEjf`8O43${oR5*+qqLd(+BVo0UFj5K0Cuc*M)WPCo>wdP852PiJ2Ppxa|&=ZKm?>|_6xSdDgu6fKL%A-aO;L&VH52i-f6 zdG*;U1{r_SXUBnY@I z#4V->yFMrLg=SDRm2nn&m8dNh;EyqOYZe#MC@ZM1lDZu2wc(vxFPD+>tTGgZ#P{yb zL$>)p$y#rQ#hvdJSx#yl{$yVtE!J1YBHsHtTMXtq`%GDC-1jm*wPaO zSU89~x(1m10d?RK?Ku7g%>l9z1=1BVc4G8yI}7GcYt|R(LZb!CIf9;-fp|+gxu~*p znNd-OA}2#+8&h=wcnj*()P*)pi#w-}f55GE_>+ygTD3 znxORF7^d?%Q!0Obb$gur>K69wiXx)4TOWzzcSP)#{O;L(OFnx6Wc_;QKxzjp z^=5Ol=)?sAd@l>2{Y`!B)FX8%dn_(u#$|r@A2ku*`AP`Z<3h3ICykbA+0r&@=Pj3s z*ikduw{rTwBPGrsKCYMt;_*F*QVucUHW9o250P?7fy9CW%X61AtF5^TWt#6fqgfv6 zqlMb7R%hayVmghlQx~_ht7SAxm^J$a|=aG(;6P5`@Lmn zq{7P_UJK{HEG?P7QQOktbv}3g3g$`V;xi~&?lfL$t(J;~MNR#$6fbP65K^QXTdMVtna5xr7LI&iAv?6}wEs5tvUr}6#KF9cvD;E<)-{pMljv_;81I zC-5p%=k_YM!rr*?^x<+hO0tZJ+36#V6;jy6X}Fx?i!m67PnzYo$r!4k9hOh)mL|zm zYcM~h0T#2hhcJ;`KcK(-H&L>frU-zVtxY}2&$sI>GChp>pZN}nx1N!1J#I3%t_2_P zHtwG)|M0!yN}#BJi$@a?xq#%aY#v1A-~AJy`TGUa!+^>%1OjR{d*@Eh0D`gtn@@8Q zB>_`<2$~QO)QswIU-3T^hzOgoMgBPB1=ic%+SzSIb2ihlQ6yEW|_0+y1A5QVZlD{{H?zK)P5kuB;pZ9odZ( z$wz(J{P`Z8jT-|eu5tVk{Jsu>a&pof7sxnUS`ZLRznUlhS2}lT@b4&%KZ73MQ6Qax z>OmX_pX;BosniDGR_wQTC_z~ff{%uTq)fmB5dkIX{@a)yTyTRBG8#RZUVl(w!bIG{ z?=Q^WgYur*zro2YgN2$}-1pjd|6nh!EIpmq%+C)LuOT)wM!fb@%{jQ_f7%@UH<2Hx zt3R>0X?CpB>#*kX7>lX?Ff^{7T~=Hr6md@eI7vdinW2Uwx5#BA>fG zakP^5ICrdRy>yJehO)zRih@OLkzrHopxsPmoJ{uRMPgHr=hmI8IvO2i?_J#vZZ}T^ z<770ufzU>#)=L}wg(IL=|8Hm8-*&5P;~gFf#zZ6rCA#%xMKPx4$flV19-ilA;BKWN z4-NG(KIQGL?f-a9^<}2O{;*vH`DZ+HHaw}?C9-b-6It%fEgN^|u`^ZU*dQp?Dy|B_x9~G z^~T1=LUJu-0LpmAChZ?AD{o9>USX7I=;yrco(Sd1H47?>>BRnVKL!Q)(@fz@TT%^; znqQ;b9qnZQqP2hS{PH@&ZLx_tP`s$84VUSy|!5yWeLnhy#4Evt%JnFrBR6;)VW1AT? zw1(EY#LFG`JK^KkXc!ppQuP7BUuzxxCTjVi`Xbo}&Zb@4y5|YX675$!*<@ zPHU9(ifIu~oBH3tQcDDP4oTc#7gRaYv~Dha&y@hbQlT?IjJ(6|`w^BQdU7_k5F@uaw(Y#An{+rVJC(bp+cng^#* z{}9o6KM!2Hy%J9(z1S#E*Wwq53q!{nILrzRG&UqfkNOAw6(JIVr)gZ`iU7DnmHz*v z7g)8ja^8DD?O!bUreCAtr^0J;@TDn9@!@`r$kh5U?wn10=fh}@8ZC0zBU)M`-7Xnj zVlM0l)OWylY!sTM1w3X6BA_#%FcSow;-#XJQU993BY424WiI@=vm>U|XL^0jLvct5rBeozL%ce_O1YuX3`T6S3xRmS{ zr?vT)bVF(tPe*LtG*uT%eSG99cXUXsZnYFGS;kSQrBw*6+ej>xEL&fn=Ld4RmrLHSMrFPNsVsdsftt(^ACEIxE8&5CPXVuKO!9Yx%e>hseMHdn*D)O(l=K_}Q6H&C(ADE>QCSTn+YGz9G0zq6e+ zTUd5FYkl?@kqkUqds;~2HYz3UoLDrgzn*wHqn?N;(LUZK>?y$rYwcrfV%txOzpXptW#dLOdj;mhIwVp1|mb#-+=_kf+8ydL>OaoyZR7g1Xunrgt z2ObGtK-Vtg$`AX%N2Y8lpHt2lXc|2513MH`zgVx)6EMFNXS!M6!=GvNA!5^g(w;@f zqEfaUFL|m-X+QtYq@%1U`(iv*wch!~DJrtz++};h?yv>9fCJj6vjYhOWh(hkrGfqO z1_A=!{(H+ZM&ouwGcY$XDC_+3=DVf#&_@CS$bR28gY(v02nep+cIHq%ov{)?zT|Xk zW%k8a?ViltB^Lfdb?=5#jqMNv4Xw>!+LdWb=Vby5*NeSaXZ)C>BtF|f*addh8{D*~ zPpco;b~f6`b~ISWW7^Ht-woa{SU3;Y%})v(kguMsRlR!%zbJWd6D(N<=%)|9dV4EB z)HMht3#x5(m~etL9NWVE;MJ)Pj!)lARas?dSIC5fCJ=aHkqM&JJQG%X#gGWj?V_V( zQB1KI0^=IRa5b4@$J)M3$Ub~bO+-iT;hT}D3Kh}ABF zDownixW=$! zhiQLb_=r5y{?QWFlt7Ir^EgWaYx#JyMC(VEc=U4&F7+P|+Jgl2ezuv^pkT&7dh`g% zL(BoaHP@fx#C2FBUWyI0+x`F?i0J2f8hK!@0?G;V?pbd?!?1T_fEFiy3*$#w8~y1-`%Sw*Y5A#BBm7c$f{g}UtnwrI;$g_ zDJik-nQkSW)?c_;WkQ;+#hM2ORPeO)8=O%Xl+yg+{`$N7`&t_>+zPcyk`_<*h9$)b zLrmq@Xt}vD0`B3+ZqL*W<{SBJo;5Yw9Oh@D3j#9|RdPItjxe_#XO%vCZMyW-^XwcZ z8JXrY_}Nivky}f~@%(Fbc}pb|{@&$TXynq(NfRpZek)@bnULiBZswM`Ic&9cQyZH= zJ4s<8>Sq>3T4kLyU~rW{#E~gk@!`-1m689@K0>(u zN?PCx|89>7CT@v z8H<}Sz(QB~@)N=VJW+ll$G8LBhA)DdWP6r;}QKs1yqz(kYC0^Vr z2nrfhPHmeZR9LK~1KsoEm`=e@{1bzCWjI96RVM=<*ck}F?R5%f)>a!aHL?wb%qbJ> z#Vc%b1Zqd_cq|O$)^!!wzj0(y{yxA+bp6ed(obn8dxQ*jNX&O7iVVfEH)+d~;_Np- z^9!>Hi0{8{Pgw25qh8W^TJY`B{#O=F>4I$Arq7}A*-{b{+N89bANiqMq9~!RM~1KL zOKdZ_DQ|tazm25fcr+XhGeW_kvW_imVWP(7tp_@tTqg@ozxB&Tb(V1eG_?j}Y1Ply%xmI>zWDyh zDrQ?3pCL>&P-bWlzI3)+$SO^c^T0Dz#0!e2Gh6GS`y>9yb$bFWm0U2Snb}T+sdTDt zmSntiUPG_z`X#6C>@NV32NsGvtuo`7Th-ADkQDTyGAKAWd;JC_F#Z0ck4QuuURi2E+&|qlq|?yd>Oo@DGFTeR zjE+MoD$$ox|AkFYCG}HuKva~<%(t6#hw7rJXe&8w5R1dY2oZrwJR2FDro?FHDg#2g zDe@B-qeS<+eh0)`)QadT>v6dPlf(cU@-YBM$=CFcfH&}(Pw2ptq@`CT2=|fUC|hQd z$DXagbb(9(J3Klv34(rHDjBQ}vJnvZ<6j;}(I7uG5DVd7%p@7&7gD73AHjfqPX4rW z5G=<)$#AmJGba|eTq{`?T*G0~8*8sBUTYUuHc8;`%Mk^6Us^a~j~O%Lfq#EDwwtup zHYsmKaoSVeaoY2Q{a#Fc2Ya8*oYNB|sA%VzRI-tsCNb@`gXYghkF9{oyCy{Yu2e9z z@qWrStdqNp>LoNbn_$|5$vqkRgfG9y#}u|uvh~c?xjY@;a=mgk)+6G$S*Ap*caTSC z%F|{iAT6D2pCIXddxZce|Dapo_`{0qmwSu8Am8QwnG<{*z(SvpCwF-4`(fH`JIg4* zv+yyEUR~(iJXV{>iOIm=5C0c2d9AE9B-m6>?~UL6wtK+A)8=94=t~Y7E!BQ1q;rwE zx>i5$8MOZ1k`uL55XW-;rZFvTXdHlmxN29MY3e?w{0sgkPujZU8>!H9G$Noum_%=# zug^V(UXGNglMQ(kyQb2o6L^YvZKIF`JC8&s6VUP6Pl~2xe~PB@Z71~nQMo3$`6$Rd zdKiq*prL?$rrrjft;BrJQEF`TzbHug?7~MM^>=lxXP=tVV89*`E~dcrX@a!Pu3gm8 z8u)Cc{5K3VWL~}`E}gFpNN2b&WjFk}9Xe#X-7^_#F`kQ}6nd4+FJUp7HE5nG;C)B{ zrfLl~+III_t*sR}ajslIyVAwd>rq@g ziWd#oDDSV2*&u8WU;|fb*(uD40lrZTK2=uC6-kZ)aKJI{z#-3Qr!uTf2lWa$2x=wE zK{Y>~uh;nbSjG79A0wT7*ZiXFLg3JiGXxkr3xli4$=45#q0F5flCO?t`{9PRCwp$O$!j=9 z@Jl?oI$!k^BS<~-wpZHscLu18mPgY^!Ty=(Gu1srp)eONo5efrI)R0a)vEWnnuKTeWrjy zCOnMLs*TX|MP6yIZna7K*C0;b-W;?RdW95>H7pj@X8L2HWPe;I7?u}iUbQ}#g&~!| z)9RMtynarPp9(#xJox)wP~!+FUsm|T5<$a*4qir`5lWyg|DIA8D#~=oO^B3|+dIvS zRNfIz+HAUWM|B4$jFR`s3t0|Ambkmxbc-8wK~PG{aW2CJm15m*_uJ(OS|4(mJ>966ABs0lIHe~d11vtco5GUewhZ9rG8OiFp%W5IRO5{vqzK-^ps#5fs{OU^16vHYw z3yA7HGoc(qh3OVsweK=E!9xy5tJBeVxhMvuRQw2?YWMRVOun%*Lbnn){|>bPBXX6s zCjOGNm^-uyD|jQ$aWNW|8NwQTL{`I6>fzGlES@;j?s#~ree@>huw0&j;n}li3oE}5 zb{~#w6hyZ#sFZLcA!<_mjqV3Yy|Y^63`*oVCXDp`<6>HPo| zWN~+bwQqv}3L=cWePM_Oo{`8P&F@#;s2a>I+KoPaOCaoR`y!?Y3!WeLI@!sW(M|^%kt+v8j zqc5gmKTmGk*jCLc`MG9=NEfuM4?!y_6g}JOM5?`f1KDHgT+-+ zIx%D^=m)!>$wF+ubM5iiTyVdfA`FXDti5Y^~5VMwQQD^;n9O#OuGa zpdRu9v7E9R;+)=Y>5``=JIGQ4Tmuk2nDhN3{2ud1w@J!B=%0!FgKMCz2O~~_jUV2R z2RYjLXp};5rGF-N$}6w0fKr}-{Uv5v+IZY1n2KaP6^s7m>(8?L=jMtdN=7tK&-b$NGg0&-|nye zH2g87`LfBVA{x>(7cbzkQT*s|h>+u-(=TbxgHv@T*|@6&ZFL7kTqeKB+qsI}_p-X| zEk6jlSY?_7^KJO9e6ND@b2(4EOcAISgPyN*;e#DK*@2q>`V3mD`gLDI@ucKFH+e`sBIgHfZLH8jY+oZ4+c8Wo&wV%!|QzF$Ahf8%eWA7C9H5-UaGvjxk<|wf4)K#1pV;Fi2D{Pp@Vu)<*P@;_rTtM z2cmCQ;C+(ELUf3<1q%;sd#Q{`EX1~_264SQ!3;YZKv5}#55cu?l>%|y7R};3af8{M zsM1bHSG)UBuavXXy7<}+$9Nn(obm7{UpytM+@FNLc{P*4?p#DMrWpY5UaL{epzb)y zlSwhUZ;_P`JQKBbjVBD`GdUhg6jp=hS8l%r$FS4hZ#OB6PoDEeO$I^n?4|G??#r;& z_WIBKD!1Q{FV!9Lk*{}DbZulNA9!8JS$KkDr{C6>vy8WXBKe{_jv*cQHwrEH5*w+@ z*&VDYzeqC4<|;@fAt^ydELRP4*tlro1aA_{DUteTB^S_f+5$Tb#BYp*b9sM$&yo(uiSbZE zTq*eXTS+_wMmgsj^d{bDfTs&x#D^mG{E^?+XHdt0n78aAB0j{VjW?o%{9-wsYL~CT ziC4u|Uw8ECUNg-rM{7zDVBkj>ev}l56{@j(U6kLAf+72ur($N~p#SN6Ji9WW)@gyU zdN@AM%OPI^CkTFKoBlZpcR1SMrAq;0%`^Sxp-dQxbh~O>JZkHNY$?H-j$IPZzb9V4 zh}>GtW)N^)VlADm4ftv*m(^dRA4JWJ>-4LvdE`en=kNG=BcqQ*^T+Ff;mK~9nxXH0 z9x(?&hbZ6!A7es7p%;8?Ba2rj3tU>obNMS|#KeXZ>jt|%^V_(BPiYdo1IHzwPZmnk zvg#Z&m??%{eUlIA22l9*WhAATIrQ9B(OrU0_TNvAQ{QtiGt1!_v1xPOWf`}T zbXmkbmIlplMDs4e5lLYMF*5Xwhp%l$k=1kiJ8MLQn6Qn`&pj<3&D6=D|L|YO<}da(OdP$o)xpiHCs#mgeQbf>iyxDNL&a_Ug=Y#34VL z6~ci58;QrjxlO8A&nadLsN!vqJ*~h}aaixO;lyMqFPtV?aiM$%Skb3p1 z@>EEfD3RB9l$_IdE?sl{?aaY-&xO+rTq5QK)nn_&n$Z4@X(6BDF~`NqQ9s|QB;XOgWclH|>2y`BeT zC%&y`tCt-x%F`>Rt838_03Ch~c3&-FIXl?ko{%nZ{TnG*{ADG|zMPeMB^~W$4zNhF zR;ErjieY?W@-O9)!TcVVSzop=zJ#^Q;hn)T$7~Pnl4;nxy2{du10z_@&)$1qJQQ5Q z$xQL|+^FC0y+P0EMq-xbh-olG+rxR5O1U+-)Ct|F|9}pgyBEB)+RDI5U>{rag^jxH zS^b8fs#*{2b)J9N_mdw^>!Cq?9NS`n2VIuy!ah%a^5%b7f6rKz4avTqjjeW;KJ(5h zsnmIvlokOMRldek(!=YD>r_L78K(;NZC>G*lC3e4)0Z?M-)#*fGL;|am|w#|enhd- zYk)iKHU3ON;YmGqa`1jt64O!6E_}7(#?X-9+e@$OfroPECpG3oDwnbG??N{}rd``q68;r!LIdB-m4n=P_8ZDv= z+bqHVX?)96{b3|5*zPbLo@ZH^(lxR`M8tI0tEN0SlK5Y%fI=o&IDFmZ`!cqmUQ7*0N#5d;(A%o%CliGDhXNP%y7r$+0p?*p}T&P$Ou*Xgow6 zqM&d;f>JD?u1WD-&3g{6%yEQ_qdroX&LO0MSW1Pnx-Vp&x+ zX5W#A%B_!9I{M@^rrJsn5R@92&vF>;p1=Y*;RaQ>3ZJNiZL)BU6u&o!X=RqE^TaZ0 zJ)<|7X*1wj>huK|vfkOb#dcAk+IJXxaZdA|S<8<)nWMsl8V3|JC5pU}6GA&bOro;( z&*|@sdrnDSGM=m0QenU}?!UU8!t%@Xo>U9Dn^5R&?1ce)K-=n!0C*sK%VEXL^gGIx zfT;4e3by8ARRQ17IxE-~m8lRe?$TWD%>Y%G$OyF3Y+SDyFNIlYR#@uk0+S60M? zMf_nCPxC#RQ_VLIiMR$uN7f}5j^>i0gD4nK(POB^J zJnQ*Jym@LWYDeM4!O6qNBVF|IO0~|zC#L}{h56+D9-E=NK|kZ4-NaRl*oxG?#<#u~ zAsf)BKlt)};gTIV8zX*pYH4wlZ1>^Y;_rQ!hWaf~rem;6buPb2*di-N^2(l?WLq+Jsc?UT!y`9Ug1$ zn@%>$o3{)#X4HFI;S8y-SG`tq6Rz9&@V5P@N%J9_+*WTx+2)1QyJ$YURi*~dJz`Y8%iNS2DuKIN zL7^;5TuhI6o^Z9FYMPJo<;l_P!B6{Evr@x}*=HIqebS76OkjWE(53KUD8s)>Z>|6B zqdJy}ULUTPQ5bD^u|e0X+N9^ZE-l+$@1A=2+|l5k>)4mySLN2)A!NoVe-{B^O`x{# zdMGEiPDhcqxrLGQd;M*I)IhPcQ2U~yvH?|xBUEs(5r%&cdp#!i>PLrJzdn7NBjG^4 z1VuZY_4lmNe9Z$)Z|x#MS4>FJGQ-TCVr0aZ9&`UX$@`iGlG=yAM>QQQ)IOv{kPBg@ z$NR3&Ri(OnNQN=iJXj4}C@`&s2%hu&7#rCJ&EyDJ1CCk2M zZC6ux?H!yNp*>KbSGZOb@bpQ~AFy6aySs#fI|#a6bcH?6_3%C@rV9(IX2z4BfCEUD z+X|cI5*d}ao>+y17cJ?6ydZJV*hxVv41Cc$EouUNvCq&qB}t`K47D+xB8j}Z6&O1FEp zG1-+Fa~F6crPBF3HFRVP1DPm=HMZ}>sl;k88_5@27Of|$O}lIpAs^NjN0X!2jSK|% zWEL@U7Eex}VzWVm-(5Az1j)DUZ&QnVKDvwVD}BYT4GWD9)JHb-HZU2Li7 z_-?GpXxTzDB;mxw>G|Tzl7}L=BzO^ZQb~^l25^ExAk8d03|YP6mD?hBc#}Jc&I+cU zhr$v+q&e&{qY25I1d8l;6wT)05)!9uO>%_1GVZfP(278LDr zas1TY1n!3b<+ayiO$RQQ`Xh(Y-1TCz#|&eM6=X#=k+6R|P;Y9|lU74clbM-gxjw2ZkUkkl{ zaBbXI@BCWr9mi~UZodxWOhaLY>A^ch&7@enM)Pc%y~dLLKE;eI$-#R1l91=s#XRk0 zxii~_ulC)lAZm8I%l%sK$>@A2+n6Rh`x;K<@AV@ZyfnnVc;kvlcE0@z7(|qhKfTE% zqO)*y-UOW&fFP1b5JdZC_TUa{Cxg0(wwLcyLEyrAAAs*vG)$6#Jvqkkw=VJm;wZgd z)!$2T<=Md=)pf4kjEC5?fIxZzJl#R`@&}efD;Dz76}}=(4gz)v#;p0x=M;k(pXZKK z8^WfaA2mdOC=DH3tUO>36MOuS>sK#@^191Kn}-c44}OWvq10As#QP5s--|!ZKeE5W za{tmPV#sX9z%dBg>$e^h;8(0ZQ%~OM{r|D{)=^b%UEBBpk?!s;X_0Q}Mv(3h1QC#w z4oPW5T0l}#K)O4mLmH7%x;un#-CNJ|KJPca-+#Yx_Bg}sz4vzSwdR`hn%BJMykk-+ z40`Z9^^lo{HlrF*YD*=F>$Iy9=xXxhGHNS|?gV&n?aeTPZIkgc6tbpc42U|53Q9FL zT9u|N+zzB&?tI|;r^*5V!6LI^`Sc5Ou7pZ>|5}aJsB{zHj>Rc-%RcxGmjO>zPxY!N z;Iv}T`YE3Yp2OV;xK{?zQiELv*7-fMF0vcC1Re?sBc2@*gi|1?Uma_Iki`3Ho=5E~ zS!)kPPyJw!^)_Y=2XVl(q<`LAza~O#bJxGK033pb#Ro$&9`BgX`F+mp9%fj@Az%8$ z0w3CAG}ifVbhR8(Btmc?s6bTziNPUa5z<`i#%9Dk?~r;nTF!X7VPXvvV4Kgx>IHVBov z;n+c{okXY%F9o7w9~VrWVRp~57y6PP;UMDtAMQrz5+BII`}v*@1pxE1_6KH3>OaT< z%=HTaoQn8Uqn|r(rc`WMw;zeQoQxB3p5~3R8W{PKv%ySJB;e%L@w*(w=uxFauhWzJ z_L)up+!2W#oFBFSu1vCYdLzks*>h=<=67!!_iUrqJD;}hT}QDt-4*KcbT9lS2w^xY zQ734P=@KBCYU|hMVo5!{;b~km7RL^I< zd4;eo;u=JIg6jD*W;r|hg_80HLwfsMBt-#BzQDWRUhVh9seTlxD(ybjM{X9ItaVvB zI`+*CD_}#z4`|6c{8U6OB!s#cvq!^5kL^*4+9`SCT_+>k)QzUj$Ss0?i8=#>N>`n< z{g*lONpY-dVtL97@EYD{bL$TxgX-9lUXd%s3{8zAs1)nAv&7Iy?uqmii+;kvql~jM z(mQ>DLU$e1n{Jg}PV-;*1Q(tqAn8S!O_q-75?LgrFbd$`%;HAi`Lr)5pQZBHgq1bA zX=WZ%JL7?xvhxTPRPyb+g7)Uhc@R4K^r}$s#*GR3Bcr*5iglOkv2+mlp@jBx#E=UY z6ha0;9lC5#Jd_*`=8m8+4ZQeKaCP|T-wg1hQ7$ncV;~5SNFPgSZ;Y$y6lA>Tx7*!* zX^S6P&_SR`lW7EmQ=6gJdpfxIo?qQwj~GS{cr9@4Eg_N{G~Z7OW}VSpj!hU?P`2uw z7Xz;t^cyznZpdo==)Ee`XOdg4zj3PFWaHq(SGgM7#{*{&kh^jCcI9fR$egy4WpFXto`o~`(NB)cruv^@T;$G06 z{I3fl&>0bR+v4tj|3z(djP<$dcik)+Tx^>}$?(Y7_qHAt{cSp9lf@xzZAPW7y5x{-O^Nxu&(E3PXeyUe;Z2rcP%&To$2 z$BrryE}R{U7&?mvbo^9W-W>7@&q)e+`_R|+lD%bT3XwhZRK1poqW708v44Z;e9k3S zGxLc?{8vw;@$P{_S-519ZJL7xc7%)r`KLr>SZ~KBx20%B{>TcTpId|g=^Dhq7X%zd zyK&P$wCuIX$;9r>^14l#16>FnN8UH%VO2Ysb~e$#N2FQ|Wk5SX%?p-E5rcP%27Cq! zR8FQTezgjzH07yjfKf6?2iw2^g%Eg>7foghVL}N>=uKg$6R?+^LK3jk!>61Z+uKa+ zCr5`qQT;!a@_jY`2tmQSzf#8<+Z%t`4hk}Et=_{>x|Y1KKje`Pky}b?pinPTb@hJa z@D8{12Oeh$r2ysQl^^Ygp&!iNP4Cc|B^Z)ld8M_4;hsv}+#BBzN&ga?Phk0hFfos3$99{nkq3mio=evtm1QiHpo5WYm=n|$PR->7M%kxvm3)1lNG zTmNE%KhawY<_9w0j}EAL_m*j7xioxyCF+7t#9`b43byJEnhGw~`v|PXH=E-`WJAR8 z?ODrV(QiX4;(U7$+KgdxIy9WH$neKA^T=z%mdRE*;kYZdbfSwn6X?uj!1MQM!nWaQ zyIDDG4_aVJjaDJ)z+ugsdPy4OTLJCit%gFB3U^7J5IF6L`XJ zZvJA(QIy}PHtXV95Ozih?(P`!9eCd1ae{uc>MJ8S&Cl0`HzM3;GDtY$a2JSM-P*?Q z%w)E^^cEQlqjL%4crwt{U@J0yy9SMj3olZ*j?xnmg%eu=_-(R=6(@wo{JX5G2f@aP zZubvIJg@{Jh%ubgKFTK?As-xeK3cvw4StGOm3a}U;dXkyDjv>s;rfrS-7QAskg|Gl zFIp$XCGYHxgfQoz(ONs>wAuoE+F0roh+X2r8Bj&h$0vuZ0nh0F&0t-c@T$UUz2k$ zq}&0DG63y z(0bUiYCwXYhW^?6rD;>DU1O|FPVOGpEjgpCc@up{f7bp1!;<$oc?RNTUX}irfmRIE z_SsSnX5D-Q#p%NQZ^yUi4>@)Pb4ylU@@8|=E{3djWzH|Vo{JNwq<%E7ykb_*;l^a2 z^$#nrwH7x+7QxJraCwFga-X8T>lExa?AyG!yh1fW6UqCNn^ctY0W&EoUZy&QY~jM1 z;YsX7?=rsM)MDEOXKSxdh07}u9yFZ)L*zyo^do+qtFk}Te3E4)Vk)Y8Yhq?g=bY-A znKH%Ma$jAf-cbj+t3OL}RY-s)$oec{AWQc&yn>*6KTU1~748H7me0iF^u)Qqj{M8f zN*8v4O!purPN}E!$~C3Wt+JU6n@~H3$BE5inhsx_KajqUX!`-lsF^4F1H~Ww3;E-J z;1b%Ds;8?)S(ychRZ?q$(~Znr_NVmf-1SyYQk-XM?2??sPI?1KB!Z3dk-)aeV->xO z2R^A0cPTq)N9dTGAGje;n8y5s6loq-r?7(n6W<`b1>_G|fKHmXc#ysqhz>qtK%!|f ztAK~lzs&%XX;qCX@&7B*;_FlVAV~Pfz}RV*D6SA~9n!yLhiMS@KUg;ssIsQ;U1&hi zmO=Ye;zamBB}-?E>C69(B?}$cFkXyLvSLtw0r#%>Yptb>A939a&x+H}vpwiSf!gLj zp)CW_3zkGkm{%s3CB7KV{te&=SV#M-^h%J$~WV z{>%&`0xkE-kROUO`u)MebiFX7R!Yo6VyH< z!MPe}h5)`8D5B`dAz6hmZZ4|1?fOUHe%T&$UVtvhK*x66mi%QB^n*cP0q6zbLW>Ll zhEfbk`~JW8|LUTU2uPps0P?xxO!*J%0R;1`j=yxF#RQ)hB;l`nQgbqg!~T}h(#%lU z1r>>~B*gWQ)>_z?>u7FGP4Avw0Z*{;*G%PmqDJ3X9Z*7Xe}$nUhwSe?MFveKH;6n> z#@!6DHi)-u|JAdCuRZs;t#_RPs=o@?2(E%MtH8D|+^QdGAw~Pc@EGKhzl|8S_XQHWOsBiuFWZ@G@ zB;s)smUZ*5mum*Oi{NbGz^A$#hrf+}?4pT(g8q)v z)Pv|4)9i6O7xz#wxsc%ahlZCX_M2mFsYq$kfsh)3Nj1^s(5XoMAFCcuWRcfs0ZbxQ z9o?*|Vf|Tpzgha`KlX=y{TJl~uqiEF9urwlXOVGah)3T;`o8qb4ISJ9sQ=6A(9XSh z+Cr$wBE<1$(fV_=<_r-pIEup>I?-m`X;2=sy%Rp<75y6{>_@r`u_(H`m68s(CT-ud z=)qIW3AZcOc{vUUf%DWaBEd6LQ5u&Q2MW!sorIu!X{gQ{hyUXGYA20U>Qj z=A@mX5FH50p=99oc^H*##K3mGpu&kg9b$R()e$UZ30 zfBEN)=P_I?w75zwB+-D_$}7#p{2ZE*72rg^v>RbGLA3n!R5;9=46}IU%=+8D?R(oN ztYf~NQXS=f?W7B@go8nd80F`duC7rT^Oon_*!rotMPbs2L5URY^DU%M#`whGuvnJ@ zwa#HaB0|{ckdGcAucah}P}~=()38S|J$b{LZAS>9+g3ARwcwVjIz9y#_!Z9@m^u{h zJ&SettNm$rpM$2UdiQRMfX_f{N4Y3yj~fF48VD>7AtQ*MNwtY{9&m7zj>V~uj#xx4 zxFvECh!@Tpx14leq9rY_&A^wLTw82@(XyVa!a3U$4uj{LqHQKXC9G0EBD}3Yf9gw8 z=7PuG67ie+R40;xy+sPKMd1lxJvc_}pTNVjwGAgXx${V1#QjnVS{e$34! z`{BuECBkNMN=o|zU~D~EHlDY6VF`SVLyr4Ab;(-t76vl^JNQ5+&&k`Y5sVy znjLiVb6^VmgfCRkw)Xi337P|&-;o9x*bdJ;IV%)oATZF3Qt9*O0yqp4FP%$(Eu_L4 zZWK_OPr8K8$c-0U_7^x8C6Ia%Q;Ef|!7&1lK3Rl4M0bm6@ucx*UABz1po_!GUAS6rI$u>9_L#dgCmDdQb z&t>1-Pfq@fkXW`DmWrt*L$&`3sIw4HHV^fFt8bj@UFfDDa8rPkZ~S$C9W#y3U#QHYfy#+m81Q_o!b5z$K$H->2-$-}$IDFE1%UVdZa!eXAyq@g(3 z_8PqzOTuT(Y|7#e{Pv>4RkpJRPSlH7wti2fombp6&YW0vv=_VS$bI;}0$3pGx@Enwlct-w4N${$po%(QjH!L7Xb_d-HQD)lA3UToel~`x{OwE7o-kvhY@Q zp=vd*n73c)u<`KjogeEQSeCwU-}@QGq}Gf--J-LyNF!s|9WlGQ`1=l<3JFMWcn3c?6{e%zVP~ZH5uV&*D1n)xXq6Ql=kuktXx+LdKM``v_~^8LjRF*O=r1TE0p*Tm}3<%M$gIHGOQV zP>?n!`_;w9gTd?F=j7s>(H}pWRyoXTy!CF2b=0kJ*9Ij$3#MW7{ad<%V@p>a+am&} z6k;Z?Du77H2+-b1B!Wyr=Sr21h#{BLqy~t2Vt*q;sQZj=5C^2;&zJx}vivmrOBaNW zai|iosgk_==Yn^BYPwaL1xQFn5um8A(m$qz+6GGu=huHl`--OXJoG(-wKmbmsvx_g zGL_xy7~6KPooC`So!B5@o-XHWdG#_9qw^DsN>PyUcBl#tZ8#D|Z-HWY}F_^=ohILUst0;woL9R@Bdd`>tO6lvUYbK}C>% z=y^1C>$Le{Ic9&j0J$8N#OEd}sAl*3Sew-{w?H|(BV4zU}8RRF@ z(od}4;B28fI^ukKf%2)H^d*sn}i9iB?1Pet?i%EbfML*!+TtO z+!~EOyFY60;jH}FcB5!`jM{}s?h=?b|Bx+NT*>BSAL;$)wa}f z(d3F^el{5r`Y^PY<()J=G4T|U?vu842sQ)xo>7d6;_-9y@r2K>GasY8iT8Vo&#I3A zfHsQraT7|S*-9_M=O0b?Hv6^OdPv#R`2ExEO3>2QPYndt+;A=Ax{oLy`69~3Tu^3A z+cOw!FnGmB`-jG4^pKoK6g-`Wvm;Mq+@_Ssn(lS(#>egJM*uWxGe%4#zoAs%jNfz3 zw}WaVR7OS=K_N12gWu#I%lkf9?cI*a6rXIC+q(q!?~yY`YNuIVVL(J&`W*n|L!t$I zi&XA@PmIu)V#7K0Jhn zx7R8Yl4V-M9M<2f+(29t41RzD++dk9CB!lT1u98^R;_9~KhHtsTm=4S)MH^R*)YF< zLL5vmGw&#U=uh;Ic9Gq`UlM5<@JohfhO+$r4ivoxy?6QKF|&<-G^&eMkO1< zvI@mBC1OQYFR97v&X#Xy2Nd;zu;@wsrH<|bU5#ix@lzc()F^Z;oudeEbvU0yRia|4 zfSlr*r8lqkP_cX>aCwVAeh;D%sPSaIZC-kt<;VWGN>}9Ss2z_O%`DjiuGro2S$_Nu z#|iiUi+4`3LB)%l{6jr6CihDJP0i&o0zS#vQ{T8gd7~9oa{SS>`3uS~hWE@eMt+}v zAQL6syYOv$eewDA2z@Zrz#-W?EIL+VLkDH*$hB_!v!NiHJ>Rq{SXT#H=o49!*Eml_X2R25K2HjSF*L z_T7EuJ?K4rE9Ch#{7C;0d!@Yj8mn`VjXwnQmP79x9<_OK1SbYy9PEoH8w^CFz2Dc& zuYfY=X-{t(^>dLdqRYHUsxlxygW1G+%*=JDAr~vr=D}^-b?3F3T**INdxB+H##D}F zNQ>flceg-^FSIiB*wF;Ndjv~d{N|>KsqI>BiP$DCJzw|}^6{iFiwOK+rQ{x-|; zg$X|wVf@3L1Zd(NVEP1B*Q(|>v=pr@|0HuX-{s@k`hkIQ?bauK3ST6LIo=ZJdtQX(9GI`HRhl-nuE=S6_~+tVBb$>qBpULDL;ZcXCK zo=s6P9)EzrDt`nG8S0G+svCO|Sr_XYB)Ntj#6F#N!hE-iVZ#SDH=7gB>)ba{g{mCx zah4HT&x=i^C{2b)4I$3dThO5rv4rLHs+!-vVL&FdFa6!89(MFMydOUoTjO*l`OZ_~|GUQWzLxqcPPgm7U2OT661~59NW?gO z9-7aXE-zSOCix&OZFwRbuit{3Gfl06USa{CqmM%QJXq9dd>4$&$dH1?EQx7ry7X;L z^iXW_=yoeojN{FkUL=Je^0dQ3dw+Er9%y8`G4i95-do6j^^k8U}xEWxH*!x&w9vDjz?~m_ELbfTziFYf$_zW|y z8%j1MED+WnY1IQU7wL8~1uPLKq=!Z!ywVV)2S^{C0jk0Gsv60rXq)uChMnmw#^_rNJ--Ctd~{U8uyXf z^}_$U^QDEC3}!7V$0Zt0_E4Nbj??i@n$&!K@HTwBSq{~E zO$y6CCBE%nx$woma$(Xis2s<{a1tIJ9n$>$&SWVz+ZdOVtvfKW_ z)And&^*xca@~tJK;q5Kjl=dZ_Lzo~6E;6!rU|?u;jx7_DVWZ`4~Xv1u2E;p#xfY@h`k^*K{3 zV$p9Nu`?~{dj7E($>1p(PbE7Nzna4ZLX(WCJpH0<7qtktesOQ?+)_~zkKAvk%Pb-a zg6$R8ak}<=NxF`Tm7T{QuJ#!-F0R`uUV=@wxuEYZuUMlEBfhZ zeJFHsbFS-1Ojd8paDsl4;QccRJHC{hOBE-|=aB<0yw45S{Gl*taFpu(+WBg`%fpZm z(;O(-C1ve>A_8UBo;CyIR_~i1wA4J3I02#_ zBt@VW=s^q$%VSy8J8V%nXMJR4Zkdvrrmx;$$e`lr_Exv9G)&V8%p?Xi2NQU|xpDl} zZkKm6XW#jxOt&6kJD;!O`xXhag%R;11HT-ehwj(hh8|a(!!gNebBqa|HLIQyywH|Fpzb?^s?uy~uO%V5~Wav7D*$Fc86( zi6Cs>N{AS(@!{vOox{$N!-z^6i64}Mlo9;TBa;!tLP6G*DYZZ0TF<;Z5vdE4M{0oa zK@qqbxMTxRrAfjHQVLk5J%o~zk3+yv#(&M4y#zUHN))K#S=EqOG=V2`K$bD0sUz6< z(RE@D1Pk?zyj>l%RhS4iketI)3DYH`(tH-#K4e5s;Qn9dF8UA{F zcr|DdPxV`SP?B=nn+l~F6g4YAKK21m)zp#SD9eBE;cHsOsiN?LFnM{o3Ziq$E_T|T zhtApCgAY4WimjSX<|X?WR*4&2QI3e%OV;c%MX)lE)CvYR-`1XDIc3D$oCSZgA#tTP zYEWFO4oSy$Pr$ui3u|~sW@~CqPuYy#{(Jp#znaswrAvLoPd4?O+~Ad!pMDGX9uwI! zkc{6NBym0Kb&9lG!1>`fD`|8Vg6->i|2EnG$%95e;QE@8iCR>zMb z^|?P`Sij`4i^!tIR#t~I;Isfru0VLPzwporR~`fWQA3LT(iKp0mnFKOfd~j%VRIJV z;o%KHCL&=4^{HE>3-+jh9gBi?tVhpG8QQS~Xvd~fETFQ_oFc3Wf$RAb+kp$rhx$vq z&hqaP*kAU<#yzi#a>#py1Aq8vm7Bt&f`Ot|XJ~874_>Gi>~+m|KO4l98|I8q1$f zwcg8FsDIKJfycIsR&@MmMMCIx0)EG5#Y@yrg>|eI74p4hjUzvnPS{NlLZlhB*`y}y z*j1J^bN(5OJjMQ7U?YBbo;l|${N>)j2xZWGn+bYH;-tvy?O=!yK*Q}g1 zBhMo&HxuDdxmz*j7ri zW9c*Qn*vAc{ek(GMW!!vFfSa}6}!i5?P{|wjyrIgP*Efw(r|6-6q6jKr54U#ehUal z=Y8o}d!zaA*PnzDwte~3|5ffp`pGWu^w0muc{aH@uwu4Bsf&`3@E7yb26|;><)Ecv z-G-BH*+)>9DM@E~^E(MySit}4tS)(VWVsD?do~6VVLlV@AO}q^5^l7>LflgAq7y(U zXoe(Ii$SwuunPbH&f3%nLgR~6U|NX3Lk^_Ln_Zw02XS%b?9X!khlFEO{!7Ar?VuZM zl8T2fYq+n}vG|R)6Y+3{AODkmb60#)773x$LNvySi+WiT1G!={9Sb#aOQRaiO~va4 zS_MjnW=~Y{U89%=nE^Ay_-JMeEdh0%5Q>cF53lyCnXRn?j`-Z_I1F2jn>?c4sx*F7 zE6sOjN6Ue12j;V*o|r|0%ozRNjT!?Coum<8=AXMp&Z;_A&IafLQpW zHlMX$m=iIz!*=)SW8&h$ogWbiR%@Hbs^oE_obG1*D~3vp&{_CLimqc!3%SA`c`R|^ zh&bh=TO4Ym;gR5ZCR^lj8>4o105ay^3)JfjN?|XUicH% z2U*j%`+n+I1%eLrECg)f1V)Ig>w&eLodNSnhf<<)krzd!<)8ksYOw1pat>Jwe=en1G)?8@d4k&pcW1vZuIW#W! zW?76CS{OuH~e3wo09{eK=Do%z(lw8%o1t+PuIbOt*$ z{@yqLYm?Byaz#y)#3)`v^WmX5t(Jom@EITqpot^ho*R_LQeiR3(R}wU>*taWvY9?q_3-Wm?Z4ntC$GJ-GYY!D zd;I{OON-3@b(wjaiBgcYEpib7M+T62e+n|L?d1%P%Lo{+nm584+cPh@^kgPYEGgL9 zi}#u!{b@Ru-2*Du|1K<8UTb04+WH;s+y@iopj>vw8QJls@wLSJS9Py}GIuERt*FNl zI)(6g*M_>(G8OheY9nO24elI5u9t`mN{MZeHt|&yG^rRh~Uptn}vcalp4`oKQ=f2XOW(9e~SSzUSukA15VL3ee2@tZoYar$do zOC620$!4<_r%m+L&m$>LA=KMmQEZoG?bO$sL^raIGpT;&SnwT^uU0}$91n&GZrq+B zEg-5$p$x!piRGmwt@altkLEs_(yheaDAigSpH=0)A^gsxud zg-x2=`O7k}7Eg$~ezZ+Q3l4pK`@ej+{}dkNGQ2?J6c`LLnyV)aLOc4|S&jSIj^GD! zgOzDL=dosk=jgv3KTbV*=Kqxr=v2P0c4+_)Kp#sEO@JgIm=49Lr(?NNIFX7Z@FlG2xxe3i`XZCbw6sZ7mb1Sd%z|qM}@zTr!>+Lks7z9u4*8 zSW^MZ9BmOalLl*=0@edWKYRU1n5O3)GzxOuI~hi|KcE4p{Xtgu7ueeKfK^mU#d3x% zb{j>jnJldrcMFnMzyEl-7w7_V+BRI5bGk z@(ELS1u(phQQRYTpJ&o?(Q^;!ml_P?@+#`*Mnojx+bC2dy6k>=G(yGstG?IG;&9Vv z=4jViy0=LRYh93dqTn9lluaSW`9S-SuHPZ^0-|c5)}Bbg$voDEVIHQh^H%A555lF; z2DIMn5-qbRlxDU+JuF+q9x#{*{T}es|44)X0`dEO>Z^cvdh|o^4(>CT*d><7Tn1 zZV{o5XTdPWNsJfO%+ID<;ZLf*LyOAHOdamhI?E9Hp`-olcevLhSApNtkA|D>QjAPL ztQ+elTisdr>q&)`zLV%d(PYttFYUJ!VR7wYuY9IT)24zVXqh_$Mr{Uskd&BC!*xO> zIs<|=e*`fI+fYeGxxzxDD`ipNg7+x!Iq~E|E{mtp&PNBxAt4X_Yy8b90H{CRjfzs zXJ2Y7Lu{MP`)n;kHr|;B zPOIbNZ}x`VQS~F%IKqH;P*O@3Mk4dqw(r8cy^TN=e?>HzyC~YHf4I z&aBzCk>%5H8L2MmwuRaf6(nMic`kEV8nk~a$B1OJZs9KFBe=e;5P<@40a!;Blp?QA zLzwHGg$RP#)!s!YByvJ^yRt)52e21Td~lx&f9)Jv?1K{n^dClLg+-AYdDx!2qTYmo z*Y#H7`a3wVh%OOLQ$7sn7ZTs4JK*hdgYUKyfupzT+50i{AH!@ogIS+ zQN?pv_VqVmSbo8=6d7TMSlZLdAp;Jro`h&I_MMeF%Zje43B}PirCuxX@G@&B*IDfs zXPH_DUS|UJhRqrTdF8`c&1x*NHzd zeTKp0T179aLiqa<#Vf4!o?GTm3O}NM)Q6PuvG+PO%Vm39l78JJspn$-K-C@U)-SJ~ z2n62$I;fXQ5;O-IAE-nz-&A0ar=_HP_2J`wgFScekhbG@`zjG{1LN61neEcv?Q8C| ze3f*rXHWb}E?n7%Gma(8jK6caoz#B4Z0h^Z(mwyYu6^N)ubxV3KY5-8%==0iItC{x z3_h@}M{O2Bf=+;hGnCemE9t{}Ts{{%VM3tE-wI{JQ^hs?+P=zRl6o@CI6pt13l$yH zLn$lC3Mpj@dS}}xa!_wedw;PU#?UU?xek?#F=_!7-fXeABUzOb8?D@7xWIZu7@inu z%u3#dNx$<;ZxPC1(azO_Cu=q3(wjHI>Rhig-pj0QcXdf$ga$9!JWIy*Cy=2@YodDp zR!tteMlyC_ki7fo*B!NqB65T$!>9Gi{`42VR(QKir@@XK$AhV6Kn3(i*@GYO==re4 z$l^VLeOHuBZw=CP!}<2fNrtC~-$L$66r~U7*u?=c>J32#So)nsUpp%IF6CFL7uyw%r7K~oU zI5=xz`SGnpPl`~nuu~S=JXeMjR16=?q_gj)W@Z84R^bxiI|P(xd-vdu)<;6W#`k0? ztcGmW#jp1F^z@i__V~Tp{gKwkp!=y<6pyVOqPnP-!?0C>-#YpU)#&Z(FVWYIz)^OGOm6h)W^)>W%9KO+yK=FYffNV zg*Q7XX+*_kd(@C_rrGE7N?KOVPminJ@^*nu55!d_<-qD{-mBByw~Mr?Nk9E0>7sa& zRibXbI5o57?~GO7i;Rpqm=9@H&vwUg*&jFFtDtX-2y;gmp zXMme}9lvhAH+a|=-z&>Ohf-nO;vKwDU;1oW*F_mUJA08jv)qzivf8Nr7g||_*oCL5 z34;(_k8 zFA6LqTOsHJ0;R&zTKv2Ko;z#2wytOn0-N$6SNRLPW=1_VE#Ec4srSq%G}3 z8q)mw@V13~A-1Djs%Ax8e;#N17?dAT@9t}$7JxpGo}jmnUR^9<;yCsiMt`i}vh(;L*-pCDjj13bt&YS&Q}0J_oq2D&5%%p=Wk$M;hYXbSL_^$1Hkn+!j~T z!Ah~T-k>A*KDeE=vg)b~E}V+oi3Y=oA~ueeQW8rR&dK-(GQk&b*fwluvq>^UP$Z$x zJB@`SzL+E;wV`Vy^S~vJ>=rNWc^5okW^PXVnqTCGf#doHZQTmP@%uU9RHFkwRv86zrs z-hvz9eqIU-WjdOfK{iVfWQ-<5G{G5DGRm5k#TinF@-xwJwFE6QUiE((r5Wf z3gBy`sM~n8q=+rAdWwbo{#+vE?QaFfd`7N^xYzi%^Uuv*yim+a;y}u@ zgZM-L7Tg)yY>)2*>do#OA^u7vNCNmgA28Z)Y1C)jZ?bR~-m5n)ilFx#g8(1no~IeY zPbJsZAS*cI>ULGvUm^p`R7?+mXVK9tKw9hxWv$@it`63EyzbHs?ql+J<69n zM70KKoV4jXVmh7^L9u;)`LOc2j>Q)G+r=gVaI5mJst2nTcWq{asiG!?uP2Ls`bYWM z%Wi8AU%ZeImp89irfccUeQTjUQPFTAP4280^fbp)tFEEpqgmk9OpQ;{ODWu+(y}e@ z=-&RWyu{LrOd!chqL(0}%YGk4@rZmVmG4aycK*RAC7jJ?`OuXT#SH>dLb%=+1ia%U z!C=(Hr_7J00q~Ml_<^iCpR?TGn$u=$Io3y6sicqQIU_|?B~e5f5<34rNr@ol^)@Z~ zP9}Wl6-jlB5gsn@=7mL0KwHKvz*`a_D9+ZIeK`?3KZhEhKh(<~cpbj+I*-eI$K|H# zRmcsBcJX(<@IE7t(aN-9ks8WgwH)8?sS1+A_XoyQq|xKE{R>%7JZZ8$6wEmlaxE0Pb53mszK4czR1Y-l5$gPp^fl`Zme{djaKk+Dl^-$=-z|&pdej8hW zjA4*h{|%Xk%@|H4JVA|JscZt%1f{2Yp3~IK>P-V}xXvnzn|x&Sqz!)AZ+?#D@=Ppn zZzhE68#k(<>#+#zLE$g=e+X4eotozzP8_Cl;ZF7NY@dwr@#>AyJJ`P`pOA`YwE3gO zZ1YE!7Ml&Ln|`fvIzz96vQ|y?;Y9}R;f^3D+pVJ@m^hj%f3$#*xG_ra5z~N& zZ|&Yv1ZU_{)jAFNsX%~CL{jH!pS@seY-rt`U9&Ks-Hi%|L9Oqjm$$a}`jO$@($0;a z+4-U3sJ<(p6B3e@M)M5xzI+*MN{`qqPUWBV16{H>ap)1jn9_@zg-bNuN;gsag#)S5 zR7|I!Pjl52V9s$Gcfi1+4z-U$XqV!Z#yW)V*X3dY*EW>LKT#`$j-sJvVPkXBE>Ma1 zs$1BaqXOAq%h}c>hJ~D8agluVaHHFA#idTa(o{Dfl=Rb<=W z+#k)c^}4B9b{I_N)>plAJ-r*9DWojYD!d37E%v356Zj?{F6K3RO*(9H@YwVT7k$N4 z+if!qyIVfPNvinkFKqPjq$uc~;U+o`ZB4WL**l^>gzyfT+XC)u2tAR+^m4fI!nrGC z!Nx30ToDN0=${l@dwA=8daJ>{DgIQ0^8WFp`rMnVrewx5o_F1DsG zjxK**v;IW;Fv6d?|Nb~&AE|{(V;KDJ!dG69>dVCSV_eVfZid_)$}dmva-$C~myhF} z-Z=Rlt=slr#(rPKN=#JPKAB1+bmFfxxVyMHxcoXig0;>B{#zG@2REer;rC+*@nHYa z?VVo#W^7?=Oy28(YjKB!NZSjmKVVtnc4;1q4ysz2E%3ltk`Os+AsR3~o{CGPx3X*TUR&s-7ywuD9&dnOX10!dJ|< zU*&4OL=R|$O49DtF48R-F2YfCS69r~HCc>S#ncpThM&b>bqFNY10+TX%aQ!yu#p?j z=@uEK^S27$)?Wx3d%72SgiHI~{o}HKd4D)Vj23|`Km1wV@wqdh`F=}a`Ij$>sxjf= zZ}2?^&U;kIMO^U3ISuI7zc+cH0ijDr);;01>u*8EM8l?%uO0vShtX6)`mrXJTFvoN zfVl7VZ!E*6wJ0tc^0;V{38rkHMm{i}?0oNg?}Fe&{H{Ea3C5MSH1QUYa%n4WwzrSG z0<)k?^mjurTFc($#62Kb!kB8Xdy)-hHhI@4_W1Ce-FiBbWl3>y2j_mdU%c+45#o=P zpcb>m$3M!+UNpUV?~%-BlS^K$bku#`!%j{xRvUu37mD)KudPWB@7c1^2kg0&w6xXB z2(FSliwHwG7EY9MQsGH8qYVaHcR|gv$grfiWHH-^vcA^|*v}H$imLZ6N_TR;l!<1BZc&5^vc6j+v;vz-c7G@m6 zGj{@tCld33d?>Q(r~+J&sWpO2b3O=xSwmb`FltGN@qp_{knb{m(y=&XcA=b<-PAVY zq_8JMK|dpY|rDlxw#RGIguOA)o468c_(c! zkXY8$B6>$3F+m%=)LWm&s{Q!_MdRCNFqSq;)5Z%-(lXpi^o}IqCjr1~X=HyUInqNT}$s z%encWS*)*~oB8UnAa`{*ga;@-GU4Je?3LMdPi zlWI^VKz+=g2GFkqv9f6`kRB%OpJ~l%m1IaLgC6Dod0I2Z!&ov8HE$wp!xA;8Z7H^P zoM~eYplWN2$53ttwvk6-NzwYBGx54?I3=E}aEZw`49ogGkF~)4TF`{|0>k3P^j5a7 zfv&o?tmFDn)Z4iD!EKW_{A)>gbrA=+lh2a~KX(@GP<;+Whz-gzWZELI-w*0wpDO8e z5s~>RMsHLreB;Hv%k>;TTP;>$|J=DYr8AC4NlXoo({=MPVjZn~Iadi!0TE%9S*d*#yj?Gr1W;IV=G#}TW^rYhacj7viQ1EU%=31Eb<;j-h$0XK@J4d zqa-Jk$=BiX#^IGLSvqene3ZhGyQL}-yd4&LFk0uGx;T1CwMDzt{9?Gn_d79rH7te_}EbmO(R}^~^^;cuJ%!Fm9Mx zqb_z~R#@_b>(^`2moJ?(sFs!VSWQj{##^T_z1oQ5~?DCOsRpOIsxEF~$hlHz0wmHdzOY?XKBURKFYX0FsT9ARWB_k&lk`uclyTJY( zRKUu@M>-jv*b_*khQrEN+d_D5-z?Ww-*ivtbJ{%%oK4f-k2bN{$zX1Gl)(sPj$Zv% zId`r9x~K`wMR@Nb%_H@ikM`Lwf7-2tc@NcX8X7pib%RcgL?%jCQ&UL66Rf5vEFGtb zzHfxu_tVYd)};=EHQMj&Z)Y3u0O`{eh;$3Wq2#%J`oYk&N&8ys{V2Qn*Jis77|3X7 zL@Uv_$y~lw*pc7f;2Uj^(!{KV8T(3FbH5mrCKoD~s%dha=U~%sQbw*9>Q`?Ra#bhv zOvhhgQ}Ab?cxP1D?Caz86{mTw@vQC5Wum#&)V%4{)ckX%pT2B>i`eFb}8yh!|`t$>5U-bqZ)K zG*WD(2j0T_*de5_?||^@a|9vf0ZlKQc_?fpFu;oo;UZ+9C)5<+N#4CM*m#1Ehya5Z z{d?se6o`t1vZwtd%bG(+%wLI5qq}6v{0SrS5-I+TKLin^Ls*!ORC5pvrRh15aK<9! za05!hw-Qppjeu{=>NGz`WeQ=u34StJCen-*AzHJ#{@El)YO-PDxV8HLC$7E*BRR5P zW*6r{w(IFaIWm7HVlKSVm23+yD@OsVS6Em&1K(1m{;DsB)6D567Vs8-TNvS`>gG@EvM!5rRnb&(1%h z&Pqx9yz~}hHY{n+>iTfN0rP8T-KfW$yyvX|fe`tFPud2E)Tv!k! zr5mKXQArVyZlysQq>=8H?nb&x0cjAFE|Kn*?k=U_TN{1v{oOy{8=f&dhfVCg)?725 z`OG=-f1;jU>a+xZu~5Wy6Z_G*te}o4J%ty~O^zV$ub+7!#{9BEN$NVmQdS1vIN&7r zd`SLnrF<2ndH%k#QhcaSi&REmu{um&Nk?M3rJsEZ2Gspe4y9^kRs=6DH4}`IlIXEx^0?*cfH6&c7LqC!*W0y*bT!QdF7@8G*fSash5 zbd#MKR!fPq5=*S1mzZx)0oGY75qZU$9j0s5M>H(Dx$B z*u>)C%}$YIAyv`e(lVQlhR4$CDVp6+8t{qy@tWn^t5shrRIL_LVombPnoU3SBd(Tr zYT-V|oGD9AFB)P}@c($e;)~!V=#2xjL}B+tDmgPc>621+qSX8xJ#T@8U8d{*Fu1-^ zXKe-RSnazHb=6xHVKz2+SmkI2trOX@(bE%1yp->*9mx3ICf7V`I$l{%@?;-Ge1~V~ zkm`8TOiJZu2Is=XPWfK?{C69Sda$GyKX{<05?PAbSf(nGJ7meZNmUm1O2PxAf`351 z65?w9F7V%#@OgQU_V)uHM8=-kECgBy`qO2S`>47f5~+3dk$bj?B%}b``cAMIRp`^r zMa$l0t7&PG?8@M*A^zodMf<#k%fVhgiaUd;*)A`4g9{uth0(N^`OQcuWX4c5nF~+s zxNY`UxJ*-NvgNutA{{g($xQeh>?AzIS*l@zYCR`VUxt5eox2ej@EN(0OPlY*=c~El z&A6V;rA`0P0GXD#4jeh})o!kOYV&Kj3u)hT*ystOlAh;_&*oN?P=PF=#*YjZkc!$Q zg8^<^Ge^DzkQ5D>d$(;u6Dl z>|G+jwav}(t7InveWEA|IvS%|Q;rxyw>bp&VewPq`LDA)TG?T7MmU0gCR}=kSl@{Q ziEwY5P@FxTBBs-AjVcZjya*xftK+HDwe!^hmgA{FmBO<^##5r2_bg7jXKfJ-#d>BR zsViqT+%em~mQK_U6?bfsve)#d&spn09@yWPkUT{eh6}?0s94L^$FwO?Rmd%sifQC? z+K&KL+w7pr1rELX1G>n}HUM+x+HasG@!OXC|FbAXp_@hq2C>wqGw$cikIw8l8-}y) zyQYDZGUdOpra%6%s(h+YqMhTL;abTVcvOD6G#;>rFG6)~7js40Q2L0?<;<|ufP)x(ZCZ8#QL@lf>D z-}Mone))xit?3|Qh4M?(rD|slbtg36p)2w6KT(GK*8)U(IGxaw+#j#lxwt+G!b_Qp zTyN9lc)}b}_Dq0WTumkIMDgH*x#qjWhlwArdC=t}h&-YP{L`d-K$3aAu3{2M%yirX zZkl(4w)$n@VA-+WJ74vAQ};Cil9@nPZ9OwUf~2CG9*B@}JWelk2SS%11WXa2`gkwf zj)?zn29B1t3z+O@F3k4<8S!KL&*u@5bqMXf@&;-DilBZn)*oG7;KcJC$Xvf1&7(TZgC#XK}h+ z@wv=3F`f;JTC(5fL_V8vf6@viFY7Vv9p7@RS#o{!*HJpU{w;HQyI?SfgcRSanXIX2 zoGJh*JP$uI{cH>GQyYhokY;#3zSgdaH2E2Wdx!I%+LyX_Thefa%gW2yuj}5ym+D;M zv+0WGcwD?5&aYwuVdGd{adko`Tpa^N7=lkfbTDzDgITG(p z2>7nmfgb}Q6A%qzsK+)#TY%u~GXeRr7N%yPu)IYG@?%vJhI;4b(uCO_rUyBIOc#is zg#TqFWT*l+XkS&zv~@A(XsC}0sPdnL=szye)Dqe46h#4f>#M{9#s z;QSsAcLnTC7Tf=;$k~*XMydbP<>UBWr+-r`LK1LJf_1(-*)V+O{pBgP3@ZY}Tgs?pn!zSj zhTiXYLgwFwG7iw-BJDTE#NclQ3WN6|gl3ljQO-gEW_}#r2%<*o-CL|}G7LlpJD`OL zWo6~`4Bnv{Vq+85hlFqdH{tokCg>vpqV5!M5L0L`2j3bKs%Jz}K>;TT&HaWoiQx}^p&qjfAP+*t04R7TFv-u}#EOkUX6@U* z=0wnwk$=bd4=UCJg9E*hW5*<@s22A$$#q2Q1YNFkCMG-bymqJEF?zjpLK2v~ggcSf zDp43~E^RmFAF2nxj;mzT&??<<-YL~H^G9Cm?K!)R${-gIAT<(X$p83j3|Y_%%O4E- zVlv|8ETQWfQf6Q&wg#@$JH)wdvEN5MzCwp_eim5A-FoUH&fAVu&;lRqkF9d?;Szomr2Cj`jjds_V6xG@lXY)-+ z53XPUb$8EZ#hDL+<;nW1+((Y_MI?N7So3PPV&gryv7@uq<|)h*GV*=PC_rJjJecyR zr3L{=Ey+icVUVlo#%%A92dlhF4yl)DzoGJC=&rK3fC!F>cOl>3A}#nZBHE4$iP#$m zwHp6-B`X$!tyGX2W#!}uhh^4GIqsDcVBUeBP+q>+?0fw_EK7oSEh3WaecuDdz+Ikz zNwtH`j#2*((eRmCyelg$Q9!skbiPB9-YZBfQ|9TEJM3lWx#PoCsNk^Mj?uS2{H)D! z;WnS$Z}Y;NN6aj%9K-Hr-UNpczv9Pla&M1{BRYSv#@ODe)ylTZ`P?_Xw@MecyMC$X z*HL5@Cf%sYEGb8u$awjoS(^{=^PODpNs-V~3BmGyxIfX~>knQLZ+!bnnH~RsJ#j}S zW`2^DE;*@M!pvwNKp3Im;DGVGJZ;&G5s5po8|e%yx9Ll6CXvDK@7S4CNaFWw+HAta z8%Xuls%K_5zP9X3;le8@pgrVY2`I;3`lQhKv`FV12m7)OG;}};^$69K_-J4 zD`hM%^jUNKYfSh3K^v7gTS?)v!(hbI-Sw0-T5YX*r-!N^>)$lZ(Yc(^5=lg5iX$ZA z@p%5pDK`w%{JP(o|K6V0U^dwvACnk63>r`@yA|6uFQfIRiT2VYlBoh(pxro;UXtYyI8#qImj>fc0Cd3MQ38mxLa<~QP}G3V z*8+F1pQr#@ur;hVf(yWHW@xJ6M|7AMkfcaJ2)2Zulp3TX;URyR^rXRG8dtiIXqZW3 z6Bi#J;R;Kv3ZC5QzB)*fd;{Ze{w_Febctj{$>gf&lUkiD+SdCC=V!Zh=#=u8rZrSv zugMIn1{u=6?S#1x`mNR~0txJWU1qOqeTy4((-0TN;IG5&_i(Y&_+#3>dJeNW4pYPz zwZUbTKH_+6;qrE2j0uZ&N|%cT;aTY#J!6B=Uz3gRUL{iR#&U5xYjNY}AI~l&S}jn| z4t57dE=DEODHDV0}^1B4j`%5~Npcx-L|2a?p>=kQp^*X)7;l z?ues%Rp+tBHy?^F46sJb02Ew*oMDTB@Potl9Ni9kExbQ8Vft4Ce&Iz1CMJY8#}UPl@uiJvks7HvKFXvT+odFbPG0HdQ0xiwiww!i+4QIEJ=!kJdHPt5EDJ+2I>gJskGyzI_R zcc3G2CzuG)25s(K%hQT6+`jNNl7;ctwoZ%?=@=%qXj$5*A47^&^B$@Per17yWhH~ z7jD#Zcj~E62{Ypvs03d9P-ckWo}nT~YBV2rh$gPv^%N`qNBfis<;iD=!U{NNV5i?Y z;|q{ul95^MHDL;iz%k=Jx}N-~U0%iHWAa+$O^G@tW&yUT3N-;q%x19XQTc*p zBAGf;WCV+QCv3;-{ZuIB1q15ArRmzM^lxh^<@jp%rx3Q@hHfSt1HP36Kfgkq&B#Hy z>+x#qI&3BT6oOkh@99+?ip|(djbdX*jiKKsu?K6Pbae1N z7Tr&3gU?l-xSu^qp!y(%JCN4sABx-4R;@z`x`Z8!?n1~HReit_8%i`SC8g6Fr3SI^cw7OyA_4}wgOmXPb2`#KPqY;J9C z8>m_~=nMy=dN_LZ z#7C($C~v%UauWGqfvjkOZ1seK4AjdTt}N^84>aHL3JRo=9n7;XF0fr+(X2Uu{~2%Z z6eoq*#xWaZWBqm9(K9<2y-KD1x{3cfa#)g4P{fFNS$EC4ww;ypJ|?Qz(x(Pwix)3S zmEQj5e|q`YSEng@Hp%mlEzQ#g8z3xOYlY+W>J;7P^>%z2jiD{ur0xET7Rg%56sI#c zW%$$->YuLz*ej(Fc&&fb*b{tjmunIbFlh4FJ2@wH8@EJ7p@6$ufJcx2%7n&{lURlE zp{8UrnDD(@;dsFFQE&#ZA3yu+3y)A>{Mm&OCSAa43+15>&UCCVc^}jKhH$l4sAJ^2 z^Fi+Gg%3QQ+w6UvbQ8>)O^TvU-+U!tUN73d&X0~5z`xGOBd3cWWXaA+o zcW1Je)@&j-hXYiUuspFoY&!YYm2)YD39K)goDyH&MxMK$aFr~SD~OU+iZr@89s)+5 z^gOVX!-lj=9TlF^TO<8p`1Bj#OrY5exj9@R;u8TkXI+haznDg(>Ot2 z2USP}>`*Z=*#aIEAf=_JGFGB4mjL`OiWH$$-LfM_0A7l(1A#20yHKbh*v9+tThel`Ynsg#lxUeK*Y5w64x*Q=XTiPda^3Ms94Qq6B=M zV>cs3(XzQpo85~O5M6u7*@>22I$E@4yBWD;9Qiii8J=Pfx96>_em=2tD5sVGU17dQ zmh{5HH_b~VxB-pqHx6vMIgi&dGl2T&3S|};!#?S$Febcidc6bsGXXm3uV|z^95*TA zJ|)r-{J9_$<(s#tEeUN&BNX=EPWhd0S~0*5!z6=#0c`l>Ul9UDP|=$V<$ zaObz(Q&%Fd!VjXH574DHjf@!uR9*xOg?Y>$#jK-dvI*#hItMwdpR{gJt$DcI-9(cM z#LMvEfTY$5uQ!jkazEJsI`|jm43~Fi;(PA>jfdhiHsi4XnTNo9KiaL=zyjO(nN-il ztMs$n(g2;EIp0xF{~#e zmylU1toa!GZcf?FHRkcxpaF8!U&l;n^QYk1@-6uruj7r>T=qL-S6;9em`PNBRz~@v z)*oF3kc@bv{GG&Mh0R^A*OAu=3q9hI$7?L2I*Ov@+_n{Vw)WUcC40OiXQB?}`E*XL z_N%a~RXsONpB)Y&So-t@>#e`7se}8ue<@-ix?eu{fL=zv-}tG_7*Ca6wF~CLe^F+f zB1Ampt7+6)FJ2B9616#zo5{SHB49|WTB=Tok`LvQ#uyf|=L(IET$^8Q4mGjt?#Uoy zPO9>H&%_@^`ztP>KDp;2QI;6>s{K^>mXniHZZrH;xl|eEi~nJfTMeW1F9jM<3Qmof z{{2sDz{!s_zL6YPk;0EtU!9o@3=P)!KM$6cvVzQ|fYa_A6-xc3_XTgpOO#f!eQ(45 zZKF?bnn>P$-D8H+so0#Tp$f%g3D;FE>5TumGE`(_FNs-_M{gX9$il}*)O@oa8GXkO~U=)P1_u$|~NqI#5$n8}#%AByl>1llQ#BELUhQEqBA%9?$B^g3le1!PMC+p-o(ZQ=DG! z8@W?`W@Z+9{Vg`DPb@jEo{C+h3wPzH&%_o&LpJuK1iw;(_)6c^OPWg23zkn;x z69*Jg;r-+sfs-K1PNWPnJ%;Y`pyI?gX8toUI>A*``N3&v8Jv z>ZqlYLwaV>{GlCrN%BCeTNOMTDK0!m5}$pvh;T8@CNR4)ABEg07R@J{Qc1KehL_ju{7djyQnC#Tb$Dz&1f34% z(FL1lE0bi34xD$;n$GPI<=si!LgET5oPN1c6lt(Zj3T2)`Fwe=Q=g0!XS`T-={Q`k zbQRyNTaAb&@9R)ur`5w*a@x-{OP8qe_cOeFw<1ZOzCUiBODA?%VD7zSD?Z&s6M?%XY5Q z0XHn1NZ`%w%ikLbJ4cs}@z>*ELMkRq3G4p6dvK=OEm~pV@1aJS@9&snr_3iwF{fW6 zcHsON3!&1ZzGb;I!_`3bz84c1X~m7;gr>_#FWBo2|(&Ri~L zbElv`PYxFNlgfPSMkN}5@%}xBd4~|MaF+7?%DGv+2PWo`_4&~4&l9m>FLM*nIv}_0 zxd>EVkUi)Vb(WcmC6MvN0@`~aa|q9(s1ablpVD(00KAvWr?C*i2s&VaMCXfe*efVr zWP{>GHYzDWp#A`g`8Qsq{_`we{#nlC9n6CVcXyr9!3qD(o!L!C@WAOL>(q67D2z@+ zogFm)0vRjCA&*-O9xe|N*%#-tA`ZNm&?OlTOn%V3yEP1)!WK0gtdwNgHJI$?iXSV} zJf}T>Ddpt6ZQWE=?{7OVfU-b0sMFce(b8W-?*a)ebo*}+nNN9x6BU-sKDSkVCLfxu zqTsi~mlTu2i-Duuzi9RTZROWWPN%&wr1FfuhN!IE9sRqfs_>30_}Kg5BC752Vn4!BTJw>< z3rb2#EHtz~d?Khomozq}uWtw&cm4Rmq&qP&!DkfrJ?4aQgC+mCQnuv0vZ_WU#clTr zu6V+-!+$V{ijq?J*NGgXS<6Q_Res*M%xvf-yc#eMn%G9n5kZEkvkh> z`VCH`3pvD(I4vW7<45T?oZZD=kHCj629^3LWJ`uj_7o$%)_Ih(g}!oRw4)?txbx8Q2YUJG80qfi3aohZI8yt9rg=RLlKbtwH_O}heM>_|HS6wxmcdZ!J z??;hAm@(Nw-f3*7#k zm;j$_ZW@dikjhDV1~Ae-S0`RB@O2SD1?e5?m?i^oH!n6wHuDa${(y?xpTMDlO#J2) zyfXbk449U%i>>IdGk+zouh)z=-RkH0*X$;-gWpwYd_429bzbC!Hh6e<&&^{p%=!1==|LA?H7JjqSACUtWnsTMSgEoADs890i+{ZsD;DWHfWB=C`$KCho zP^zTC8sc+d9>#!xfb50ue(WAo5~kxLC?iOH!^5xYzgCTU8s=?p))>yZrAOykBzb7c zPwwBubLGj5h9+2)8x=dpM(R`^59#MBwAJv4N0Nk+FAZ^;9!g4@6rnwtp%*S|a7_=W z8l}cz)j~8B$fWMlc$67QT3XHYs~Kn~crER)rJw*o3g>+-g6D^x=}CPT;salHikEHPri9jZeg@Iy8t%s|xx^6_HBqsiK^*fl*&}ZoF*wKR` zmX;-5(=5*@fxtYYuY7C|N+}ZS`#&vpwaXy|{+$qH_XtJ=6lxJF^GX99k_H{HDfKov$Bit$=4$r_N})6=O8{m8;ba)!|;%fU{VwdUvQG5(W_4l-pX?Pz4Vxdm zTXVY`+M=h@s>37s6?q|1yA?m$G|i<)S%k;-SxRwMeZrn6C9w?cE}Fda7t>Q(qMBbl z$okWsqQN_BlnXMeJ1;D?j&skWq_aI*O;c(y2mSl_dlc z@4T$Ha3me74u9mIdyaCE@GY{y@!?7D=XCbsO5}+kIGK`s2dwPC{9aY6H;A9}+()K3 zGPA7G-y$L*wH6xEF8AP)HzK@>h9j2&CMkl0ha;l@tS?tN4Xsbx2A3TCl3)G zPfEpc?|A8acxoiQw3wZHZgm?4X5P2EAN*-sreVUlpEt$VI7+-RKr%7rc|?hUO)IYi zC!RJ4M;RjGf2GXqmhVpg(G>t%YL=z z{H*L%ZM-2OsOpVOHb;wx(%V2SFtiG_8*oF)Hkt(h_&s>LyU-vr4w`cRsIru8YntDG719~Rr4?=g}T`1smK`c>TS&Ny&OpIg466Fz~M0YG*yY%j9 zUJ~8&=gM_DYhGVO)zx`QzI=(Es%H|o#m(tBkVQban%vHd#~>p^pDuJbm+r?TB`rNI z)7C+5T=#sb6#PS41o=C#FuE4feCT2*Fv&O}YtO*rDCQ(8!m!R;*ucQO_hcd2%67;3v~tNl}bNafK3mN_sO1AMt}0%2YKyftix$# zZEaw{L7YjMK}Q!J_hgQEXgIX{V2cTu?oYWfBR=y7G@9SvS&ZZc3uetvPA4|(^j9pw7ZxWmpJzr zbPtWu2c)R`-~TSnhw-#XtKOiC_*pw%-cYe>zkhQOo6fh`d|@_*>JuC1ewjl}zGc4ZLR= zxB-FA$47q#IWy#P5Lt#+i}^l9+!^olVyG|5+zpM{qVZ7~R-QkS=f8HI`6?8Bo@p3M4S07_ z2Ktnc=;WnBTb%dejVdSrB!|HUo!%3XWU)lRCw4-Jy_x*kAPYPrtq^!#T6QVa7@*nm z5Wx;RPS5O_PFCtajntXIaZ4T>ZP$aIwxt`4xEZ>I!dMiB+-ah!g&u=wwwy(vD zrYbT1NjP+fuwhgd^D`bZK_MPPOwR^3a6Vq|5T;TD zT3L2-a9B|hQ?d<9H z5-!ivYFVbt#n_{R*Hc9NGiRyYVmDdr4{JRs)5%tM5`(9c*>^$JT0yEVI>>f5O|f3Tuc zvAPa);~HO;J6BP&XKQfRt@c=aG+fD&BVmzbQ&5G@*&j%w6*P) z{CgI{eOol{zVnW24p2PGKZL0S``CDdXsiwj#`Win_uRUUO{wUCiKLPq@43p}9F9Z8Y} z9C*;3K0B>TVCH=V`1Kl1U{FimJf{ zU>x}DJE4b_^@EJVf#7MtmoHOcmWB_RESS_a)Z0dSq(2z3?6Y`e^1Fl4M`rx|;rGoS z!y{V8eI%w_&nhbdjPQ=8G^Q6<%=`7Njo#y}{0x27A=;_G6T1@}8QLGZu4FmN5cMQ) zQDzpNIZ@Ic%WOshm=eidSXwbX+t%!v&hY(jZ(g(UxYAn6bA4MR_@6_xNs)!zFjggy z{ZB`ZjlSKkLL=e#WuuktEX)ncl{j;DV4QEbpqqF1W}mnE1*=r(ksW8!#~np_MM1ww z!>GnshI9g$FwtS5Ry3g&BO`W4*J9+?H<{T60d_xC<8J0}WhP%G+8lY;uw#HDdP0##Xh9rq4Yumb342Too$6hA!;kA4host?pEhzRGN zYy1Hf1Y_obn3a&0!WyCg9<|C1&^$=OYzLl&?B%)$=|ca9Qo?{)hkFW_ddHWk$gy4+ zCo~(&`R0q>dL2sMGq~JRr;SVdw0Xxtdc!`oDFsXqDNJ=Q+xLdn2{yGdZ)SV5@~;w? zFL7~lY+>TeID`rC$Z*s5R_wO!xJdXn&r|lWTOa&0KEOW63gNnZ-av@D)-yBv+yF1d zWvma=;0E7;9CYMEd`9!^XG?uksH&oT$Q;Hbzzvn%d7SDmyxZyZV$-e< z?7_XmPO7n*R(=-rQ}wycqX3;pk23tefpLona$G@0Pz$F2)=m~ImmE?u)^p{8IdUajUZ1?x&h1Ns9{r4s~#qJ7}!05A2M<(^Zu#q^tIsDT^p6+ef~ z{Vu7(zHZYsSc}M=Ci3HT)}gh=bYRo`krtGcUGe1nH`g^;;JZ(cMbv6*s#Hl@sBSdKf_h>rP`__-knp?@=gYI=E{(keY^i?Gr;Yz2BKwCr~QIuz9Rt`qG zN|~zEmfE-Qbe#A8fdRR%8sAD=^1;y90|wAjy`(gKNDUEC5VOC6{4n3Ru4tf1!c!n4 zO~8rz=)R))zk_t|`=(i3}U5;{A3C9rOv-2*RE}i2VKEP*>VjxSx z)kO>Z7a&5kq5t*9F&U(gXCie>*cL=5|MWk7JaCL_QSLBZL_J&lw&v+a=1X}@A{vbr zL~NB-l{YqsX(y|~gH}&)gV?q<#|u=Rd2l*YNGI9_X@)FMRagjKp6-TM=F1qIZ%TdA z{LV+jUE&7|e{48@$JH`gg-XQvDIzG!<7o6abGYd}iaJtZ&EEXgQU9)#4F)Xh@8}z8 z4%O5NYX&K<39g)UkEv=${NvSu2s|BYa!}4;-=rO`G1{dcVmdfDsGHZ!pw-f|v~%z= z>($L$%JsRaZ-#8*kICrQf5DELu(YH`?BqB|Ia@9`KKM0nhB9bp#BM)uCT-~|da>|z zSCOO-8J9ULFm5*)D7RsDDnBUjBNtNTmV)*zcC;%C+P9?ped9oe+9L|V5<=bT{*MZS zs>J+!@gaK>tq+W7Kf5p&crOIY2OT^JX*yEWLN{Uy^T;kw2%us9QWBrEs)PJLnE5C9 ztcHJWtUiokBsrU*=PVm2D#aU(yvkCjI5t&m(Bd;saZb?0&sbj04qAWN?JZHr=f%rA zi_Fa~v5I9vXY!(xP?p$d8y1h4{z;1txoU809U=p5+o(Q<>9A!+qKG{i%eB z`#+`w6ru3XX+Lwc{C>9kqo9BGXd}~`f|eE!bSV%C!|NZq`!(O@2&S-K^=x-3gOTt? za_L7;=65C^d(YoW*bWvce5s_IO5xj5q6t?rVO{*A>pWcSE)h=j0)AmIwE(k*MWa>~ zQ%9v(5mU{>YH{kQir~n$EeyUXO#q#&VG?`as*|%l=4M~e1(lT*KB1c5^>{HC{c01} zP35z)PH@fk;&zQ7PGW_=-xZT%V?Y)YAi>s{tE#|hn`@a2YIjAXehpYrQ*k-q&*J&; z6PfO{wvWlh$RXCgA;S|;izgayuLwQy|%p_GkKM9ai;L+#uE%q zspV2NNMC6-i51Met5`hwnfcmFz-VD3j^XxNER56Mm4|nV!9+mN!z&(PX~FvXre~pS zW)KX1SG@HI#=S$QVC2J-k94{|Yo1uxJ_gm=amOdQHz!?#x?Z>Dg6O;#8$X7G%dXHp z6JAntadAn4K^$xg`9m^SKUX>LeIyW=F@Lv39c=R()r!JZl<+ClDYK8Y(z)_(j3`f3 zC^K0v$6>gxtf^8I)eSxG?S#1yONo#i6;Q@!XMl}cF59FV#H8xbJ5m^)>3lxvv@iDN z^oA?N{eP-nd>AnQbHV<>w$q32P)DSCl+jf-$8#+Zt|>$n?ylCHm5a4t23$`N>DbVB z=j{=5#Zi?5=}ykb_##^$Uh41SKdaE2SMD#zMrj<#XlC};L}J5BdSQ+E&Cx6>MrWRMrL#7tvk{AnXR~& zAo1JH{J~)vs?+0nXXJ-hjzbxSI{&<4p`!m{v4SFIl>Dd%+KmqN7ip)RHE~|wLK;RX zvOpvz~$}8pJg2AFZ$d9 zh*xHGt;%PE;OQxL$(2#Qi+gDV?aLZ`bTR?o+*~R^zbsSMsCMDi3d0u(Lc0v;H|Gzz zBIG!eb5&?U0qTfH*OjU;AQ)51S%9%Ym zg4>)WZS?y2Cp8({Q|U4=LT=v=bSL9@gucr}(j2+ceKcBz)aY?@U9tEBH|eSVa}tu> zqhIK~3YvAU35;8TX1e`960yaz)fMndFmr0O>eJqo$v%-jpl!F3TN?{**RU{y$IBs#vP05h z!SIKixZi!U|3&_Gc(VP{{(c~+sNQ}r9bq!j$F}q~r>?+qm{Kg7?zI(!@FaqHHRDAZ z+GeNA`AopGVV!?oLo4?BL)-5XiLd_nq9FNe(6tL6%2On_W6Wc}kHvM{^zfsqYACz; zdGwjsRT;Z+Luu}0XYXXW+n%_C`NCU7))Qfg&EIB;a&OL?qbx~yKM49Rd&!kYs>`$Ir}fXz0eANu?bQZwD_3cV#{v1?pR z!jNm%6NA-5^d&v(vUow4bAQDq$t7U|uDoV(f=@_{A%G_v>(iDe3(dAI(0fNkD-KG{ zWG&kW0DSK=3yI-nxZjjo5;~aPaUrAF2J$y0pS|3k z_!4o0fR?TA=LXuAg{TyJ2ZnW*sgeg zWtBDhPpGk?$T!#bH(M#m;azn>!wqV@b@5p;A-029x%XX0SEw;u4@iVPYbgY-1LS=^ zMqb1eo6}MJDawt@I2XrN{i0QY7)SeB;%jO8@OL%trH+%#+(aBh&!^^Tlz3*N1vK)R zyg?Sihc)J%2CD<T?v|4=u*DU3_}h(2&xE_XCU`B{;dD z21Da?d60Sae!ga6cj$iLusft0VsaJv%anDS(`xL&4)=9rs4z2^)h<0C`AcMaJsfKK zHEUzf6cbJ7Zv%zXPZ-N;5G5(1`5|y45$B<69UbED>XgNNLae`8;qGcc6ihIqpMFCL zqAVKNwpo%_P}OM1bNgtpV~?nzDEScy(f9idu^*HPUhJNx0H>S~dLK@gC<0cMod=|H zh)8%}KL#20eb?>ucwWz|SP<^R)@!pQb}42hWn~u0qPu<=52CTgHykGFAH#lrs$o<3) zA{km2ik6xaC{c)Fdp&YW%&9Z5g=M>9!@{J8^g04HDzVIGl;;cs+Ao49BHU?`Ge33+ z7+U1#^V|=9xkpljhGGJOz3fEn%RKet79L)_^(sw2ovEoU-!=l%yHQC39h*yh;^MIR zoVG(&B+ls3wETiRe1E;*Mrw_JxxAvAeRoBct=p^<%9Mzs8$lufrwCU-`ajlyMvBi( zO09gls(|rKkVPBb`>rsFUy56RleFf^?*@}e-g*ZvS5K{z`uCnDjY9>j{@qjufjHgcPbyX4juSpo6aoLCLzT!~PtCf929{Ao%zHB?kcb zH#?+C5PX+C9RxvnM(P~XOoa~hx-T%G?oPJOP1}1w>K+uai|WnizYGoy`Ta@T)UB5GLLdR$D)yu`8>5;ldtl3%e|`P=)BN@KC@X{MgVDnT z0txX*kANq`1>OPS&s)F!y%*jjp_YlG;3!n-SRcm>%I<~rUh0!EQ5E%kK2s@}iD5%J zc8hf!hn=HRK-TkKWdE}#=zp*=s8Xzd>nj%Ova*u>5SNbSeIknnJwtZl_taF3px??f z5Pb;&jE#3bF*cit$2aE}WYKwmj?OKYQDsjGQV~rPY6cQ)dpuZSZLog6Lq(1zBm#BV z3;nu?8w~>lw?`5w0uV)nCTzoSrK>;sh?kGg{J5>X{b)9j)5e)CTk2V1SbneC4ywtJ z&n;-B_3NL5nE6zRBDjl zWB+MpI0TkKT=w4oB7ld^Fqnx4PBc?H;`BXsYzmdPylO>(HXk66AX5tv7zl@gc>(cP z*ln(2={qOydZZQHbDb%OV+G4$aNGt!uuxvjdA)k}+<7YoCF=;A3+P58c z$~<1Kj2j*U0Se9LC^V0z11$w98Bs6n@Y}i?QJyiM+OeeK%kd?u2DO2{v-hi%7t#`@ zt%P~?bgLPKW$z?Mk4~FH1tg~R6Br?wzcc7zU{0NdEeXGiD5jfsz1`ylWc{%~T{Vj$ zZw~#U<&WcEED9$()GFV^3bQ#=oNlM`WhW9v6|{S^@i}ir*cwXY>NL(shc=LLIbi&? z33wOQho9V$K0QjeHdC$zhjTRg<{Qp^V2%=fDy9ckgiKEoX>cGYyS2(~HG-82H2e!YMx2|l!J1hFmi2;4Rbi25!Bfj;R8k1t)gL@|Hx2X3*ax+9@P zcHQb)Q|%fl7l>A#Y`)#)uf=;Zza7Q6MwF9;@lI;#Bft3ImcR3h$X5Z1HHX9T1*XbX zERUSh{b`7s{56LwL%Vle%LTU)Ii^DUb+f}YjfMxVcs#7a6z{|im9**|VW}<$KDbvL zCw<#|IQDrCHD-9J&T#{);IXD(GnrQVvD~x8)o6*3SI9j;wsEXIZ{IsBGffKdIIVWg zV>cV@BA^85^*tsVG=*179Qm|AO+d$XfVW(^-xgCMxc-GSAS)5(kXhy74_234A)Q22 zltyz-CYZsQfP|w%Fe~S;)FcQkHt`0#+OqvLuN7mYupZTyTK^mp5}@<+2GEE$hl`sP zSI>uE0v@0ERpd*K%ebiF0y!D2Zyvbqf!=|?cT}^L8KNfPR4bROx9mF()DTd~{$TFz z?y?)MYb^yPxMffFtO;({nM_a5woi0DTIjnX_42wscQ|EFYqmjp)_f^m7v-6pH)Jus zok{VlI}bZKJ)Nas@R|rMC;hWh)0^e#CPVI~n{}qKQf+Ktx5reCI=N$!HDg&3# zEXqbX+*w3DlSG#E^d)^-GY{UEOrHSkKcW4<!zoXT7%usp^buybwu0D~NdMH( zFO<6hvj2=0rkm%=?QIb%df z#HxSRmwcZ^0wvY5urX%?RAVMg%k8?G56T_-qO??Aw9V(1%DXKSM+{lC-z`%3t8Z5v zeeD-k{{2v%WEMqJQ&a1AedN}&^~F{{iS9%;Hi0V#xVO)}WfhCf;q)q?i-{~7te+MQAZM`mEq^72b~Zl$|5oH{OaJv zx%nUd{2SFT4Tt9yWS6Jg1&EDUKQQs}gLv&X40pJ!^AosBwOD`2_>1V}8# zVsOKQsi^Oyocq#WYE!Y!R=W~^WYzq#T3=r;{73hz{Fe^>qg!3rq86E#JJ@bNU5{)A zd9CU_B%dZi?NC@>LldQe8@OYwx#pT{ zuG$L6KILsXN&U!(nGb?G0+U(qvVWI--$KlYZK`t`VVAJqz16iq8Pt=x@-_|(>ao$i zK15WvI!D`cepp&(VJTdOAOC&KADV`DLS_)yD)jlazs(z$q~YpI%EjHKl(Je!)nDP^p}0O3B@7$dxL+f0eS&=xm^KQ5Z*KgmCe#v( z4PClSQ1KjxtwVo=Rh|G+oaP~Bo55@6NeU~ry>|o~kbX!PsZG^iuG4?K7G`Z1FWsg6 z(%v;7I4kz#XrT<)pMWzdT8R35P5}9wfb@v?W6eofSxulsy@~j;+T&5noEk$J85FxU z#WYbqm`3W;r-cQ>jHy)>JvQw|QE7hn+|{VJOJH2l+B%Q1gg@+; zdN}0G+~&(NhhAJsO|UG1wU%5vnmS9PsV(B&k6V#byj%%Scts6|h;|6zhB25=*P2UU zbfEGF>kHI1#Gwqj15cQaAp1SQ#`t5%EY#v>8$y)$wI+4LwEdajc!&IA7RLy2J!7lP z;{cc{Eb;$4JO%2i|MynWKRw#X?=cg@-^DE~lwft|ND}Sb-wf>Aa`IKfMrh$R|N9DA zDb&Q+3AyQS%#3X3%=I*0xerkO14EQMk3N(0UJLMSpWod{Ig(!VDXC*kpIu65^p`Pb z4I#8^Z&b@z7p}b0;l~Z1SOUFZb+i>V6Nlc&Ca+0nY zC?y^>mfI;!e4s}9h!7IK&P8g}v_XUT{y45Q+>NkpV2oNqyi_?JJyVPn8+w%p_cVvy zfKlg&0~yVJGp=^+mF|;$)-#AYeHJjSt^7VUM|6}#8%^2nh3$l<)KmZ0HkY;|M-pP>nZ`P+4IQ-*;iXiF6g08SltufrOA zq2SR7Hy0+x1krN?P=U#XfO@E|26W!%TNzte=zL^IhB$yWp6!cWLMqL{$AM;#<0dKS zhT4o*OGOSnB3JA@Y|phKdG6PptF!HRzG|ymXN&k6mtBe1!1ihJG-@ZB8^i3}*(HKL zqDU)g_0;0qcT`xZH<&xgO~^W=0#}UBUsovhhgknQfqvn2+quK^u`v9y$!pV(#a}EF^vP8Sl_T4E%!6n!hgu%&+g z?aY_O_4DHO8F#9ajHw`JZ4Bj$y3@0lXZL5Mec!Vl2=-74L=;Ks>K57U5$)g6KmNMj z5%ZCh@psG{c8Wi70RCt9BI>{R%4Yk|l*sHOa_9h9iBz(alJwh##Es`4B~mzU&P+A5 z8gsQ~Bg0M%ZocJhK@ZT;q~P6ckfd6+LB3J(nY_CUlO)QB!mfojhYS3w|4%0zROf^k z`mj_cO8?*J2#Czpf4!{?$%YvZ17^*nZGQssPoP$$``Z$?+uRQ~nF$X`kdA$`5=Ni? z6X}7&H1=JM-P{`9qO|RWsj3J1S~~4(e(bQ)eY1fjQP5kFQq4QI((?EH#Q!ogp%;Z| zLQFm2t2kWhz9zTi6My0aTVB2soBG45hD0Vd25#}yey5sw*(`dy!(K(O2g!p zG0bA=Q54KgN*ERX))m$VaQ(YO63`WYS*Mzs7idspet&&;HW>d5+y}#38s*$@2#8|M zcFMDka2aB2QTXEu@47K>9dR4BXpca@-_FdVxLwioLuJb~hNV_sCyb*CKlZTQ$uUTt zHuS$mS!Ui2;<;wNN@xKxHyDb9y*QNq!4>xrk+P)-UgD9P{eFEZY2MxJbk;+@vV}0-*a!7nZDN*ml)CO)--=XOZ{6C?_0K}R1R&Hr}Veh;p^+~if+!I zo#}o>brTTyS)fO*#}CCcKZpsaqR1NrUNjBdKvI)bSP1l+;phqO`&Jnx{433gf~0ue zk$%~}zA-mPT6aE{YDcnnVM!PpKN`DfAQ>;cWh7Lx++QU<9&S>wPrLXw3p_0UQM66L zkk3?7ITGy3uhYWFzKb`&IT{9b_(ATI_dp^M0naffP*i+RH1RF}a{!>A3yde8;3OD< z|HD11%J+}JlbDpb>(7NZe1mu*T<0Bn<1Eke{t*2cK-vLn$4@T2Ul5fNJ);m0fj+Ur zFWU8PTnYI#=ARcb!OYLZL))KQu$%qZ*=BW9|Ecu^xvM?Vt4%3X=da|_>e=>(KxGKw=vWF8~W@4C$Ti9EAVq|dr`M`8nAzvR&H!OI|!>anf8I}VO z^z~pNIT&UCo=Ab)1s@OlEVrQFV_)>uvDX3FkUko_c#O=|k{pMf=T*SY6-oW{F;_!0 zwDA<a!t64Ytt%)k@wr#mtK{=N5|OXl4B$#`;7pq?qD@8#bA*Zi{mj3 zu4mg?L5UN@N0!gf=8MRJrMRav#g5hA*N6@DyT$v;1>f?VKg>~ag8xo`qOcY`5Ur&$ z9cee%k*C_PiLc0}zniTnh!~PXt8c=KFeugUq}2^dLGqYDPG6BV0*$z!@NkJRoYwG% zoG9poY|`&Ed0}n@sVxvj@zOVvdVW;Q&u!Z-EPfi|v#USn3I&>`g)Qp@!@1NK$q5vQ z_n{r2Q@3!ePOIB|@L0WgmcdV_9*2@Ba+nsG`sq^)5f=UXa@0RVLPDhOE{gK(R%U@& zU?*yMfqU4e4?_0eZ$&^|Xi|G~h__Uf_O|_*C%pEFfq;kA?`_T5)sL(?YBJ~u)6s=i zo$HHe%{_{=ID0U$LxUk79!d-)h6?_;<0!LGRpUhg98 z`{0Uv0uce2>YWQz+1!<=D>fj6R;0mno5yHS7FNci-jl~Zcfogq9sq7oSZHUY1~wHF zTUVIWTWtw5)keYOt1UzVyK~+mas9S~{+cuMK|=haA|H1O#^!k8FH&TrwnVst*zG(o z9Vd8I+lBT*Nt_NxB1Q{bJnMe4`UdUu`UXRDhPKwo4{<0+LU27+Gm}jv0O~mxh6bWP zi)fkZeHi|}3OB{_aLF}F1jg;9yfeZ%`%N-nAmUedrg>y_iOREmahIE!+dsS-Q@q{a zlUVh~o|L@IlUJ3?4TE6Db%c!+){gx9lEC|K^_DAoOqk?5$kTrXTo~kUKAt`%hkiuO z8h_l5YUpja-jxyw`o>~238J0GPW7>!S!~KiXe6jKMIu%!@i!<@a zLJdwhho@-B*cqZg^WpzBA@+f@#v(DjUJJNCAk;IB%bGbd#o8-qF4?w1aW<@<$(<_3 zLCYsJ03ZgCSWN)bi!w1T0`El;Ah06XXU^~skfc`xNf$3e6gKi;s0xU`Cxsh^9N^o) z0ib{v_Qn9dM=k5{8hEH2J^$65M00k6yId(yIcNKJ!Z8Za{zkS;>Es=7JZd>Yc;*{) zIKlTuG?%`N$mdi3!dj3fC;9;8OX(JaXSQ#DXutJ488{y{+&3+&sv$Js(GuR&IEW5H zy}qZ!UP?uO)ijcktDw*O6Cb%-)dHi&bF%uf#- z^9`!`PEvIv>$ANio~tHy4R1BgTlVR3VgQr|>m;zv3wlpx^DOKkkC(asz~JRuR`Syw zzu~9#)3;qeKe5>sKH;*Og9be_cW$X9Y6`)zSnV;Wa3CA`CdUss_~#Y^_mce|eI^hQ z>*}W3gxPTizTOHGBY-HRT#*cdaHXR6~a$ zrYewHGCCi`L=sQGJ-ZO{#y9tvXeI*v=@Ug>e;IqI2?d3;VtbShi7t^ENUYu;sfn&6MH2 zjJbo-Iy&aLsjwfZLYtxq?EHp1x z5n5E`ZM7;T*NGKJpTQRfx&j*s(W^&eYX17Mfh^q#A}7)-6~{vjO6-8K8@>p(VOOU} zYkWY435xjuv|RHnmqlgGDo+GL#R+s|x5pL}P#n(k;q__Hr%hUX4@x9^Gfh(#A3B#2 z{CFAEUv&a8`X*yiY(lr7_0>iy*--D_0QrF9;r~G0>|mivgkeI+Hy$E(J>SPSgRe40 zg(cUIM`tL9zPLS(J7Tz7&&H5e)084`zp`12!B1bvZ-{wuo*-mstBt_@X=W+#NjSQY zLV+&7SsGq4T{!J9kX|RCpz!82=<5JNW&CkAt&J{9uU{W*<{#3ewt(FzXk2+=1f1Mr#hEfl)^{C4)G$Q*Qhd(6W9* zgMRKiBlLhcsq6L`Q;xW9!}OEfZ!&2#zo?dzp`i{Z365D#Fr~Jq9yooejdSyumls=q z``Az4Uc31VNq}*wM@M(J`8<<-c3KNu_Xr%d)}+BrzC9RNcc#HFUfO4sG02`VU*zt2 z?tXCoq-$-{F5VZkuE}Z<~W7f+bWP zSnNWfc30Qgx2M?WQIRLe7`HbI^ORGAz9(zGS-|0f3|izr=}+^o3N9jP{0|Iz6!nLH ze54!ULi|y5#fNSv%h(a@c4;o9eSf(*KGSGyQb1q)s=>@$aP|pSn~5A=j>6)TvVpBa zl%{RnFL~N$1msEkPSiTo>LD(kGIh?g;udkupJ$iZScwLgnt{+M;- zGb$8StE)8Au&;{iCMn%%k`K*c0t6EyWod`U{IvM?F-2G7t&j;TsSf~muYb2W59iG? z09E|ft@V~}E(s&bw8s^ZJXxb^{Y#dkLIWtl!*L7R4g*dXFY$XU>F%$tvS+jyQwZj# zj!J{v{qg1!(+GAd!N~DH8J^=2d`O5=@VCm%S^!K($I|gV!2pWz#=pf3^h!2=4`8wnPz8bSc;1HnQR z8qmUDcH8Wev^bm#?ZVtb8zbapfbaj2sAeL7>9RXNGnlIuY%`9${A9JWxzA$2uaz~P zQ(%y-9$xrv_zJT~ua@Na7VIsMlze?OVYWV8d@rZY0sucyGX9Rx@9uPQ-V?wmt$j$V zUROuX>p~{<)%n%bjb-dJt6L8uYg9rpanTyFw+MZy|Y!jJC}*>e1gX$207*{0N1cP#kMO zv8Gd(yP+k^!N|}5{!(j3UYuRcN&VB6CBMVCD`iRjf&02j70P&ig4)4}`G8JOU%z7JLT`TQ>R4jm z>qZ8~&b>$6)G+rqIp$~XcdvHfD2ywPeB&?oW-!=*b1|Dv7V;)bgO>XDd#Voo03685 z9~OYY_TNq(K*5Rk;5V23ry)6heZ2;EOlxkl{G^fQ+xomZ)6p*~5-(!Uz2@r!+x*ec zl+?*3KhWtlyjL#`o2kFOyu3Y{40R#gMWw{#;_ODQPhd4CIJ3Ck*^$;uIeQrr_r$Jy0d7S-{SQ(=x+F-`zuLBXHSk^ofnP;UTjsnzI zlWfnC($!*B1m!f?O;4$V(5m{LXt0y`0rz;D0v#mWMcX8{6Iqs{kdTOuI_s}XTA8IZ zNBp*~L^Twe0s5BGAx}jtgzCuV-D^mkDXz0ksEU?v{Y8pNo{ikf8C6Q*|`d92{B0z@p_bgH%`h21(>skBYiqX|0 zt)zw0$d8gW&Wvl?Xfp|^w=k)&(qGYb^fB+haA`V}qhfMJF1{-6ZXaPIx^mxJm|W5+ zpm~-1`dNoR02#5C1x%%c74{`aj}x4MdxCmBk-#BY+P9VsDE%u(Tyo_3z%O6!NAj1DmCJc)ez61-66R#vllG#SAo_tz_!zj*By}(hIG93$v)3-9?E4h;Q#e2DcJg)^lKrf z$NXpB(!sZ$thSB3LK{v<(BA58&>Xa35$f!gr)gl|-EchL2IME%pkeCK8PjKe>}1+^ z3881wD9Mj)et*nfXMf7}`DI#utgy|H4d>0tJD_)rAQ$l;?2>QkBZ*Zi%t4OG;LQ!1 zud$x}KqL8JCdPq@^h^p3c()dn96=67;#mm5I?GPfQwEKDkx{crFcPWnEj=F=_zR7w zK&0s6K!;_YmQ*-{%~!sp2@-`270gxs0p21=Dq#K^zK-Ibh>{4}33z{x7>E5GA0@c- zv5duqXaVhF`G&D2{PcM*qZC0MA7V=&#C$h_(BqUmlf~$F3Bs?BV1@ z8KzNwZfm`kt2+MTr5NK0(^S6T_HX{ywH$UJ7?gX-Wun%d``qg3p4vcBS4S(1839y^ zi1#|_8m{9Fiau)Ica3P=GA3QJ8nw-~8s#*6Ulo6S0%k}^Gwb%jQk!d8Rn>ElXuwon zjn!cQu#aKTsKMZ`@*?#|CsLleHJLlj*Qw<>q2%=oz}%z;G@^R(4G9}fvp$sn%w=6v zCMzK{6kQ)0(yh1nj!v%xbmY;;#PLf!WTf+J8>e1xo6-_^$0a-OUP*>syFWSEnf%1k zAcM?my?AzfI`6Cmg%CLGjcMWL=rwKo>Uhnmmkg!~MZ)a5`=?o>nG^6#+>g0ytmkt( zCJN(;HiHw1SoH(C!XFw=N9dio^oTB=tk8GWHipsCikAY50rfih z^rL$IM>2t>O!3U9cXfSKis)%c*)TT#(Ii&Bj@usjAKnqP0zM`gl7aZSDh_J}^!bx^ z!xt32fcX~vhsXq9c+6_5d}|u7Rzm=vhTIxE(HEwH@p!;RJW@Bx{VI3_$-^=EzPF6g^faKvjXJhai;0?6-r%)|8g*zz8Aa1?Sk~?5@_{URhj&G+}$J zap0#r8q(R5CXhh$p#t|4!$uulr%Jhai!d;#QZ0H#!KwqvdLJ(fO0bsJY?zNf7)pus z7h&tHD!{{UO>kOhYVuq^Qrvr#){%qK*Vcw`7x-c2&EKJJgOFNT(Up0&??s7M2OEU7 zmdsvqyxnAxoB@089j~swBUL@%bl>+Bktv@jTg-SpvzDz?DW!H0K%wKXJ3hUM^jk z>5&i;aaqnoL0Yk=#^$u7`7aL#asT-d2~jKAM7KBS79DHR2Nb0o+D&D7xIpgx-TOj)#Rm z%ZYTE)Y}jHv%#t~yWU8I9aAdd-*i^zWa19SiF3c-n|LND+c3}HX?1Rv(3Ou$PTjOm ze{lWUY$w2NjtG|$FJTk1!J7ELh*m1MmQev(7KEb|~FiNf+2^F#Gl?Jl4#hWJL+^=Gu zJyf*@f=s<}T!niDjqAb{{1)3`t}5@DklWt;fihAOR1VjXLC{0#m;+6ML($zEqnJJw zJhiOxuH!EU$|x!Sr((JQr6lLx_yTo?;pu>ajZK-f`xWz%*DdYQ*0`MQN(@4NbbH`B zug!n?_{Eg~!JWhX6e06MyW1ZlYGBJQnq?q!lI`Y^miu)-g2iN&B4fhO+GA3l#j)b) z#NR6}beCfpUW>D*NWf+p%4@Tavg!%FgM4bO;b(^2c^#r=UcS3VAUpYASx?Y&8|bQe ztS|1DbcQmXM@K6K1qF#Vxw}%Ax*fYxN+4m2ekbgIvb;`5nt;H^w<~f}=daEEMIz+e z`|*;jqmo*6R(+NbymR6R%Qm^+t=6HbzzA~ zh8d2D&D~kxc=_{lfSy#6S-W69E8C!j`F@+L;|wH0`CyRg6wGRf!77*!jIds9p=VYC zH_Km71V%yrFnCq&&CTOqT@sCT2MlVC zPqcgfCFJWcLZRaAJ_nsXb1t~43m*Us^k+w6^)`Jm+dncVJ!W{lyT_eXYcYYh=X8Z} zJIzCM`O@-dj@;|<7)sIHUy`3SXN%DgOMlkEhS?q^H25Z8(q%Z@QzYZqxrq9Pl zo&I$(QI73Ur;$pwZ~;2TX~PBkVR!DJvBeo(^wk4Q4mQ@S)Uk+`m&kelfh#-DlimLt>|bk_*S zTE(Or(J%|dzx{t45=wL(bY?{MB!tkQGUM6C5cMySd|1jxm?Oh4=D|^pMA?zM@up~UX{2l%AV`<6dYU_FGo{QfyUxvOo&trqE>4?TfDwKBY&#|$qQ)`t z@rKLK6196C5ND0piX973jKb&9W1Zgg^W52)(~XC;>n-JzqpL`!@xA9gRkKjEtV*_SKdKl|hd5BH(LXA_gqq|5Zx z7)CaR5S)kBG&p2+v_yf$!V z`epT;>f()!QdVyA;}B@-w43RZin`xb=ky%yISrji}$kvya4P9{fR21N;XW(1B z5OZ=eB5dk8}nK>(n2`ZEf{X7AijoBsWQ1_{mYh(kvv9~6@U7V+; z*GKAUX=t-KKpna4eDv^YLb%h4xFCi=}s z_D(u3;CF>>8|>Ol{3V;0Xl=IVFjFy_t=#W1=iy>n|HP^;-ic0&y%*czlHDrhRnG1hZazf&Dd;8WW+X z5K^lTik#r`DjG|Aqh!0|caeQ!b*ohRmC=IHJGJcy!!7;Dhh1Kw!}k0#zu5Qkw3n_% zmtq#o&#Me@SQ?#9ZmLNL(daImN&F+5JxD9NJu#J@e*7#emSQ60FDRFGS%77+tb^Ay zyOnS4`qvV}TbVYB!iBKFYgbg!y+|sJ-f7fua>ca=s%@4d;u-t+=widI_3bxScDL!l z=EYb7gN2TR>yg??fL?w4eX`Zxt?Q|NF<}qRP2U(+3)!2#rDM_Ir<~IdKkPNYeXfi* zpU&1X_4=|@r|jJ~yMh~BcI@akPCIjf?b3epqs$*yj1r|b8|WLiPv~0nYY>TP-dxc|FAap!7w*ra zQ(c~#ji4N^LD_?*?ZB*G&gWlTt;cfsUcnxO-H#$n*Q3Og-QV73XfNan2hN4#2%9I# z&ig!y=zngbOdzaCt720(?|j5E-obR~mtb_;seqb5EAhHGiZq9a`@U&Ma@)KwY?rP~ z3o*b0KAZzg-N1VBRXXf8&JyhIt$_vL%p#z~R2%ct0-`NZHP|v|wLjxK;DC)nbrEVM z5N&xEO2O*md5epC9&R;1HrMGAQdHK}Mkz!iz%&ooTd4qSFmk15zCy^4N~g&?MksAZ1gq z7dkO57abe_QABRd952a#c{83cHo{H%o+F!vwl|i3iOqhY@A8=g+0_A344wmC%Fcy7 zZO!gASvFE%T!)T*vpYdQX?3?isb}(d_4j8tUDCHHLAckSvz!B8YgQlVrJ`Tq8T8Es zg0)I7?$9^57hk#xM`TO~zg6*ynQ8q=aOHXC)$?HH;0@j<+h12~iAmoUb!W-Z=`Hbj zn9;w+AM+xG9ea-qaHJ?5uM?K;(0EXV!^>L%4*c#U(Yg!gv7+eIP69?+&G9?7}H#tT3LNo z9N{&6`<9xGP2X;AOvZk+Gb(9lMkUr*SPWUDnA4VRnXp zUtr!yDr<%YmUfTWUp z-oiey8uqQj%uj?!M*E9#nolGWJEVvT&g%fJOBuu>K%0(#AYmB1hHAGBBk&f~*j$W!G zc6gBC{)~jjC-b|MS>S$;AqK>Rg8*Z=e?x#=J(Dt?e;b&JyAY-36Q)#wH7lo z^NsuY+@0S(km}CQ-8-L(e>fbDNcjV3`nRh>5G-mY03o0|dO-dISS~S-?0?T?2T_>z z2@`**rH&4%;B1B295jpl2^W{`uKOJd;V_9b{_4fq4wWyl`dUZK`xEiFqOQ>&2+=E8710pBPbqNdCydmIeM9-l!I6{NWs8J#7+R z2y;FyUz(|o9!Tm(`1CLz|DNxesjk<2RtiaT%koT^3z`u|e?_ntMyJBxQa(>(oJY5? zI*KPlpqq0fG`;qGp0HeCU4dyNPh zW&ynLt#hm=LyYo+vdc56eAR;WQBQ_czcq>R_G3mj2MSGt zahom}0r%%6nhWMgX(0s&oAyfLrRx(eRr_YDjNMwvY5GtrT6qQe1?8_FRf~&@x%r(f zbdnX;brTqVYoB*Qf@lN>1CFUfhR6yhU$^OGJCsO}yBtqp0zKV*+5l*#BGXBu)3r&} zfqC$%LJB^qT$V<85Hb7~;fJjzPE+EHf@L!Y;54p)%I_E=2EPU`UnoUn$P|@*>_Om1nyS1$a!EvN$;wtsBGv& zbqt_F=*19`jM1=8FC)@dk`r5=<3ob6^gUlb8%$~L>torTazly08pR9uqFqI&mz(3kwU z*+g`6$Ln?pyZmN=TqpaZN`E6yXK0!m*5bUE#QurjI2}zCix(hj+t3} z)%oE|&jZ9a&f;x;_Jk1OA6jRt%=TB-?dpO-VN#boFSAV}2l&GS#o5C*7Qi$K;Ag`C zf+xn{hV3iJr-37%5W^J?5Jw9cKuj(CC#%7HMxM0x%KkY}QlLH@yjBLj=!N%>nkSEt zFHS7-Mu+7bE@EJVK}?nBCY`X`Llog0#ht{47_~6Yow1Q6LX@)g+n4%<2?ts_q+?d{ zs5&=192+Sn6M@%vX-f3l0E9u{eO#DLVE1r41biq$?Wse@*ssu2+S(9%9Gl+{+e8S|&UX9+% zh-yhS8ieu8mITE6ADy*S`}twn;?FBn9QPG^<4>^hCM1JG3F!Jt1d_QeS?*6yO^DLR zz8(>b+9!C6S59|DLb$}IuhX}v`99>L(=?$P8FX4@-H`g+u^ehydsO>GuUkU8v~gnr zE=B(T=MsiKfFva)fj`}Zt3Tw=i9y4uBPI_Ja%LlxG4*jm;4a$c==y?3qZ(Ysqaw;y z=alQot%1gKXomT=Gy%==@co4O9bKIovA$i`4@_ci_abwFr36CCM|NsXdi>gZw-6SM zS{>v(h|Qrz=$Qa>bUbdJP8Q84i>)w(3Uk_{7CK{7V*=a)FLj6%|FVxta!KGw=Uqil z%&6oTf1_z@TAm8KV8ZE>15qJsX}!Sjy#Ij~`BjK8eCK-oIckK+#yxi)DE|RN;^PdEg8uqg3;bEv}NFva&KR8HC8$N22_;h130J z1L4K`=tO1H!oVn@*tqp#Bp^AArg-JkZm0>_6B&c+I_wI}%<3NTTI-=V1fTev$q72` z357LzKr)kF;%(?(%{TfpbG%;;&EH!5nDDuY_xIY1;uY&ztdD+X_b!gb<>gsEvfVz& zU`g>kBr07fx}^&vzkZ@x=#bW}qU5hno8m0NTzm1JY(xvnDV~;JrJB#4#EwHn+0V|n zc-T5Fee*0R7sBEjP9NehJ5Z!Us}4Mg0p1tAa5E*3AP7x%zwKi0F0SItg8 z_p;qR&#v+_P!Ebc*?yY23!k~?XWR#$W*lI{^{&Bp^-S5kHy8CDQ5qE3`;M_9wN`i{KkATPR9xUp`@Vu* zRaJsC_|YTE{q~udffJ*bdT_~Ti9Ytd_I-|htKiKc_4UoPEf?3;=V7}7@@FJia{m4` zWe8>_viEhrx`+v0QesH}6y}{6k|+u!ExgRzc>jcbQ7w2pSo`Fsucf86Z{y7Rr9?Fu zBAGS*gEd8VS8r1>v@M@xkG;#3c~$Pkr=TtKR_GU3E_T(@-5?L2&@m!rB3W_vY7VC7 zINp}$8_s>HJQT5?2U;~USk*Nir`=9CisHPV6^AxNKG$tx_3(2$ZLBLD^NgfdNEaVh z-1$9Hf{66O^2YweXY4l-+kJ5dYPZjB(m9_$|GIXiG+OCCL_+~neJ}Nq(duz-qtBtf zr0CyRuZ_{5Rkso*o+DR*XtTFj;>%s(53T~6LXIx7hC)l{uLf!7GtO?}Ze17lPGg`V zU~1_S|KOZ)@-W*IGlufKAmjdlZoHQWs9dYpnhQm4$$*FCi03U)2IIjiuK|Xgi_zoN znznOVgBy=xPu69x*@7Qu?y5IyzT)i1Kd#nKL-_p%omae?M(r8X&o9%q@Xj*=E8IPR zFqq&0Ay&Pve$bGdRF=j~@Y-Lm$VogD#jw_onJRDRU(s1-K|>$&k6Q&z7nJ8SYP3BX zqD=bABbUuI(Elab%|lS=J$H$1${MHqicQ0+;GckWEV(dBs(IP}S=?WLPaz|y^Sf|&CG_j3xAv5&!b_1)+yU z28U*hsK&-7X1ox!Ua_(t@PF}!iA2QjKji-kpW(?>6vc;VX`zvp_8I5uKVya)1Qtq( zLOD+lFsIeR?{&jD>|8O>?Z_32c7&ac7Fsxxn;PB{$r>-Ym&ajZd@BuICiwg8#8G=I zh~?paB-RUHRoyMLBv4PBs1kVdL^(P!*C(Y7>%d&Z?}Y_h<*%8>#&k-gJobD-^or}~ZQvpQ~?|0VCfK3lSZyhH);jz6Bu0cW-mxGnAci=*S7 z{e$bMQ7`)Y`*TZBFKCvR?ZH~WqB zqU|ZVs_Y%$uTL1E;zNXx{&@WDBZ4mcBI-gp1MGyqgX_bz8(JR0(jjP3fikLJ)ehF8 zBKQFK3If9i6ZgTPY*^zVJ4qG`cq?T3z{ggfrQC?lr|(qp!xH}rKLq4{v2-jaPG&0s?x{`iJ-WQrbdZQ# z86!SIHKdW)KW@gQv_CD^owc47oNk-TdiZO%XaxF-GrCuMuzjY2L>yaJ+@#`jwGF2v zdjHMN1ch#+?S1sFzNj~fNU5DK1DzMrvWylNb@PVo&bi1Mb%6*S`P;z;@7WUOqsMWI z^S^5ka>j)MxcyYfQyv!wto#>>8^QUD;$*EiD=I6a9|h%E6x|Bbb+ru#q`bP=Wz%?gTH?)z(bWF z37DpJdE&_eciD`D`}B8DuffGtU|$5#KA7?F5dvQ5H_Z9Vb@0wKY~G6=)-e1$xeOCz zF(JTA_>^H4ZyK!P1uq6sQ1RT4l0j`!JRbVqkKSr#`wHa~b6}MNV6~sI*MYOVW>UN$ zWXSs`?!`CSb?PN1>ttSJzKo77XxsVXMa{S?W-E!-U%EJg!glO|>*mI2S22PX{^N1` zbCbK54Jy&Z$w56{RvRi+Llb8?h=Kw;Z?CE^oO_I)Fz)_bv3FTJbe(wO#l1P|#9n1_ zgOMA0FZJpn6*nDvcg?(%g|Y0-wjH!&Z6~P4L$J3R8^+)NgPAcDL|ONhGsdl_g6C$h zbF9T4T*k}~Z}s_`6VH^UWPR;93G)LtpwyFSGB67(>JO8u5xjXgfeQX~T6hI1SrT zpDPNZ&bpxdq!}V!LFVt zBe=^TH@HK8{x#=#4Ayy$$8s5C!p?Rk(4MPtqrx`_W;%e}puqizh0LyA_sh`tK6#L< zH{_Yk|G0lMpn{NKro5$6%jb?5{j++RftT6Bkid?#(9-<3PaOM8DdRIeU7<2AcGg?} zq_ziormSLD@xHJ0CeuZ}OqlzJVsG!bIwsAD%AGEx z^L3^%u_>go#(%!%Wvla;WGX)V721FUwCy`WS!EhD3&y-`8DR`ejeUpft7@x3e;nDO zL`iUZ1_rw1Bn((z9scQF)QUn}AI~&-AWwVVV0uvq+;wvk04|YO))6FhtQ~?c=G)qK z+j@J^A|kLL8kLZKNL|BEsoNWmBQ_l+v?876yK936F%3T|-f}gbcQHU4KL5RHpNy7< z+w!9IkGT>Ne}em6Id&ll_AsTV!dhs25@UaAWw=$&O^qu&&UAsrKon!jtho||GDmSu*X6>E;~WqB$@eW>TmyS&SF9so{>cfXmJwKLvHo>kkr(r z2uNL97aD<$7ev0+DS<~ldPKOTx3ZqrA zKx^fx=<{8Dv_}DE;fyT9pGqh#bRxy=95}4>g|svi2R4Lv^q)(O@Z~(;9j^~#^KNK> zq&3-LS$jSuH``#s*y6l%*e&0!(QMVSIp5UYi5W=s%xl@M`s6e`rpJ7A`F>e>FM*?8 zlLscdCkK*O=`^MrseoR?MtPGqKD2`V(kQS7 zr2_Ax;bS5H$=Jb)2K0-k*>*rd_xm5`Pc-?32`DKqi6<1{v~2sU3A4o*>2N-I5#qsc ze2$FZ+ZB{pQ7_}&snl^7TPyuHnR{RG3=86D5B4h>?HcqoYl#t=2Y3H=@Euvz-|70A z2pO71ho41N`**F!M5jml?_Z+YI92$IvuQ^6vKX!jV-;%t5Z8nLdayKX)Qh7TjAhC? zE#|QE@V1RX6%SE|@@5YYY=O@z>oFIm<+}GoC8_FMLtfBn@#);P-CdJLK?-)Ktx$qrp(UC0iJ@1) zvC{h1w`gd^c#W?SsJ&ioxrOB7QfKZb;!YeoYThIkcw$*@v_>IM{7fpywtY{)X{j%% zl7s7+baNAQxWv-DVCFHiuymf{j_uL90gl)F>E1Z9f=6SH;P8goUXw4c<7U`$Djizk z!)GUPzd={3d?|9a&V}<1n-AC6cXn*C@Xd&a9=O)4eL9HtT=sowTwLtz)YP~_kdy8% zOoMEt>;Q%$wqs4m$#w+TzAlbmalCh$I+V^;b92PpG+job$ZekKxTOwTT-Z^5b}kg| z8yF$8F3e)=b8ln`zSN||!fHc6=r&>k}j!D4;Oj3UYOrrh(9gd=L5p07! zP#>aU=+}+(npn-&7fe_q-ySux4aCdpD zVefs;xo^C2@BQ({=pT)=tTk)Ss`~2ts$LjazuY&V5bw)-rln?~-!Zs^Drx6B)F=p|1y|g~+tgJ&)p`@j?c6Kg(B9r<1f5Lx zk&JIpbryI~RYQegz8;P}EJOjFo5hR;MzL`241?vd1$~D|g-9=D} zN~JcRZYUxIW=zoKbnsLP(PJ6n#e7@${yB_L&g?tF`@L6iZ{q&Moh4L+X zaZw=nyLlkIO2(SUu(}2eZLRk+=z+DPq4xef&?YEnF^h}*_aLN0 zO4uzuE$FL(cATmcBlRwf-TK+eO%>rdZDkM3%&=Ed2|w`bd&>7#eccw|bfivm1DgN3 zPz6!w--^WKWb|?tX7ovfk@>k6{YuoifuL>oqfbUgfkM%{*ln8CqD&uR*6Fw{L!~s6 z5q|ypm804Zsv$l;_ebyQl^FG1L;Jzjcu~Hd=XnGV$y1Qw&X6|@)7p~aM z$A$#6({{KJ3-S`;;$EN59Jf9UrFjV~v#CF_k6xVLAp>DkUm}Ov_SY?TD&mYGi{l@* zTcbaJIxyLVMMOvzXmU`BOph4Rzm_V~V9Ul29O`|zl?V}9A+sAC1j#ULc$@ozueE^* z&zNhjRkhek6lHIP`G6d3Xdv*{qp_hwJSw_5!((flz{iBF#l3|PVtP5ZkRsHreHR+U z^%6pgP~7&--yuIh`dk+L{TBuZj`8XxBDldp^LE7~DG7-cLn#r#J-$uM*jy%Et=)}( z>ahiHP7Q43Jb$>B?L{8uv%o&W%zD1o9&N^ISDxO2<(P!1v7(I)TfpXIk@lHgkz-;5 z+FE;$d$#SDr>x1|1>DcQdfC?c;$d4!*&;v7k;A2O*Z;@i8)^BPLXPa>wqYeN5e#|i zcLb9kDAq3j@TuR;n|;#ZBHU2jFShk00?^EW)LML7yd*qaUS~pRE8X}JEIT+=c`d*9 z{j=t6X0>QsFnJ>?F8b#LrU#=4Ws>hP1)0~qY-Wxoz1Z`WP$C7se-1N7uyQbFWwRVN z{So?Kz%J7@@J1xfA$lO_kqZN%ywt(Nz7`bTFth?~H>f8jXNHoRGi@s%);EAo@PKan zc4Bfq=I7_GqD9{Kg2`&_DSTv?i@ynM&*xm*IyS<3HwThvd4N$%Ias|ot+TbEm_mE= z(_151Fv(ojVIuxgOP8rPdiv>Id9rm=749V147bwg;9qRwKMPQd2ZbNJ26N+n*n_PG zU4xt}{_X{^d@?AQK=_-T^}d!im+?c@>zcTAl5pLxg_mcWayd$!DtSZn59*&ki{q5O z;&$D(4hY)t!bVSN-sn#M5tvyCqqlwUnWdr}#7Uh&SmqXQ5E8tC!buV<0MXK?*!O!;K#0eIheU5>F5kfGac3+MRZ0Eg* z=%qiZBqR^T__SuU>fFZJlJyev%1>q0Dt9*IpBDk7I`JCHRST{%T5#X-CQxPgsuzqj z{)P`^!kfm|Xnq)3Jn)-5$4j2!#+v@}6t;Mh$eUB>*zn>szS^9tMohd}Hn=Ud%#2~A>AUA+ zU|@jFbCC1BIK?B8_WZ`|6~X(?4$Iws_jTRFLTyO2JWY9FS62=-x|`?G`XoGjmEVQ2 zod4Ia^uUr1;^ly*?tGG#qSc6o%e)MpECs z4Ec(_K{WmOVjcB*vI(6W3UT?M^J)-@5(yHOy@y0)moQDsfIs~5*oT+q460c4@w5_# zoL0hd&4rKy$_+q2RIX{)Ak+WoPytt|n%1qS2K*4=2XT*o6=2;AruO?r<@_B1agWmcZ z8}Gtpqc6~XS+N(}I@+u#cHD7^_jKzN(^!6wE(>RU`z%KfxncGW!-IfBV)VM&ikPeQ zzP+4jV->(gXx}k@y42yjGj#Ygp;;q8C@r;!SF{wrz?6}$C6GT?gPg(qssA*Zl#8u% zO@)M1B@2BY{FZ>%GM+O!nSP_Exfcr=aC>Gnq~y5t%am5Z{@SphTX*aaQh30sC?m*@6vuAT;9 zITR2??Vkw#5mCc3KioxvB$Z!Sflyxtk0uX@vT{Zs1~xJ}*bFf~R=}nbSQS)({?H2R z5TS4dO*%L!2@jyQ-G{z@_GpoMu$*uylIjKya62l0oJ~B+h>KaltCDs|YuT*q#SX%^ zGbsA#H>SHaRj#1|JG}NUm1DVLJU33c5l1n#58tX6SX);x3?*= zYY4D>O&0N@HeS`2m<`|nohQjV7~FBDd8QM249G!Sw+vKXyae69Xs2qH&>E-OT=J*y z>q*gP!tRKL|?@+B> z-8mADC0-N`r0_|*vap~WE$m(anWS(JM(;b^hwP>6kA6PAzUsv`c%otlG6uzJlE|&S zt-2#y;ny3x(|bQ8@54#ks;O;Oc4mmYK^S`l0is=f_Ts8)84?@76uR=zoOI4Tuzff zjE6=Jg5OffO#l)Hg>eXGHJx}+!Ae}6xDo}{*aXcfQ!W?$_97t^h}Se{Wy++#yL}po3Ez59 z-2Z@2-RyfOr*CfHm%PzqAOWJ>lT%g2URhaLCWY^l3#dHh0jLZCa2VBxC(_b|j1Y3I zg@r}R_Pe)o0Ad3UFy21C8oVCMVg#q8z{D@11DdmRfJ_@so~;fT^u)yT6|O7X(Gsh> z=ih|9-{LFwCiDY6E;CQ@zyDSDL{B9_aaOC}HnF)vmj>!$LH$CA8GRNbH?p&w@`hXC zcUhC>GBR|2R&$cQ8w-lmLU$fSl1T1Q9B^bGH3$K#KvsD)BMUO$9*9GvyFn_2^mN9G zga~Go%a6()mtG+mIIrmBlJfzKFD(~H9rJR9pa>!KYcpUlwz=8JM;(ZT=((h;Nvm_O zwSXw>?U#4T;Pk8Ja_ zZHWqV$hWeo84?{ckg|Z9$?Jf8$?R>BSU|G6Kjn?5(Vc5Jb(sYH+^}m27<;>eTzPxSmo4upYg1d+mSL2-e5M9Wm+z27H|$y8z>g4* z&7nzP#}faQ!OZ+dj*=U`7mfZ0AHvG;3Nk>UqWGaD7znDdHNbp{3rX6T&+#@OdQ5-@ zFUll_Vd4&~U&lKLw*6fv3g~^@Gz6?TE4yta;FR?GAOg<5vfdH^=lk*kQZ&Qf+cHY{ z7qU&vKSlM|1)5S83$df#quh@tt0iFsbD0OvOq^H668bZI%mk`EicSxtJZ`@_v+}-z zla@rsZF>lFS_a6bAEX>@>jx_fq=ff(Biq(s=U(z>J72XRbiMgvy2AC0_Jey2wtIGQ zvFNDxf-7EcBY%)4hb8lQ`~-XrUZ4dRMTyrsX(THZE8^5-N?3WK!yF%ePAvFA5(pNL zHyH`F&oKN%t@HtC3f|KOWi+Th@b~k&&qB(p*ONldnT~M@BOOB}B!j|o?o#wNLZS2 z^fm2|NH!_@%#-M$RqRNYZa%#Tp_;o%e^(*cfJh*vu2K`tQdq1uOa=lbDQEi z$sVhMloXF(q~8{eNW5aV8_31EK5tUwp{5^=f!kF8ld%5V`b04bqObWZexxYi7^*Aw zVFwpr&^$kKlu{I#j-?Mq>I8G??{7sV2BX* z#}(mKja6D^f4F)ct}b}MQ@(#k$w-`Z>yiUh>36m%5$Y8)(Gk|dU!o18Fkkw!goJvB zcTgL#+k6Vu9!xO^e2}oquNG(9%)#-WiuZ1(5k^E zs^@hyeREshyl^LlMtt-vQ|c8KtX`_&kdL6>Rvy&*)T7S8aJ7I_{lwD&!ah%L1Z^D$ z`#oUHt0BIO2L-P#lZ$bpGRQ%#*ZU))ckQ|mFuU|B^@Siw$Juok`h>Tl;;6ofA*~$S z=490d_+ZiFVdLfkV2!wWyW@hPU%2N%TTBL->k1e&++SU*2_dc|4U%{_Zh8~bjo$bJ zrLnGlph9$NZ5RLR!Q<}eF8H9)p zMFILEkGG6KsW>3Cj}Yy`ihLWS@HUsG{N2CTOE42kK8}A-*P>@WI&<3M*Lzb(F#efy zr%*?*SQt%5r=FNU;Z?Ll6+V7F?7FgP@h3o1W z8ojBA|C~VAK926fWoJ$Lvc4_iLpb&7UbA&t)=zm~!9QQq9Bh5!bYXsEe_WnApACs* z&|afaOH3ck=}?&IKC=uu`YWP>c+J!Qph{k2zqUQR0(z!vR|PfS)!+$W7~<(Q#am2O z-^7rvCI4Xg(LK7Mf1dwVT7Ix;RkUalga-|tsjvZ9v0!MeVyz*vY=L{(9pK;^51YY@WLO80o$dCx8FKZ!p-l zUNAo%8()-ZpvbnLX|eI@zW?Gt3Kr??J|RAy;?_Oj<>mG2&cX2L3*7B1rQh9~(Sxbi z8mNQuS63K;plIvU^^^Y1S@rJ+J@?liALtiv^0ZM0!hiyhN)lv5Zk`8VS>7iXzfYf^ zE%zc%GcyEy`-~;d(Hk*7F1 zp0FyZXYAxthBVrt=F-n{Y!6*zccjS&%ono4>OK%0u{fW-0e!5K_0&~%J{R6C$dc$V z>y40?ZXGHSYEeYxsIXj*%GrAD!M%!?n3QDhVfei!|EVC7Mx(~$nD2s&L)ZXv@n*lp z=jsH2<`p1{aB*LMpjbuhmVp0D1i zA=X5gVNM)%y!+*2fx{GH^3bXee;hrgS!zjwGIruLmfR^0iJhJvIopqxQ%wW(cT&X$ zL?U^-r7~>yU%n`dL{#9C^tllXRG7=$A=kOVELzS4t;-s(f-XHjp%w}y#@}3NJDj@R zjg#f<-AZqronKC}ICgmSxqH(Ar1&16-(}Xq;E2peB7`BuUol5PdFwGYEa(m{T`hnP4eig{Vs;KOu|Oj91`VXR zsjWKOKdT$-6Ezt8?kM7GRwBajxCv^(4LI2w*g1k*N^2i;ZEm)8rNi9Qtg$3I__)XY zznW;ZEoy}3M^up;BKAgvy~VyiY9p*g(dj&&S34x7dnx5bkjXIzC>cKHF`(7m)J@!W zV%+&N>aVrDb;(wt-W58b{zjBiY;K=e3@o9Gx%nI4}O2N0T=N{ z!Vf?cm+0)s43y853UpOje);WsmW0n~Pb%065=B1n+CDezj1bQZI*W}-47k{2Y?bxD zPFD(^pn11-wsYWab72KLQ+d?B`0!2Y%};!n25Z2z_n4j2p3+eteoBC)!vzAy96gMd zePFu*a2P~@_s7@v+2az!0(oedPwQiIuc0^~fN+C0eALxrLI{cyP5Ri7Fyo641S)g1 z`-cnRw_FSqHXoznF9N>h`R@SHP+-oN%Tnw7FIoy+eJnGzZ25ibpTC0D@03)dx@Kyz z;JGu0lL3g#fNW8Xx=E2%YGv67-*L;`(D(p4c%dvdCBdiZ2hqXQYUU%Bjk*mE_KXLuQm2tomelnAb#N|C~(noM}hZI%gNwMQQSkCk-arA{T30q8O4^G z8xv5(fIDaqI$HLF5Uq4MhAS(I*0vp&hHUv~Wk;uf(~vqmIS3$j90-ejjQwew|0)#H zpggWUvEj$Z!k-=ugxVO!J_~HZ90VX=$VDjYV*$cJ+%P~b_DUjo4`MG^kdn@w@hHjG zY?%&O6sT1DF>>r#?X-Q29M>r!T$p~pDS9As{PlczzMr5VWm|^4==2+ddheRe;4{U> zNYOIL z5_vhgDQf!`)nz>2Dw5^k7Gdx?M}P$-v_J9EcDETb7n{TGxeSr%UuIqiqsYYOb_}Mq!Tj?KqTltq8Mt4I7!aSh;7+< z-d?y)V0#@VR7pJJ>zQgbtSLy#fj5i%;0pj>Evjaj92;-ZiT~CH|4aAqqPLK-Qv`NezKxND^eUt`eM5f+7 zGWJFwO)dV)#8py&ji_?>a_JIau*k##t05alwe!e3gGl!P#@fdgFy7ZEq&htMDR&b# zB1Qd%>;DGmIZ#Rn(DdGYnjwn)(_NJ(6H~Kise{o?APB@>IUUTWKp|wZ8fP0A-q^KQ z=JT*Up7So6pf^ZIZ}gb*wbYB%jqy0QFJl7bp^MKFKL(MrXxp&#I+yR>^K94f=#6fZ zxp*EAO3U@OUB~+m<;)}8mRoVVIatLo@m?IiH)YuH^guOcRr0u*UV^?d@S7Rm(bvNz ze!eh{pZWfs^!v8vvd$xqP7vyR?Wg?wSVnF>hwsd&Z}8nH7+9el&3O&aYUMY+Wm^@! zHtEH$1aQP>Y*`tv+clp0zC6}CatR-K#-RVIb}i^(S@Dq#2JRgIs)-hjEO%*2rvuivJg9L3k z{);0C{<;aYnhki>4~Q?mJpyzPFys(+fWOMWHC>I)L#Q1&%6bAub;C|uHcC|WJu)PB zdR6Zqk=i)1)hGy@fX#($V0dKh57PX%Ybz8x*#3GNjWD0%R&94iL?XT7Cn5pAHN~ea zHkYE}s)E3+@bgMBUvo@tN`1#aa(2LQ`F8a)TG z0P++w-^l>e*kZT)IoXe6CPwKrS1m4O2O9uVmHa?=mf~nG-pVs!RaNAMX@}<)oVSr{UyulIuU_%1 z46+n~j#>b?^W5<#LKLXI*3AqP)2g(z4At&|vGDm~Q~az*71}uyy3*$lwQh1iJ_}Q? z>Fio3owUH`Qr*&=_dcnzx#wT(>!w8b95~RwiBdnlYu!{w0yS4sY5AO(CB z9Ta43nqQZM1OFKx1knliE0<(Keh7d#{cyWeRxYky$A4V^Th!7=_W?M#XS*n`0v`Om z>0cuN8dECHy(nCfB`g5_Yim`}N9=7n0sOv7=HPXWE5|O!v%)vCq{bKg!trSz)ZSVV zx;4H~3gjTCXtfbqvjeid%7~Oq`fWEyNzpFzkGaHa?LrZTCsOjtBH-Lx7j>5XI*mro9hv*Pa7|_JF?-6MuzFvVro443K)l zVF1b@z%h-LXAXvdataWl4viIrkgNa)p$VUTmGe%s9&~!tctMIsOG&Gc=10;^rY}F$ zx?=xc*;lJNihMd*=A@%U+}>laQL*yJQ;Kb?*(08+kZ>`T*i0tLriImot|?g{j;VZx z?es#_Cui%Nj}hi)pjiGkCmKrS1@oxx`s(ycm`mjkG==@LSZMKbWibUe1Gdid{MLxj zl%p2=g&dVpO}l#lI8Z37QM6!r>Wx7d>vuyP?(8EgtJW-jDNm-JE*KKo^7%kW?2`e1 z$0^ApQ`<6=0mG8t9H4@UXmB>y{AJE*E$G~?$JV=Z6*%6&aQcmYkD-$!D}caa0`evi zjF2!eK%bkp*I`mC(m+uI&ulF=%7c)Y=$L#Rces{rujU3L-)M0HgCZhEESMp6m3Qf2 z&?RpE3n*J9QDbAyzOAjS7aT#5ki^Fc`cYArUCd~hE#UJ=ZULr+ph?U1`($NRgN$&W z<|U-1_|OSp*s(2tEjQaLAVO7wd{bc*=oPnI7hrH7iYXFg{EDwA&|IeimH8c{r-3gz zIx5hZf)959Gs83;OdANI{3eC{xX|c1&tOMNSxacQFf$Za=!LEAYL|ADQR?UFQ2&C^ z+E!`lJGH5ceAuc*9`1B?xr)s9&yG%WLPG>g@uy?e*thBa$n~e^Wo7(^Mh0XEv9qdg zcj)uKLFfpv4#>2zHyon({AWxc_ZySj>v`$&(_aMuMoJ}d`K$s!Mi|_RsI6WIwK4HA ztxnE^hs#UYCW;8Z03hkiNC_JQQSI`=u<#GbKl?tMR#)%D+XVug?<6npra<4+Yhfl5 zX5ftQUnPu0&MhEV34D!Lw9Nn8?keOTjgoN-TNb>&ayJnJaX`dzYJ#^K^VqUEBm zCuGJf^l;3_s8bUmfw(Ds5svN65YjLQ(0+${IMmNo>Hlg{@nzHdegy-ue&R{q0ElE# zs%>8R-#CuWpiq7GVT2u96wZ@nFof*E|M7#480ttC)CV_;AVwq=l`3W^k5Ui?vTH7G zd2C7XRR4N4PF?wTT%IKK%5YzIgQ zS6IsVnx6p@T+TH|?g@*K#KmmvoV?dB|0QYggN`BUrel z&4;&%tT!m{Qit#sA}yAGE;22*CFyA+MEEGZvS9FP#PJAlIO29bA~t?A6AsXSKj*3S zZ%<6s+>vv7alpRX<~1M7YXICsR{IZG113i|+f9+OMPc{UpTo6sT>L`zm{HypL<8d~ zVf3nWSH?1dua8+dmR@uy{^6#7k`<8pKER8^UQ+D#*?!C&i6Oh4;vNsOAN?6fvS@%8 ziu_Ke_M$z)nc9NeB?TC?Y#sU4k0RKKjQJ41L9-qig*#%`Tlg|jL!b}wCAGL)h{=6{}#5w)19tsS;F~v3^evJ0^_Fa7+ zV_vGRWS45ECsi$m0)wv5Sf30hEdwJ&R=(Z1c{;DI9pt&q862HS4^V>01gK?OCZ=+E zM>xF@;zAT&MF6fT2_WGAtBes@BjaZHSIJ$Yo26>EvFHb|!UI_iOu2mSq~{Zg1xGj0 z3r%A@wTHr}Ueyzo5@4q@n>|TP#SvB;gH0{Pq?_2#ORhDtnai5yF?MH|b6+9rjHqw{ zd?6Jvi+Y0$iHeEh++iu;pqu}RtUrT80<^p!xZ^u*3wuj~t?6xM3}`1O89}In|B%O6 z(E++FSM+WW9iwXI4Z@ANOYW?Fdsux7obN4A9$zgoym?KgdN1Q9z=tXe_JB9p)V%as z#lF3ypmpd=?3 zc)P78SB-u?2@_jwVGj}-#{t&vKg$p~d9E2{e^sc4x5Idu42T))wgi49HcA_U4N%I$?eG;G+L~ zOa7ro=eRl#OPuqwY*8$WTyUP6!>w2wHDy{uc&&obG@rY|T9)NT;*-J%xV~?Tw;Tpm zaAtdzDd7aS9hiIX+_q2g7#`NxK0P?f`tmM(XNA$>b#6n1xmn)S_3F%$1(%pE6Vh4@ zuSCaw`4V9yyD592TXcgA)RYYNza{w<@2J7T%{K*~EW{oA0W+59iyA^PIxi4ciiJu5 z+05bhR*BrQBOv3#O zB7t5G7SAQte@kKiN2l*nD7;76AC%L*>GyenPR8c^u}6g)Kqh%|t_mXXU%*qnKv5Vi za;CXQI|_hv(O)GMyO+nd5Yz5}TV8W&`p1N(z*!`mAmyO_Kv7go0ANGHf7CIK zYE7`PGn{KiZZv4>Z^&o`(SI`%jn&o(!Z8%&HJ2HYybiP$aT{@r%;2(;%Ct-!=Pt8` z#vgP1qFq~g@AXpG+xvOpfYYVLCbzz!l~wGIH3tWGKsTQm$8ul6xiwbFxWORcGYCGF zS`Fgh*zWf>v|2|dn4COXO4X7^it0&KAuFUk&P5$HZ)(tE&s|{5I z5O!tuP#(8IAAlPCgB|}*o-ktqp*_+Qjst;m;Gx&a&bKMJT{&)9XtHur-MqcnZWD>9^A)C$t_>mOCfh>C^dir79tw?__6&|DW(sa#;A;SB(M9tGN>Te1 zD^JgcYd+ajXj&KCFCh}tsP`Hp0G5v-b9h2 z!0?3T_I1i2r2U_k@{H>0iK|QLjd-VF*~f-;(pzbhr4{Z96{0L02%qa(a8*LzPP6F74gMvNQ?(OjZk8X(V$WcRQTpdI@h6 zI=r!2SbUv@5uwQ4GCB&kKfopQJ4s%UQLUs#c*_&E<{->AB0P@-*ed=@OE#EYaoE2U zHJ64ltX*8-GV~V8O%>QskY1gl5u!)s$|V^7>3i<7cZ2QUvERuztXbv;H&os4jpE;tYy0fF5)riMm2LsHZg?M5N7%FO+YsB#CB!8!{d5N|@u43WQ{WoGgN~djb$vHW}Iyhs9!#1(c(dP?&DP-uLT(%J!0t6xdN+yj2bP3&cdCc3UpDE` z+wvZ6*}vAZk~*<~t|lQqahYNs$(s$2Hu67N9LVZjeu6T=QNtx5VB0#I_T!IvTw3%j zA0&56R~NLRg-g%zd*^;#v<=CQ++^^ExJJJcsYgGzs|R`T)H_ORCliRT!d+*B5wI}GN?!D zr!!qP1ysa69IbQ+Ghe7GcM7=d1}<(h1jVKchT+IWKd(5>_^?;UJT%$4zQd%S)Td4e zR@~(IsKVsgisVvxaqL{Q-5vuT_#Hw|3%O*{Sj4LNs)*pubF#Kc>Y4aN^;uGjEBxX? zHSU?~DbT0s8Vs%9du^jX2c*FRpujrba-0W}$w{T)%gf6Qt!OVg*h=eYc#k(av@N`N zL!}ZJ6*|wGqlo!JHQ2-zK<{QN4_ZEF<&j4B#xz60yf~FC$q2MvT0$e_bx;m$7>l~4 ze+zF44N7*^7GYu{5n?G8j(Tl7UkCr+Z}?k#FL>4)h_MB$UBhK zArd68OVRNm&Uvo|zHztG+xh;Le9g!Y&67UOZaSZ322AhuB^Q+No;J2rPg3=Ggd#3vW@QOXzl;MZ)7*{4sEzHQAR&pCe#HKuCZXkZvhk{~zdy4e zd@m5`4)*!;Fa*7XlD(EQp^&D}MtL^tJ&xmFMFWpBm4Yjewv(uqvXX?nm#IYkuFWxD zPsiLQDSGgbYAaU>x!jT;gtp6q`IP<_XP8H5(?~__hcdfg>U3^+%v)!aRs0E0`y{yO z?c@vYlVdMGp!rTHPt9iDvxDN_Hpu7Wl_}GG&tqk&MFu-%Yu}e0@{HH9#{cr`Gs


    {@_6kX#rGDtbK>go*`GJ&TJ;xOSjZ&aJ_YX9&5J^~XBHc1 zD)q-?CaUxCb>%O@;KJD*^*$z$45H{txhP1F$t`}I=KU(Li@@y}XMgnipCf~m1)(cV zZCMmfd6G%Dx+6`^zyo92$?r+B9$zdGWd{M8yPI`8f{hqpu`0p6-e z443Gl1Wl202X=9dJrUXq&W^*IZ|0!VSUZ0za)u==;3SC}-T>z_m%o28o7;+dHSywi z(S2md;RRNA!;k)GB8yMvzS`~E=UfX95!@L9saAt8pid_+=$(PYMfl9w(8elV>jXH(N?5vN3lb zn`EEYbAR}kakMeU3}MwL6wLeQVuk(5-*Q~u)?v?A5j-ETL4-3vb2-^~b6@WuXZc3; zhffZpDR%F7ZMjFMPy@R^=ML}eEWeixePtg`cQBE$y}_ql=RqVW=tUDFgroTL`Z7&$ zMzRWWY%Nh^z`uIcdgWb2>b>x-xKyUFaG~`Ct5ByAhJb(`^UXJ1Wp*#`lW#(e_aAiu zQ7rI^GFYqmY7{XTn6<9&5=7qTx0J9i9=J?DPA|&j<{s(mFIU+d(TR$RDpcu#)U~uc zC$3yjfj#H@gKla0Papx;0jaBpJEqfWK2bL>HzaMG1tQlID^&g`8^^-)Jbt&QWE@V@qR%mP`#fK&Bn zU}rQ9(xBquh0;%2Eysho?0{a{ok+-+| z8s!McRMlh`Z4L_lLG*ijVv06U0TJLh{J2Sh-gI>#^UXumn zz(34_F56%TEGVczaPF=Q!=VpRrrj$xo>z4VLzyc5=+qLbw8>m-jq{^I{w@m`P6fGJ zpT9L_QV$l}ol#w0!KG<|D_4Ad7;GF*n#Ph4$^7A?iG{@IYB7Pa-08ULkwT4B)lAPo zfN8{}L9_N%xXokF)p^Rpq0dyB=g%CB*wf^y(f&+WpU+Mnr^`v3j1U4h_4Q%W?tL03 z1sX-3qod4G$qosYut2UjR7Lpy9q;O3JB>yi^Y=!Vmxzdnx5Eu^(9kd}Rx6)4aGU9i zCS7hgaqrxm6~WyHd7)?X#*MVXzC~|Hy;Di}j^sb~Y|)68T~|3jph=<}Fyo6+dB>}SzN^LK~8aLBMRFOyDp|kXd2NCpgta{v285*lf zvB$kDRO4g4rIlanjD1gLEtr?rE!Q_p=8Oj`5!9>!ThAU>Z_AoUG))%NR+XlamEvv1 zQS=FzJe98S(&YeSxg;jw6-AN}Jz}qD3_wuDgOA)A2-Y485}zlQ$K%U8W@~|t;lR0 zRkTR^o$T$)E*X%?fR1P?G0~V~e{wBSmMpe!{@+=Jpq$=TSNGOz9>%WXlsU@b*-2+t z$ta8AG5lHjgy4~aUvxB+CTCvJd@$nEr+|cm^w)FdW}SA$3X`44sM(BUut#yv)fHk_8aVZG+F@>OI#JL} zyqqGH-!lp;kIP^#2P)TmCHZW&%?FNFp~7z3^yUZ-a(JbxEX@V>!o$OhuZJ0lueU0k z?h7FxZoY46Zlzwj>LDo5Vps4lkHlqr)%e>iH}TT*%;e5|*%7c45)2#r3*~12_vFm< zKaW;6N2y*}=y+EOQkKQvET}1kbDv!pSH&-T*|n7muK>OQOJqT>L(=MT7z3V zp_p|h7EaMrX?s@qe5(F}xuw0S>1;>2)#j+oY&Icsj5NURS%HcHbK=p;#r@R&Z%qvi zst`48ton~C+5&19Y6s`Ug5gmG=G0v;r{N!iAB80;oEZJ0)`8!L(gELA_{Ik{F_ZEY zSDqYXPHW^DQp|_B7=&47c@z7NM&;n>SiF70g-rX}!uTL61i;}_^ha-KdjW$Y|Z+e3r*Iv`N^t#&UY@EbN&z)BTvWd*a2-hWYKd9XF8S^g#Sm&uJ3yzAy)5Q zSa5Xe@#bXe>5e}b@WyTOOKX2lT&{Pk5!?i@<1sdwG+$X9`Q(R&vgE2T279>L=jN6b zlH*R)nF)+n5uV))%m17fwTOA3*n>P*%y79i6u1tC@TfW;K_bZ7k z7{>Y?Ut)DVyf`73Px=e~^7{JM;wlO;k1tiEIfYbZ-`0W&H}=5QLDB}JK(O9I{!yZ! zMajTTLAAY+ENWDig>$Cyx}y0~5-wK#=^5Us45|^Q=;QVeRb2Y91M|(*^&#%&dncoS zxe0?0PDV|FiD}F^H?4<9f!~`mjx%sdY_AWPkxak?EwfF}_O_$nOmQ1a##YWR zJAQ&97qIsHbm3wx52~Y#*gI*OoyB4z(T%z|N_F?K+zlIu3T;pAhve_HZAmEh4Lo}#aYC?7~152U4z-@G?exh&^lvxa}U27 zaNC_?g2Kbt>@X#s?D5dnHzY**n}9P~5-U&chdOZKB_c;&=wZIJp>DMshPQ+1FZ|ee ztON$#Xchxl&8HWoX_1-_S&UWT#bkQ?ym^2r3kMg7rTe*(49? zMRaj-)1T=J+#31C!5Y5!VB}J%+)YlCDD=BDb{rE(XU13?i|$W#8DRk%6C_8)#}E7C z%_vzy4yRCZTNJW)Z=S16TVi~t8i6|^TY-y@A0!CVsdt~cDrEQE>hU8^;DNruFK$qX zT4$F~%W?cGr>3)-V$kB4O*+)yhz@#Du(;l$cKKE~%v-+iDL3>5BFm zKBddF@N*}&or{dWmr0JP272FG8AK)U$TYVN!8`kd%r4}N^&-lniAg;Uc=u{@5L1=< zWr=mGzV$D?u(*r+Zv#akq!7=YEs{k=2B+yXAA-U6;N!V{ z2^Qlh=|Kq}J6m?z5cC5zOt9Zb*lX0&$LFlXzf(S0`FDS}_vr6Dre_3lG}9CD;ohE8 znM)KQsvTtL7aT7(#PJ(uV8>w9`L#zbK6lK^+nK7g7Xljilw&oZpS72qK=ycpf0J)( zCmJehP7C~3iA1NZCgNNiF01)=U{du^t$Xmn5dC*ZWGlRa8iId%ZNI?!g-Hwl>Ud2# zC6(Ke5uYnR@CJqWWOK6Z$f*CPp;;N|z26t8{lsTSX)atWCOSX=H9nY!E{S~onOe=ssO=z6 zXb+6Q^bNplV12u~01=u6oMP5HU+jk>x|?PF*A+gfsA2>$cYG3aGka*Gl-f-5Y!Yz+yIgNsTL`;mrDKWFA@?~-e;Jb{w z*S?T?b-vdT9oT(eL+@th2h!Kq?^@DJC8hpI@#F%0+o+ZZuCaIaQzF@RRdke(=}76^ z<`GWCw`$?{D2-W5+iK%S(>7PLbbjhw_L+nJ_E=TgqC@MiW;W36$RrAEhuE0?PFC{{ zPrPDdhE3v zFU&^O^^Z>7wx?RDi49t#fRwKGLqz4A0L;=hv5)B0NXHbmqr~y4rEgccOXY#g*m!Ei zrvz3W#qbz#y2NR&Vd^+8O2!kk@`#5qK*=@9{u8WA1rPF~pj^AceM@a@^J~vzF`v5e z<>?4P>94sTejbH4a#u%FX9tOWk5FAs&ff$@Cg(~fRFqV<%mvbqx9T+BDH6g2y%#RB zY7Bo6`l+^4X3`(ggSDup5Yb6nMgJJnNCM~3&f((E!=+^mhl3GpNFp%chn2`_iwml8 zI|Llr2E8AS3>1P#DC96AbkIAv&%~YjUFOy$d%wR}EA;|^Zw=cL%>e(zm0$4LFbtkm z`Iqu@2?WYM(*@lTZ(_(vwj_lb(|97EQi8hP^F=gCSJt%F;ZKhvA-@N-|BbUhl3(Ok zZURH8Gqu?(PnF&_ILI{(!>*a6^r~5kuhmLBT-OIWX??m-TVG>Ly>*p64IQV_hY zF#C!BtW0CIX2!7k(Vv@O!NVi9B)(*0@vvb!yQ!;tVYAm^d6cB=-ltWCpi%Zwxp7gd zz7yY(XZuc7Oso}F-@(Z?umm2AhlkhPH1zDb+w~9*6cbOk{Z@5Nqg!X1nxA?Z+G9c` zy#`IKL$cJ@o2Zg~9O9#9iFRs-_|iwqH0_+uGO|za?!sy*Xus)m{>J*rtR2BCevzsGR2~DNDd!rN`eYSgt4co40A;b?ndl0vdJo(lieaK8GAGud#e{M2dhB z<_zkk_=Dech3^H&3LOnGyTDpHblzTabO+o;KumR+4E@0$w7iU_UTF@qKj--j#?zDK zQW#G;Pw{=q{n{Vm&~E1#Q#WT(r}6!KVoB*;J*W(AvQ*D{fv=5YpE3TFgrI z3Ma(E#kx!{RZE56HJtDr2YL9k1CZ|`j#FiO!uZih!=6oP>+WH*KWOE~i2?Q;I)2$iggoN%4u0FNLI84!(LP}nL@_Q>YJ8OUuE09{IQxc9$ zx3-STst9`!5F)WDDV<`%pl81~3a;A!O$DnDgx^RKhq7?>e+S=fS5wcQZawJ-L=W}( zUUB7m^VFY6eUT9=98CS~cp=9f8m+I;YV^JstDIKnY#0q2KYQQzmC*B!x{huxn}9*_ zhu>mDb84~ktusq;u|$~WDjMEyv^!T689O)4eWXV-8lFAa*T@d>Qt*y#LbdH6Sz1>Q zedB#@q<`mrcv}tGMyQd_Xs#Ssg_I#Y?v2&_iFhpZAB7@KtFgS;7fzKA^Za9u`Nk>v z+ga9$P=n{7|3leV$3@v~ZHpoz9S+@yNDD|e2q+zgX(kt;z|oTDbq%4o~EBS1&gXE8`@kpvRk|PxW(d?*^ZOC@2b98PcRS zWXy%@D6aMsB|dOE=OZH{Uy_^$YxR4Vb7^U557_lv53*VR@?mnWQ&Ur$-&Gen=~8$f zB+?+&G)r@(vJ~z_-Y_K%>@O3+u#=RM5?2i#nY20mv{Xg+r&!~BxvLRguo^ks= z4uBK61kcXm#K!Mkm|wRmWdPi&+qccG>rjG~icnqSf>TEVo?9MiiA=K9Lt_f3!s4T3 z0jSNGIoU?PkEuR=GUYqi>VbwN?*K(3-b-~}3uRmYoo+Q;i@XZOt-xqig2SuSc`h(i zRPX&vd;ZGyih;gQ7>g(hzB2{1sMY1P6;t(QuqQQjMW^NHG~RVD_xGCE%-8L)p3cV- zz98FgTHd`|7lImI9)vfvM60#*-g)O3WUl%-Xb#fVUIR^#zLs2lOr;P$Nb|zxI^|5I zdeNRB(3QC_&6u4x*j)Fee0(k#YEwIVxJmeOlf)_^f7V#7kzt&_9@wrwecI#t?;E`* zb>s*l;_Uccq5bjS|HqGBm&o7HTsxagh!0MCgJpl%U$g5aH8JJI#DWq&J2ankYrEBZ zudPl^?pSx>ZPu8f>ptsddLGBvpx_)9~L*QXPR#`DPd z4=2K3H{#r3iKVc3)C%Q9)HF6v^7hQLeC77@dQzc~yJl>r?>*RB(#UMQ$2+kg^?RsZ zHf-NzwQG1wYzVEjjFwrt;0LA(LcG2{Q-37*TQmM2Gx9y!0lYCK0$#^8JUbJo0ge8y zzP?#VpKSD}Zop4@PwxC(R|3M?OK|*PC2IOEA4ZIVUvflD54T8Ve2itjZG!cK(g#wF z{hj<1PXnU}TymRe6j+c?UB2}n(%$YjsvCd6T`pQ^;DEbOPfmR?GVfriEkIZxNZ7qj z_$Z~PAyq0wg=i3l;lUJ#dlgRuV6)j+k)C#d#7qatFfpR>$cwbDQ0QwlwEhi}5r}PK za@E0lS>}()*#2uW0KA-rhGuqQW#?R=n*!J~e=YEjG5!{yf1i)DJJ$g`>j5{nN#A;w zbEV6h?^o`qAWu$C;-0czpW|K%bSAuwKse#N)XUhihlp{pk+y%iKTsj?BNqVyvCU4ey@1#bWO)w9P(HJAqcbJ3!vJ`&} z%|rXAi?z5oAK>j`e^y1L> z>#w2}bp>qaBP>)x&=xjDLx-Dz$P(}p|NDG+-DN0xwP`(=ugw@84EFD{cknz67lYnC znch$Tu6(GFkl|Ybftg*Zh9lvaxm>$~_dnSKWymkFnzD|hvE8r4V$8W(3?G+Z2MtM@ zzAHx8N=DIw>;NNl7QROfhSePn_28?uta1?gC&BRDDddAKDxIxJxeig?C5@rNo@d?_ zLOfRxc{YtVxc$;4ozV?qZV2c^YtyYf+ZYFKgo4m}#2+I%yY^ETV()w``U_CJavuK& z*_WZ(N{vDC0iW@w{k1iKIAm!lyeB<=B>iToo=wWVHfs;I`B#>e!ukD@%LfXTW(S) z7d(?Q{S}0YTu2rN{LkAOn1(0fv!gk(9dT0(z>;2KyZZV0QTyD;Q@I=Dlt?HBgaXB) zMn-oZVk1jgeQ9i@TI<>_VMfrkNCSBvMrR{S%Y*JyYMq0FgTWLV$ANA4^y2xfY>H4a z;rmhw52=d|En=DlX^?GtDZF16qw%tD@8`ZW&Ql`9@{?(Fo4K#Z`bDJe1kc>h%a28A zkR+l*&r`5&AA1_*^se&PUGsM4ILs2l+;Gv61{@M+5pcUlLDC_HoW8jZ*+=fo)GV9R z@~171-|>aNrl!8+_0kdF6(Ftl=n--v8F{^3#Hipe!}#xd?ce2K8lAVcsu`#zGwtgV z)xCsBvZ26^7q3vSSrIQffUGrEGIUvRd^yl`KA~@6fp2(Tsrhnq920|-9m{40rDbwb z&JTuyz2;+Q>>1`ncy@kXY=7iYW<7TBE<&f)nl@Pw;;%@H((d}Da0+1yWc25ZLQLdI zsBESu+2Jst1x7TBZrBJEqFD6|>DBtU*tvpv=Rj0C#B}rGaD7PpiUzQ>aZ|hA4wFvy zj$}WL-ynRQ$GT~%`-V!ca^F@;A9_5Mn&nX4E5F8RSC?-<1CEx>(^hAPcEC+(fKzzk z^ah~v*WL%Ww>gDRN0=+7R=Oc#*la94i2ukx zOsm+o-)>{P7>S#E_+=u?(#PdqoxYDcgk&N$JmYQIBX|xPTL;1`i_G3&_B^f5&1E+2 z=E$@Rb|uT0a~+`n5x0%@O@Z1wcBSz~jrrC-1mF0_Q}w*u8LNiVU1$fPYNX}s+>!~y z-Fo`^Y4GkO0eT>%`M~_((L-}}!aY}0xs=z;ahz!i4QWIoj=XQ_+#0qo6BPP1l3cs{ ziX}(~^A)+IYAMmZV26;fc6zLDLoh8=Y!}k`V{Em5K}M_i#B>u(nEe-8Cuo@a&?}*2 zGJO^E6Y7Ac;MIpfeKiA`k-#_dM5)8`eG~RelD#OOie9kN(s!Sop!2MR^oNIrPOCkN zZus1((=6$S_zN({KEf)I_}|q8)hZgZPAw@HQw-q#gor^uAnNx&10D|>PNW#LJtD>6 z^9S~R&D$6l&D-QPY0uKms$R}>4?}f=S2>pqwl92&9`H!#ylrK-6=mZUsMTxBcPT0< zX&x(Ge#7t%|Kn4Nkinei`ar+qSOJ^c?(Xi-N{rYy`4%pu!^xzB?^KwLR7i%}_LnSL z?DWRjtCt(3RVeJGwE{&CY3|h=-*`zKdax%(>x^$%&(wzijnHSCGTQI&YrO#JSqy!| zPZo6f$Y^r7K62yh$6l|v9ERzjOQS}s*;z#(KI9(AESD~bSLv5gzBpCyvlu@Z>%+%Z zfNxJo92U=03Mu9o@IACvR+w1c6oAim%(NHVUdZ_d1k6`=p_g}4>u4(HD-pI|PWwbg z;wTn>(Jq*&v5Hx#ML&hFh6lYfN!4p|f57q3JEoE+J~&uk*W&H=*Lp}mk!=%mQdZ

    z1Cx_?Y--vDV%VD})$yw|oHC~#y{*cqRxbC^LX7V0k81X7@yoIK)f;n9mX4{D{IrN| zFSO#71m6@sca+j6=N|7iFS<*mLlzK0{=gbkD9y%e+WY0XjXC&YBbt?e*x1rCpODvL z`2PAfEp<27OW@Pkw?^G3i5c0-Hqhyoxv-4BdNuZGe+pjnKYa?`Xffu3BC;RBVqQ&7xFsT+u$u zZPGqlX3{=srN-{#`cw<)$tF;+d_10X#7~!D>d+A|=}*sZNA;GR-!^E|J_vDFy=l_~ z7&j~9oThl#QpPNwDm2h7y#h_4Uaw4*Evl|;YUeMlP+lL?rgVtwjx(!b5^fjUcMpizl2YZ2*bu@;Wox5aaC@?m|&Rzf- z8WyZ$%`Qd_Gys6KFptU}Cl`{GO98VKsVHq50UES88QaXjY0fNf+813qjXGC`yR?%g zR2qa?#_w2%qY4#AbcShaE)=!xgp@g9kF?mmIJ>;2VybE{?!m(xQ{yHISY_Oc6Ij6A zjvL=WT#+1t{9A{iF0(c1w>$5w$@s&wOrNbZ3c?nJQFctNN{+%U3O7;pLAJ+62N%AryWq3D`2eR zP~w%b7-;s^tRM6xD_0*){u7XieYD>sjvTCJ>OZA4g znAfx|Y~hf&<3?{qeZ_LS)AP#a5N4SfTeR*i;`yDM!+)38eAdHRiyX9Y8W#`q%skDj zuAcT0-gC=*`GimF+V%>(;l0!fi@hNoEMKWjtk~BBrLxb$n6^FIy-l_W7-hoCy%mi5 zCn=2jHz2+nSfG<656KW zr?WymQ8^YAFJG3^#0SXlj9&qh_bjS)YPU z@)}14*Sisv@5s8tsHx3I(#)K~?x2RYEt*X|c5kx}6q9 zjg$4<@uE~&ppx8tE+q;+oS?$Ex5zy`!Wa!eOl}2-RomO_d7IyuwoovJpI?j!Sx!Az z>O{I8ynpIX%oq?rtU7z;YE{HbqWOS4E^{ajT;CC$zQHb-?7P zGa(+9TQV2UN-6Nu9P++U1^Zp3oqibz2p5@*|2Va`?}2!e#HJI=3B!NngJVGE25?Qa&izEc11=^-M3k*B{^TI_sp5 zVGY(ObKzEZM{Ako_(F53Wq|Kd(w@+0IAb^%koI9WbzN()UnMqHfUH}!l^jP zHiQbp!4=CCfO0_1&b5uSTsOb>`DQo2aXH7iTG*J%A}BNG!f;B2@2beAWl_7eCD1l9 zq;ZE`9zagQxAR>(HirsHWqo>eTEp?9-$mebK6@y2Z_#R739!BJa?OFV1R&_*?ASHHP4|+9yX~`ZyNI@BJ zmzsuhPrz=T{R&(OpiP+qv6$2Tc+(J0`@&d?+^z+2dat5ACz{2d)%9lZJbU_bZ9T^) z2@{VP>)Z9JUtpNO6Ilykcg#BX5QNpVsoER_pj>pnAKudO;>=6Qe~h5Ta6xCQ1MG&&ylhTpoHa~;CkH_f#obK#F)(>k0kj1DU;2LKKb%cfU- zBh+cbFZ@pXkvq|-gN0_vl5d=-`*W6p%@f`^W8uQ6o6OL#Xc&eLW(#cD!oDZJ!Z|6E zg9zc))>5g0V{BVFa5OclTyByC8n91n@(Wve)vS!1L{(KtDQrI1kn-te_pI?jUt=s%SEFRcng_Y}!#zb+*b#f; zR((=4Z6U8_#MQ`yUExFu0U2J33x#j?>Iduex1nicYaG6J@KUNTGI8&fKlw7%lNz@? zp%pIF*L!pjeNmYjHyKS?%5?f21kI_aGOIQ*ZkXKuRK-NE8#7}y@l$q8cHwKLK|0gu zx0<&aP=H4-Y%&<$-@8#a9ycSWSAmdV-+9D?I$7`eVczAv^wS6xFFB37KkshBt4*_F zxWr?z?-YJ$5DN|C?(81UUjK5&2(b_2Z-SIHqSCbe&bbTH&TdAT_@UppY}wJ!6b% zi31z~=>i+yUT(0ZP+3JO-M7Cg_V6zQc*EZW2gXmCtN>8dR_@mZ&RQ@wmZEQ9RzX%o zo1wJ#k}9HH2n+g@1p`H2_O|wm9Q6;n&~LR_3&A0ux(VfN<{Fl6|{eg+`mh`W6J<@Q3a-*sTv_h~!uL;=7f^m~r9`P>lz(%`c3=2@T*&T(XC?b9ZaD&`A*Mt)ewLIHyNrG4-i=c%1kljnQnU!(cTJtC* z!wnvo>nCJ<#Zw$IxI1E(YqV0Qh(ea8%b%SP=*1->^`?OwvB{lpGQ~#nMj^sHs8lO~ zqwIyD=^7S=`y)-Kb{9Rj2?LY5b&L5_(nu}QK{g1QokFrtUHMXxQ>Bn8y-RhlQ>YUp zw1*H`#!r0z%0NirGUYPQBK(6ro`#ZGYW`eySRr`fdztxubf9ffRm6M4UBqP@NX`7} zyT~Kc8;h@Hi3wX&P7y01+8Qmw_8!-!Ca0BrK9_s@&*_rrO2PnDuxT1sqQmvgHVqCn zJ*D;Y+-K`G7ro!V-OPT`T;DYSYP1w>FIZgr%*gD^Y^~WpcE0ZVWOM)np1~~zS zxe5EAN}u(tC7WfV>XGvPle;aMk7j5QXBE|!WnE{YVXo|fLko>Q)1bR{;s>PLu9B`7 zLGp%fB#!J|eNuutuXwTn+R|EY;k9=h&bIT?+A`MyK^9pe(dP?QC+v)y#4{YqT%_=g zGK1Llfqlk?rYmYQ)nMQEUZRN`Bbyak-aW8MhQ>YY6^Rabpm^Uu9G`g@u^7{;jMnr z8N&b})X#GkAMTT@0t5~ms2Gt1;colbnF1vo0#qdWZKWqc;HQ>8H&CZ%`ViA-d4P-Q z8=j{}HtP<^3`EY>N zFRvYML;6iGxwLgsAYNq`lH++Rz`|`R`=;?qGe5heZ{>wK)ti_VptXg*u3bL-5i881 zn|0ps(P!{-ZZZ7LxELx?!6h<_y5L%#ZB7&06`RT_+=g#prSH>)H@P3Zgh5rXCZiN> z>N#66oeVFq!`(-HLp{JTF_+f+4=Q0d<+bWEKG(})(?8?hcp@f_8v}Z9JpFQX?%;9b{e^Tug%{b~h$}nyHnC-%i|B=h9R8yZJm>GT&>omH2w!Yee$ylIYmCmB%d9#5xM)X_GmMa+^+zVZW(+2;>y>P3j?h*em8duq?M{AHQpboq*02RAR>`%s8G zA3hY)~&ep&G^(K}wbrw^Gs|CWTzfI@a@U(=-t43JU#T!xaommAo% zPlDJWhw7ZufRGr%A^wX7D4C*l9O2DSMGwy=oOa?hpmu+vVj~<IrOl?NX4+P%Et{p@+Mn{gtMksf(AqA7+PUh< z>r{Fwgxa}=ws7pa5rL`AhM{#3IDB?B#2X+jy|Ny&%^D;H>jOE@kGg9#3tRH z;A9eh@tPkMR;B_eg(q$IZ7W=weTJL$$L^LCBh2@=Pk>2@(8~cvgk>GL9?Id~!b^go z%QBp4JEY%9v`(?lcs3E$7rE&S+^zoM!JgE~?7d}5@h14uyg0eHhSG99I2;?Zi{kxB z-5als^DnU>VHPTRwAxgrS)B8-;Gr5A_;Vt==vGMTfTy9AnCv>@w#1(MR5#?i9lbPx*wE zD2|-3-|dw6Bb$G<5!C7H24=(OD}*OVx8Q z{p{i#1`B(5Y9(YrrrM3F_FMy!%jJ(=LgR>`7kotHYC-D}``k}|x^g#t10RnGxM7=E zmAU1S#^s&O&S(WnPZZxPtU8lR$k%<{Uz^qJ_N=-!KO+8dCD5U!Q_hpBI*xxwVHnU5 z5iUZi6!c;NpV*)q;LW&fn9%Xb*+N3lf`ss6;efV>u6w#@G+0ad>b_9_2CDj9yE^ z356f>p^THV5G*;^=}wNHO94XwUR)oVR3{zQ#)EuXXxL|#Ne$TDOGVEW`xQps}UI^A3BKI$;+q#-_TxjFqjH>p{g z&D@?z;fbv_P0I*p?z6MNgRiK|s5AEO#%W#UDmmL{LGtTWxQp>#SNzD2VLjkd;kyf8 zc_;CS*eCPo8b-{F`)aEJ^hjir;oZD%2GuUx+P82S3?6)z;VuYL)bruU$}xLu z(qR4O$eFW1Sh%`>{rr|rxkcY`M<=wBiL8Jobt-cHNW_YfEuMc{$J|Vu`=1Ir$LgLhWqryHrSiG)9gw79m1 z$;vdSZZ@b5I{5QdtxWE@iU*GynXy-yOToagD)Sv!@b=-0JL-0f%iKn-F+XUe3*%Gr zhH;-$lOxQ_jWI@GH}UCwF!7LZnqIOKPkq#*!2N$|7vc;^w4qn z`*ta(<{`_c`3Ux|m2m%KUo-iaKI0BMIOM^F?xhwWUkm|LEN`a-@n_gz_-{bH5F<}sIs+)i^->$rf zmboc=yj{$vuj}U zd1FPh+TmJe)Fd;3ca^0m<8XsM{OM9>`M@tW$mgh+FTlrNpCKejQ0p7qW;=V7V;2BD zpzKz6FPtS_qLL4%Ek88Y7UPf-$NJM{_?|eIH>`22@>tNoP~Nad^sb%p#p=D>LK!md z#@Wfj*`A9sGpK_v6Lql-lx&FHlqT0KoJ@$%9gxnBg^q}xFCGpH!~CW+bUD}?_R5VmdLub= z84F2>=7|?`6p~4oyfP>4@}h~%_fTkdRrKo5dJg%B8eBg& z|7E(?`z@;<39chQEx9ff$=q*WCXb(g_?I$~UtpOJr%)KU|L|}1bIZ$$JH}&=WB>0t z?=yZ-HegLtd!XVK_G0?|E5zA?eR=_p-}`=7w^m1Lhnw8YaD1)48W!(OHXvS3nrFUl zlUvQI(iP+e3hd|%Ch53@mcaB>)9soO=D?eunk`A+^e!y!YU(*iU+gMDD2Wz@DWf)p zLL-Ovt0gKmdfb=xXFyq#>LmEuSQHJq1}&%4x*gDx7Mima2rB%nr3cQt%#!BLz}|S+ z?%N>VM3F6@xTf^rz078~@WFe6Gkw>&te^4u0#|v}(*IG&uTiamv_9m+g4>TH%oV#b zi(Fh>egrXwTb@fbmJg@Rce}0a=A_ezp%5d1T;4wjM5p8fp*J@$2yFT-;G&H%Kd$LV z0M&KmBKT}B$J$eq!2=8NJz5c8*RIa&;yAu#F*aXa<2UX9N`OT)qu*O4H2$E5O^&nf z`^Y0%pv%;|4z`lUwduW$HiA1xQ+^0e=dO@7(mMmEXP==D8Mw@zE|6dfe+0m%IjU#B z%^fa-&-KZc*|sZonl<%ZVpl$p3)tyZ@a!)H!8lIAp9oz|T^1DXKURY385*|HptP+O z+NLv6DQ7Q6Jvk2^zt=Q_4++?dns8-d-a(0THJwD!R?4xLb&A0Hu3#;+#Z6~Au-jo* z!{y-Poy>@U7c+Vl6A@g4aNpcle`&1mD_IOc=tc1Lo&|ua`LxKs?j3G~H3K;c%^JcL zE?&8BWRZLLt1N=JqL;c>oZ5tLYz4w8XM)GeAgFgMXWKs#s2GFGGkQ4z2fdkn2@BV{w&mRE>_z*yz{< z9y3!#Y!1wMG5GDy)X#Qo@mVQin`}bXmO>_w}%jX_Q&Wj##N1r+ugOnO zPwnu+TU;=~6#TYYv+q0Z>96S7)oo%fzf8DN3n;(MkYFC}8txMcBZIfm#JZlh*tL7A zPpC}K1yMAt+sQnbsq<p(hs+6xuP^A^-S z$mK+Odm9ezUfe4(19ziUU0^vBB{+o?WA9gL-eo9@S74o@bO0yh{O#-zzk z$)16aLVzcH>>mNPW zAdP6ItuKX}Vqo;nfyQ`<^bulMPJ#G5kdXGkYPTyVMpnYRWrd@6E1NcxzCy>4r8d`& zm@~gZ3Md0%`TU~77WTFlJ@`eAyUo5I26Xjxuhua$b8bhdHX^o?i;!cQ2laI2PDV2m zz9BsK2SGJU)r*rR5u&7V+UALL4o#s_Z2uW7_zQ-_5n9uT+~psc;NQh@uiMqONZpJm zWVpk4f1Q>`p;wpc&ZfslLZe6VJX-6AwX9?hYWco5LC_4ml|g1iO<>Euoj6$&yR6gj zogUNaM-(O*W@TWmB3-K6+4GELqd;o!s~9y!ynFZV9Z2|>8Mw}wrNw)2tkZEFIM%Md zD(qnqz2!i)@})7^G8t5jcfRD7-r^O=ciBpE%Wpd!vJ7tz=cm}_9T8c#@;21>IjGwf z;@S!uH2UFNc8C6yqK)Pjb#pw>r!M4#%C_{C_?I3TB-*XPoJKmoBvXhC1w%YBVRzOD zO&%uDC6UzTwKcj}RTSpmt;KGi4FI>mhlQ_deXbT(gi5L}zWdY!x|lW0lm6vaiF|z} zKGYEf+#MWxeqflkW7iD&@SWSD{V8T@yax@ZiRZKD+X~+VF#%4f67aqavd25#gAx34 z^~3E&Ek?YXn2fy-xNkPQg>*{cQEDV(`ZhIw*{abt(6L(4djk1KRt3Crg{HW&qjm-N znO8h$MM0Y|c_A`y1VK*q&(#A0w_s16_ilJHD3OCmOk-i-!{5NTJa_jyshm)BDtIjQ1Dj0mxyZ?=q*%JtU1r0s zrUknOgb?YRMVd!8!FBDG4M%DYb^|4;mZ9&l7Eujxd<#4kcF}c*46t~2)&EqBlK8&h z29W@tHst1XsT|ig)q~a}0qWrJaWssr%lg)1PfJsdcEyP<8$`~QCM#hdi ztJi2a>)4LR;`a+r*s_M3iGsh2b~<;0FT)8W{2<=-B@GAl1{TO8{qZ=Uk4H_rMdF2V zQRjubj<0KNubhN;ok?}OR$2Ksdn}qqTf12EmLY_Qg#k*a_ix-F@5M^6=O!~h=vsV^ zJNx9>dQSHwf{lcgXN3J3GwXtq@i% zsTW=|nAS9L)BO{7fSS3d&_rcI$FO~6;?{~3i2A)2E4^oQL`Y}a{l}qtxf_x%98!BY z-6uH6%CuZq{|4vc_QZw;AE^jwWTo9xpBsH_V13owW%p^$+PfALO2<>A1jn03S&{V-ePY}#^>>%K7~#BhAipjNo)=sg|O1=2elV% zmW-m*eR7fx#7^B578lW>gMxKdt&M`T?t^i)8?dPAT$}+gri36pOdu8H{#_g}z8FPC z>UZ+ezJDT;NdT)h@`L{a0gPFkzJ0lT94PBn?S_JHGW|92{F-FiSvhmb$G>BPyHc2g zY>7C>rt|^$gS*FYHfA5IjC47A4Hx&qkwQ)6Qbp6n%;j|$?&KOpbairH&IWtf$Aj?KO1W%JRwZn8!liEQ(dwfW^aWh`=rh|!|_oGvZmX_#_S26x~BG4Z-Sr~(Hm>l2Eou1 ze*(s9n=KCS{L@I0$GHfCUTefdmcK_Os(^v|p*2o-`G80sa?wFs4<+%oXDoH({^GZK zcE%Fiq$SSyc)g>6$B^~YBZ28zE!7E}#fa~tIzk%jdbrO4MR&C{87WsBdZ-P~6$F;l z6SI~UYG2n4ECZZ>VK4*R&$n*QpLEvOV|OM0hJI45 zc+Xj0i*FN}U@uQ~JWd9j=vQiPEt3a+A=9s5!E~B3{m_2x)pB!2z}0y8ab%{B^d&lg z-AK!IX;H+K! z_YcB`= zkH2OZCB21ZXHebeCs@a2UtY+8^*Nu(XybZ8XxVW6D``f1i3_S&@4W1SzQh|W4kR9By-X; zo?6GS=IV*}3{!+FR$_KbI&YAKcs>#M;MrAt^~8g?lZfW`zHyz$F~bTmRWk+)aKoh$ zk+cue<4z-@+YwkSnw)!t%T1j=;)dJ1ci3Tb@r}>pz+EIoBJ^mrnQRs?r?u7W&f??v zI}|jeBk65fr7^*A*4Waz<|f?UJln-S7ZtQGD6d$O*RuO8gw3qj$aaW^j{8PcyOy0|b zZ|`%Mnxyj7Vo#LmIiHs18m$4i7TeYDe~MQ)vc!&%bZUzvyvXf*7R=R0Ec19QFJ#Ia ztV8xUgeZPsC;_?L&1rZV;?EyZWQ-jqN7i{7M*{@eH%xY5z2q8aT%-Y?j3LF6(4k^G z_yeO}&ZveEf@nJNyvn>(TvThWGLEHcE{&)_7%1JZ37+u+=HMY%{5c8R({SGx8UftrvoH-2ypDUR&_T^y3%jb^gIFA zd!1?}!3NnYLb`q@lr^D+o5dvjwYN`kAHUKIR}1%@jKKCVf#sb$WatPK*pS~Xep@qu zJoJfVxa%WZ3+A-Y&M%*Gq~Ki5+j;LW1D>)zkMDL*tlJ*(Ijc}a_(R~w6&=c6$IiJ! zD^UEZErvTX+;@Z%T3kq*DF&rOi;}19LfA!5zfr|C_EsF5r7bCgYSi0a1u<#ZWBa*q zs&Y187`GIBLNRbwx;s2-2SnV5p+yH|;C-rrnkxRwXSJ>}w2Ew&cHDPTp=JYN#!Xyj zk$JiLzwx?Dqw~O4tzl|BT0G@gU3ZIRdum*mQnQFQFMN7jl_u__0qx2~`l3=!!vm@f zL}JPIkElnkozc;gqrh`S^)vm!FR$mOyXSOtn(d1I<932t4H;S&?{kxviC~||g+6;e zu5h69W*`Jw=yvWM$NxN`n~CnDpi;_lCqp;22qJMSDhP?Yd~$EVr4Tlz>(xK&xd5uU zSDUlZH)BnYx6c}ew5wTi-9%Gx$wo^8uBt#2QgoJJrMtVdkldzARcu+Rqk~3}!e$%*_dctQ-%O1UW+T-OA>=}` z6<>t*8TPq1C3JAYeMMPGD-^EIbby@>KGSx~>b+too`lcb#yubpcn<85!&&o0-Vry0 zG}PZCv=e&IF{&f3xtT4kc`_w{bay4^ujIVTHcyi4QdJwo?c3DdSQ@`(QoiLW%12)s zPuXD$9o?gOPdqVC7t8#&NBVnEza_)Lk*(19R4dG@(H-V&EhtRj1#L|BUUI1c56<4% z$p?f{P1p`?z?&=Hc<%pBh5dJX&x7y`Zw?fV5AT?idk`}<8RiQO8@+kH?m{w&kTVvh zY#^iPoaJ-=E0^*g?f$*s+ot%H)u|$Ufa>m4h#5pQp_sAULZ|-9#4V!%aOVsW{dhVPDg)X&wQr ztN7j0F1OX5ezDHp585N8APYKZe*OJ7eD^nC{R>B-pWHRTG*1cl90t@Fx*--Bj%Ytw zxRU(<#k!@w28l**;&AbV>HTp8hF?gY{=n`=jt<)lx-VU~bjByow@;l#6~L5vR8mpq zQ)zSMgpSUX&3`HFZ=L@=qSmj>A8cIIW*qKLn0Eh^21@D+sJS5Pj)!%&NVE6i!OChA ztI}UxFe@yEDrZP1FKA(0hN&g7Tt&Gp?_TO|*}UCFy!=g3|5qO;DwxHY$w-;=z04qd zOQEm!39EMId*)@!QjVc+w?>_!Wzl^8%7nR_t$uwrNIaw4U*i7Hi|&hjO~B*-@{}jl1 zPm=kYUi>fNHpKlJv+hN$3HAG?JNo*?Xz29NS5Z8F)83P|y%)I#;=fXNP9&>d9Wz-! zi=N6IHt58qfwQ)X#kv2xso#3J`6$k#(xcV1D(d>KGzP>+hNu4lM%JOqBK`Fo_wZp5 zL{r{UDMM9WX(g*t9`US3tugKot%1Wn>_QT=KzVt2g?SD6%a)wRUvQ$UIG~9AX8wn# zGFX@Rx1^3Q_RC;*p@JEyVj6bmu|5U=pPb`=wN6cE_^}T9!M&*UV^f>@+0(k@!UNl@fF$lW+;o2lH@;qRFpM{;<+wN_0s%@q>iIQHB|1W!yS5^?(q| zPgK}0SEgM^>t}@ySJ&iIuZVZBG0o^j&%s9}kHD-Ye7gJo2KlmoXm*%HTvBGQ!;so{ zsZ%_DiWob3s-B5~)I2#Oh6G1=rS$FR)>fv~6*4M=MrpHwl-@L27r7&Z$Zz=KcMJ5d z@=h{VzfQdiVNuB_nu$q^=bjIz%Cy`nT-2tw)? zB2(kPGV=w<*Fcg3A{B%)b>%7Z$GK4&TJ#eY>thMLyfD5l-Pyf=m zi7QtgAu*9}HSVn2>pvJ#!&Tz*8Ahdy(T>tDeNAYh(4=kB4iS6CXt{yWjo?H6i88bnE?RB2lB~Z6n zAAC?;U89;2C55)-U#c$Y02qAU|1c=uHp$jbC;4%?EzE4oWn){Wa8ZwsR_(M6(o+wO zKc1YnIoVo%7kxu_m3C@KkgxLxLx+P`OGZ!v@ciUJyLX`_qvv)rQaGdU&~r=JeD6Rg z8^`N={@;NAzn1>rw_j8onH`mt%Q% zU*vNrI7d9V76~|wD3Gk}>O7^Njug70vfgj8We{G#Js{D*GiuV8)KZtY5?SW8R{ZDr zqa8Pg@6+mPW;vTdX+XpkP!jE7eio@!>~nEwr-Ss( z5lO-OGc+r3unNI{tLkqC`d1Z(@1Tr)STOXOw`v}fi}!`ul2}E{$IXiP^eA&$ZW1au zoygS+5z=_Ao&Y*cGoXDvcc}*$oZ6OD&0o52P$;p{qAps)=X?fItX89}muYMm6P>83A zgsv00l4_24Ciz}%cNhAk8aaB^pJkm4M;8Fi00k8ft*whxuL{cIV@Z*R9m*BcpNH7M z$B3sXUJKf)IwO}P3ea7u-RUu$q0cw)t%&~-!gHogtI45yd-uq*0XV=ry_A1 zFoQ4$=3J)&`Bfrs%4{pmspg7Rmq?gPP0G>=r;l0=7Bm7}3g@F~&o+`%>z}pjyDdH9 zU$Esxnf#v})=SXolxC*NkU^!{Cr#*hgv@#jMC&arm;|jy%3T~)tWVx%=B6dd59p<4 z+3ypzrx$aZxRDGs*|W3S&~}zZ_IHH`ly*L=queTFHUj_Jvq9%nc2oRFr&WETbO(SO zz^YnrUe?sjV3xE5rTqG|5hb7wR4M-}ubHa$Z*lbhpIXgJq6PnzWKB(CH>NG$3+YYD zQ|bv9B_5gmC8IWjPn-3qL~KtTB?*t_k)WNvc50i`a_ok#2J8lorFv1h4#F$df-Re! z6Cq3&T@4sQ1b{x=gSl|{c2lcd!5bgJ*Z*ZXs#npwS?oARNcWkfZY-$s9rI~X3kNM^ zKJC5oA5Wqz(-}HC<2SBNPCA8fXCz-xLK3a`K-&}ddY2p1S;!=T8Eh#&shw)M4XQ=g?>;%`edYZsgJ8C08>n77&8 zo7w}}856BWGc{Zp)_}-nha5!_roe9YnU;AkOyO_*5@)Gy%i2h}cK*iI0Iwu(At>t; z?o^PU<4;EQ={_IXQw@^2rZ3>{uDKyC>H(f=ORV+~z2d6N&qgatEi{~bM~yEcQ~8cl z-~}d^>(8ew{#hG+#oo5Mz~w~*vKH89xq&RR?KfR?l@%blnW+hW2Ypw^Z^S#8V~)tpRonmR#O#BUHa~F1$*F?-QH94&9%v6(z}GmBUyH+TG?eNi7g=MMFhc*zHQ0f@|Hkl z8*1GSEVa0Tl85cj*lLs=m!&mHs;p8ko_wg8PL5&WP@9YEr)%DZZ^4NpzNV2)$tsb; zIZj`oH{rBpOj!)G6yGd7n4u07`@_n627SnzAeCPXM=2NzNK+Rjf50$!4%iDjpk3N@ zb#qc3CaQ4xNzwwHT$i&6`NwFDpOU8``ITd zpS8M7$gQ#O_+To!S225o^mQEcT_o$DA_-w!I@^ZoeNN-T?!C?Igc<>};Ir z15TVtmy}V{G^;_f28kzM78@(OGLtS8^_FG4@)?8oFMMfx8N3|H7#&3SJ^o}aJU@%8 zR^7yAW|t>_4nI_IYFwQxoKsmw&_($R$I>@#%^uhM^d^bG33dlU z^;S@9HM7WBjs!E0Hva9MeJSnMck+X68Wx{)i@i4a#KF5I6)#*Nb&XG#RQE;c)wdTw zMM!T-v)L^|hg2qCck~IpXq3xZG?aWAM@QT=zE*7XEWexa9|0Bki#W55N&GOanC`c9 z7gJ~UX}qV04nxxok_I)_gG};$el7*W@$^l5d{q-Yak8bwdm2gvQ$&67b} zYaU`8r->r0z|Vh*1%KHOC#=yLJoe;4wUDL_KD@m|lna&{ywAY;iNCm%9<-n39bIWd z4~38s@u_gC`2)zF$~`$$CU}}7g2TpoooBM#4gxJA$8WjHkgf)-t~WBZHD>8V8HT-h z>3iHsujN+BS@JcO@MmWc!Ks?SH;?5Z0*5?+dbELI64^+fBv1{~*CTY~cUGTqGg6G&LJfF#=olV9b*SID6Im~Aw)nf4ahdj|~Ncc*#jsa=G1m5|1Ii(8q(64OL+ zdvieNOS_|L>bJ}%$!ruT_`dDZn)QXvV0A+#8^@$CQECm1(i~A9Tx>|q+l|voIQSaj zX(e0*WQ`#i8BmCR=Vd0i=2gFf;IHERM^Qn`?(KN-hokzIHLs@S8@I;COY7^EpNE|0 zX2nZn;#H$}$1^g@SO@b<(EkT96F71JeiNTCsI}8zu>9nhT#K7{<=$q6nfGb_Y5Vvw zr^#`#F+Q|}$eK%tdFoph?g<{Inpolv7ar%sy|mbyN7j4hk<^RLL$B;0B9GQkw!1*d zHK(?8%07_IyMM-X=$wQ5>Dom5D7}l3*3uVcO*M3lHu^je4h6;4Vt=Cj9mb|s-QUfJGw|qs_mK4;vj;d9> z`mFj22m1_>oO_J;hZ|~W@g{$Xb-2>9o#qt)s-9!sYe6BKgi3=+SOR_>7(potZpLt) zZl-x1u+F$lC_y-<;jmKNH#9nZITy$usrdQJ7eeghN z`lr+vW8$-2+Nc>XkCHqO;vITSLXku9Ux!=v}*o;(I1FO%x7sqpOgIX~d-cP;LeDVMI`VM%i|NZ|`N+ih&p{>j$+d)H; zbQB_cWbe&6I8jDsC1j`Uy|;6W?3vAR?0xKYa2)6VKHvYn-{1Fszqk8%czEF9obws) z_iH@I>%&Tow#dqVTv)a`vIkUUb;Ki_G{VciSlsQ(^4`WY#0*He`U{FAtQWcyXDfVZ zIL5Lr@!O_wyiZq76;|l={cUGlqb6Y0}-xQT>zHzAhtfZZC0%@zf ztpVE2R>n~(zB0YN^?I6mYLU_No||C_?`f|+Zr`Hi%c~)qob=;Zjc`V7hUcC<`h5`i z20wE-niIDaWe2N$Hni_oEDlui!12W3;=ukFs5GGn&(w6I?QRA<^j=$&y|P1u0X+skh^gUcGcl#+hq4cnw<`g z!->(TRkbcxSIzsNZectVpLc zIXiN_sna|n&7dSMS*u+tHvGjTN(aB%|%=ID)3kL zZS^F$6Px8c5c_SqRlyx1qzwYES-4k(SS_1AhjKesNLmfA*{%K$EB{Y$yXbih^?)FeKdX|)c{J}w@|N0N z?9TbPJoG78<(c&v6;fQgbF!yRu_=U&wPeVEii3&q*B@P(wZRkV$@g?~ENh6PEsoM# zHsjFOpn7^`-YQpxtbTQ;H^Lgb%2jEkO1fSYC-csuHX2zyZk0L8uWFqSx5L;25yE>Q z{T#^d%cq1MmmZ@)$!p0CHOfAv1b=lN(tAf;rvqPM(DB$&W%9}ofs!2oKw$PYZL_i# z7kcD^7toYLU0$%-!GRK!-vluiWuoPH^E+=otBAnK_jB~NF)y?EHLZ%nHQNOnpL($c zy49IyW;33zu9O({z+sHMVp$o~f25{8$ob#qNNdq|f zJ&5T7V==}=qh@3wRDN@ABZujqVuYisTtQXKMOkZ;&$oQ{n-h#TInJBY4%rdC!?y>)R=2-vZD=d_fFyd0{(!yR z3pDLBjJ;(#@;Ly5F^SxJpzDHhs;{S!UiPftB7+y`G;y)(u3{L@V`+0}vzQ$&%yT}E zy|^Cu+*F}^%~ID^`k^{dv7d<8?e9dLW^?>lSmQ&zA6DZDE?1=jTkF=z2Nwp1pHFIz zA4K4X=gm(3MFmDWk3YWBuD{jC6fFwYZ!-(lXASQpCL*ug(}?w^aC|Rgm3ThDso{>} z6EL33UHzh%f%+}=Q5lN4wHt!EA|0cz0__4LW9PJMfATAS>F@ZA(ecgzINF^%6iJaW zQ-&TOFIoww?F{NlyUz(GoUy6e@D0p!^MdSKrXJ&eY<2sR%cvdi4JUDS0ahRui(e1$5F%Jd6aNobcHS!3!Hx)OA5Bo0k=!iF?7ZI>Mh#*6u- z_on#ar1nIEm?3wAVr+_-PY&!n2(8GM5Bjyg_Sx_Nh8Dx)kj zDexXaCqRJgwd{ZD7xWFd)x97XT?CB0bLvVD>xG+M*#_QOWU zCW!HQGoKX>3X(%hdNjFG|H;gGdC5=w2$eo#gWU28Tx{bhc2#$r+&FIMG1PtK!rE!-UF&fc3U7%frY2@SKhaguqXUyW zq5Mzgjq5t4K~b9*$tWCsTVl-ceD90?75?5n3m%si9e2`V?na$yj} z>kBqD0UH#-d2e2txY+O5#{^qC?Gt7MD?Z{WY`;6{kbu{6-E85+D4v~eU}z)Re~{bB z{HokNymnPV^mc4i9tVS;v8O0^A< zGruA~c3HHO2ffZi`<44&@ok>5j^puPYhFRty(F={;}>K;Hk!xTuGgMEt@CBLXB@iAPgnmq zj#}Gel$#-K^-HdkxA>cy@gHoUab?c6OEF5rO|6^qRVd(0I-Jc-vMKBkR@G(KcwJJ6 zUTi!KWzYhdO*OL?CrKuGW!5AvvfbX>?^iB@VDWv95;y7qB}sed1JvICqx`Iyxbk-P z&eVbTbd$Umhh$|nG?;!+;1c4JAEDzj8;1M_M(Cp8D}KGk_I?Kberdpkna{5@`QgIS!Aa zz)CRQ?JQ_BJOq_2a>|X}SiKH``Dw@Ae-G$e&1`^_C7$8a*P1qQlF(n*X6^KjUM;i? zWTpD@`FK_x&wZmcg=8m)f%tTzRVOHtW{f^Btg^E0O*E3#xmqC9=hlE`S&A=1YB4FS zj^A^G%7)d#`EVk^u90~XK8}wst(pqp_C0Y<^xG(v)@;&|HhiVn^O{d&%3Z#!5&nvW z@3s?Orz5s3WdBh|>e*g!U910KT`mPvsoLd;rN6f{cC%)qiH`nKD1ocY(>fYZfH>XW2@BZnFRcY z{pP%TX*NuEHw@iD8LxfXc2 zhH||0)H2E>SQm>VD zw0>*fb40Q^os(F;Q~Ex4?sNiEd;uy%bjtrNboY8rJ)C5SxkSbD-%nf1?pgd@-k<~& ziX!Tr4F`22t%Ib!)-IEpfOV|3xOjlrW2}&%b=7wj3n_Sh$fGCMddA#XSeAc`X3E`tJ1fQU6!jZ`vnQ-0upk7o9dp;U`p|+Vwn9vQlZpf!yZ*mc2#3y{EMj zjxJAQI=IDkCS@5)R_ecl`4yH~V5T@WOh}k4{8n-BnU#*;4NLCwP#u_RUAAK97;JHg|*0HD*VV#Q= z;D-)X3k(2uswJkuzDne$6H60~A0JMIxoXP;J-d1L#4uTW|fNRG9$(qVRu?R1AE%aMDO zJ)8S_?eQ1o8WYtvRm#~KGVdFOR)9fJ$Fobz2$>V~!J`Uv)#VD~MY$lV3%Ee=byWOi z$h<}ti#-YSChS~}PnYCY`+B=zR~hZBFRS$ev@4WZ@a8h`HtCZnH?YZV3Uhh}K-E8+ z7It1ePsGQdy8P|!knO}^6h&&X_&V4?hsUTw~ub&BsvatS~rEPJ`8Wj%3XpGK$o$ijY2>q(R#JfmZ1imF0Ykn+*qgSuK8{sbd*<0^K|ElQ(_A7-*8CEueOV6YprG?jVc{A=KROS}VI8 z7+(IDMEUm09goKLI|i;z<9@HsytU}Op5j2=3a<+hoBR6K=-wJV>)9*(SI2=NO&@qh zD60x{O6$QdOeN!rynHzma<7-pFZW;(jQ_L#^QbkB`+{qA(?Y#4Ei#T2PTzX%!dpY0L=; zc24d!0AU$unYFYy#O#x#kxhY0c98!f2)iRn(O!V#IVXhrg<-Z;fVJLEE$g!3`L0}s z&8a-}FwV@WFyHHmMACOk;g@Ta`%h|p)dIcPZ41$*v>&aEgOA35BXP1#_sHI~$mJos zee;#cNYtUxUIV`;?Et_r-eNECG-^`vqYmwdKxtS942EpTbszq+^-x)7$}*Wr;~J35 z<{zwc5chzQ&FHDzqsK}*K;S?6l7ng`S-@Br_->O!Z^}3J@|M9IvEPctaaf~g-X|TNQ^+7Wom1U}org~kf%K$BO+!djP zjQ@hFRtSNH^di|m&%#=MI#i*`c;PLhKg+)8Fb?)Qt4wO!tzoZ$7)K&zV$Mv+g>X1~ zUc@U*+(_Fl9~lQuak_QX(N+RcGKfVe19euO@TX7v&kl9r6dCmn^^te4by~)22LCeP zZP9WC2M%Emv>yGiK9&p6?m>@WUB_Rt0GfHe?syWtjTGdW0H$U{h0`{G8s-*D!Kwu2 zafbGA#q3J%TH=0cg6EPHa!|{m!*=QeX9T9u)oc006&5>p(7Q|$kJgBz1xG*$KrwzW zPBpYIxoTu-H;Kjg+;IgmTnlc7*!Ezt?@>6o%W)I za}GQ|KIbgOtoj>W+gkF~x>E{nI#v6?@eITG*Z<*?RRE6Oueu@toa~wOI?cYGkyEk6 zl^YX7rru4`>N^vs!dHrlgUQ8wVI%;yhT`0D)=zBM1NwERkQlDe-|-P0M`Qy>=6+Y5uXFI9!og zZyjJhU-5-le5F4hv;iV{BiD&KzVFUDDv!&IV~Vm%$3`N{vY79_@eiym6O_Lykn?JT zGafM&6B*@v@A5rE=Fns@tbEerLug`w&Pgkt9qtnzQ@(X#^Rc}=XP87O#`bHzQWW{+ zbtxYM7yG4@f*TtX{}&VK?o*AfL2=SrTVQ(#d0z8&wlz9&&D#5N7M%;pX(QxO{y=k5 zw5EqWbI*%?w4p-aq42!t+wl^6Zl|A4E)0fK;*?cBrq$Nm!zFS{fAtOht#JOPOPeN? zSdyQQ&wiJ`7k|&}<$gn||7;7Fe>+@PD4> zN`ZJe=La=8$y0Vo;j^e(Zm$FhcG_;>0mI{zFhwFmT9@h|{HNjobS<_Dk}6kjsSA0a z<0I>=_6D!Q5viM$Z)Z`=PCDon-sSXdUyA{?kq)PS55#EkcP_mrCk5sfg=}9=`+r!QZz9$sYRkMZJ}*Y^$Cl zkE{Cmh3W0pC%S-H;cHF_01de&EvDDr!@99je<2rjSJuk^#MEN zM8v8OZ58xBZSyRl?Q>%`qpZr?26IO?OI&NYMQB`^mw^3Tm7NvX`~uiYCDhS|Y*0Pv z!i1MHN+t+{#OZdKO|z%o?M^6Z-Lmfs3BVRP zfWF-apfiEm7X~*_of|E7BZDU@#A=JTO=~>`Sl|~Sm#Cb-TO0;9#^{>FFyNnUG2hEX z3h)%;Ydt(Hml7zpS&qNX!?D1Gc>bGeqWd}78bVZ{FN$I7a9Vt=@kgBE?HCG2|C*oj z2?r8ni~#UE2gW+L+h}`+R2DEBuUZC>7wXMZrk!$w^52gAk6PqvH}uR|fk5>B431!ts=YTfcp4!iSnY@lLY%Qqu&xt}7Q^1mj^VyY*RMcc%QDexiz|X>{V%cF zfuNUcd)H1A9jD)IA>)k?nX7dOvA*;DJPr^>PHoY~Xf| zv0mJH)x4H4w)C*r8E=lt*ip3uum6v)Zf3HwDRqG6PS%IsYyppbIi{M@b}~pTfhvcB&)r0?fL zEj)Djl2hLcopD(vZF)eQ29h`kX9dDa`kTs?5-L&;tZtSZ4n`cro+oudc_4QerJ7c5 zfd{4t#e!~RviVx*w%og0pp|0sB~3{{tCy4tlA`iOA@eT|Hqa>W9yi>#V#dz`q~RI7 zz~wfy7&(iBMslsq)v+xyO-~I~0H~+3oGIfUN^)34&AR@>`U`=)^kaBigRf#1&KISL zLrR)~9A@OS3u0td-Si3AGM~vkY~++USp~Vn`RN4NS9f$w=pbx{J1B-E%X#uItYF3VJzt1f4zd7f& znaHa2?AsSU@p&Ri01sf-^nb4F>o0U)Nz76IGBKv>{DxzR(;MdT@Znb@sNAyz0l{Z+ z!u6r~H}IMLun^u;OS{r6nP`pt#;m>%m%Wl+hP}>3!|YiNb%qVkd}f%ty1t6%D6b6O z*y<8d(@>xlH14FdsoK#|w~o4jVS_5{)AN&I6!k!{at=)JFeV8P>aGUzO!ZIO9OO5# zQ<3_!dQhvVS#JWrEETB*Nu_2Jzh_ys(KtC|7)m|e7`!E!m0L1mK1pf`UB=u@E<#|A zqH|vjTL(6ha)BHC52BGYF{hq1Z|fXnTM2K+&VmH@68*!fk;vh zKAp)E+^&i?b}m;?`BoE1(_*670otbzX71oB_Q5ljps{$M6C=cW$0PvJOCL^G?jnRV zc5ZJvlm-kQ`>t7A|IQN#K&bSWhw}9!wVls^vJ<74W$rN=WC!f{=SZW?NVDlC_NFd2 z`wbjCMuM(eBG$1-K5?W>%=eX+UBfy_VKO2<9VA#+(8kB=3HI@xRD!UThPq*}&|%qi zj>%DnE^6Cm+&lYA9G4W{1FVHF7F=(nv>itg5ShU+;4Ldtw|;4$TBAnPy*QhiRn@dr zJKaDf^&a5)Lqz|XuY@riavn`WRwnkopM|3#T9You6qu>zXBKL72RE%FKF4zsdXL6?s!}d z8gI&5!+FwD8mA+UY!IWf0))vPi#mh3AYx55@|S^jSM?rheVHoPH?D;6dERZdxU>#1 z9K>bJX+3(QgQgA6E8Am_9?>?8y?E4+Gt`!DvUY1%dD+0mj~rg_8*q6yL=Pv*8lk+_ zhpN72a3AJ(oj8wc@2vQ6yr<^9yY3Tb7h`AVxxzDJgt_7Q6`L-ItD*a{F%tTQoUETG z4?u8e&^cHF>74p|`;ltzSUYXm0oi|E(Ar-+k~_?TL4vUfAsEdh7e_1B153qT)PWy>^A!Bv$|3De8c3jp`zXtI``k=}G|5Je2n0$1>Or z`Cw{^Se=%3kP^y?`PM?jr@Ah%yKg=iW#rZP`aosh^b1Zhw|aNP6$*w~WmA02tyszs zy{Wz2w~rMv%3RmdcRzr^f+Kh}eK&4IYF+RG+%r2C(#~S4`o45lpyz1Yy*l-Pc^{zP zS7TN8szD1HU8hSv#xjB$Lllyp^n$=&#gkj^`HDyYtOhtK<1rzew3+hb8iT zTYyvp;n%Ygki<-fxZmp-M;U!@Lh=nrf=jYdNSdEWF|>2&Xlk!XzRUu~WIS*+w?0(nisso=Gc|6 zmrs#VTz-4(-`|wjkNbSr|2>pu5eQH$T zoDD@ctDKI|s7f1$t*TXwj~W?aprx6uD<--gO#Rd2N9$o88#^?r!>Z*8_#K?#O1au& zlTux~{pZfux1M%8H!D9%Q1IOJBB8?%GzdCOjEo~d1!1ibAwj=)`(ic7kv|@kYnEE4 z)To6SWN1LxNZjd3*Ng(yTiIN@gF0|tZMITMYSkTfqSx+DMK0IwCeoM7fz(`C&bqI5 z(g2c=LU)J7VZJk%%U+RB4%)ecBxChl=&@-J0Q(88w6C z1mVSCyxY^wpIn~McUuL{Kb)voRpTbMH)x3kaV4008j}m2sIYT^k(cmWHqJ$A;W#l@ z8rH)JTjjO%G5i{Uu8MTB5OY3*%Pl5EtFS6&;!Vt8i6ITTEn3(t7Bb2tS8Y|V>)v6# zjDYdLcd}_L7wWHBf#S2sM8_3l(imr0dC9e41v$-Fg58Zlmq$_;P2#j!uMD4nR_TRG zZv}L`k{L3@r1{#+hCQvq*K#`JKQ>u?79o!3p;?>{HvGD`xVSsxS}D^gHS{yQTcZR` z92)!|G z6@$jRb%f--pbN?PTz&NifP!C?XUk~g7_M^4; z#u1bx=(IB>Pgz=t-dJdXAuGIM>9#)_-5nm$mR9BDN#_tF8YP-$C0~y%l!+9qX ze?O$M;-NyDAi?OYRgQi&^88=Fd6{2WzXa($)|e`|^GbBY%H2^a?0eIj z)R9}8E>>9X9u=LyOwo|-GtZfXqZSW!zGsBRK97;Ar++{0MA)ab%v5ZX4jC1>X{~fj zP``&BzYvyNRdHwuKhpiN(i-EZ4yCE;=lAH&OI_K`#P2s5MvsuIjWO!u?<2+q;At_I zWhI2IgGxhmXB(f@H68bQ;SoLFUg5Y1YnyAjuwLs0M0BZD8sJW(1auSzx7#1L4{!e+Jf#yzKC$%$okAwoTa{&^pBmMr;xjLZRz7)@GETKu*eEOeO>`!m#pxe$SE+o94Jq(e&gNcoOF3>^ zf!cn>bYEp7_oKEaWqq#>E*ahtDLf#>Xq@DcY19pX;R{xBeV$1mY`tj6Jvz+z`rI$% zhKNkUxIij;ek{VtQUjIeF@q!)sBp8Wnq^Wy6$i6N9Zpbo4 zsx-u(gYZGXdPpwi$L5E~CWv=;1;h&VKp%f8Ce%eN4msU_Xcg2~!pR2XVWswX?b>RJ zs)2YrBYHmHd0e&ai&L=SV4|l#Yd+;`qU-tNXF8ixGy5-P!bG*pWXVLP5V8*i>zyE_5ju9`TC29*^JB^IR%g6h4sV80plxJzn3}TeOnu%c~HIu&-w_> zje6y))?{HyrdsU#OKCmBnTLT*oYMzId7t5OrjP%DLFz+Z(Y{b^{bb*pn*DDQD4z?d zC}NTon7A=4H(ni-X2hq$(lc-PYiuoy^QuZ@&IV}Ieqp~m@TfR?=pGxDU=KM{aoCGC z+MOdXiCT_60EF#v^+p?#q5ATmkge7KYqG{IIfz_{V;TI)NtD!qgqCTs=DkQ9k`wI{v6kprU3KEt>+iH8u9Sm3f8CmjT?O>bk91OD4J9rT2{y>YsvqX1(sZ=LCF~Ndx zcFr?7Vf!O$1aHcITsx^}?Y^q7RQ0!U&1w#DPjYO=Cn#twpV6XFC}RFy!8y#hO#c7dZqx+vWU9*sK3DROEHgjX&#z*xTY+D{TyTY zlQ5{MAuHuDV2Pgn7PhiPh1bA4XIqU+nV_-tr;SdmSrI*}Fs{RkV<$YKwc%)w-R5uH zS1qMmP8=93vNk~F6h6x)huYolRcLuM&+$B6w7nW7(cR&<1(8VIhmYki5 znwH@?ZD`ul%O!crMg-l2@2&4{X=$;DaR&%WQ6D;XzQbQS-+G<(S{ zgR;VIT6)g&2~IN}opEuo9EOSB7R)#!y_5cKzj`fWVqnmlkK%UP;3!#!f%HmI@Au7W z$p{9_V!joTHwdYgbh5Vw#Q`st;?JCPvX5Rb8lq%cbj#qxAFx-AI}v+_-&R-XDuwy) zj(nFB)*3wOM;f6!;6sKw4LR}(^CH5#I!oG>JQkJg?iofc+{N%Yr+*WabulugtX3NF9-(^|6YU37FE39JEI&uOeMmyz{S}03EA$PHKh9 zp^)YiBa#vaAFG#rB{+(7o1oi+Yj5BOC1+1Emew4SwJ%AAWFQ}_CgeKY?jnDmaVkj_ z(%I^Z6-Q-MIjhEJ4(iZ9WO~5psFhJNsP=jq02`fr1Dt{?F3yHZWH1###zwT!C+v_U{*rLdEZ`+(OhP?XcJkhG&NxK9nPbn^9R^CtR!+YT@pS zo-g4ui=?9J=U*6QT~2k0#av;%ZCPFo5#gBiwGY;78z zC=5NVW&0V2jbjb_V$5_97uY2!j!T4kk6gcbRn;{?;>G-dUs zHm^ZXzFDY~yDru>bkXfbL@KsimQ~^Iu!IKkmH} z?xdtnsJBy`TmI?gjUkkqk9I!pgj&{WXc3?FwKq7YezCq&k98^grw86S75j_za1Xb! zOnWlx4oo#5v%De+{FbIYJ@vb2BmEeHSvA+dmP6gnD7F1V-01A6-2Xoi8P%IC*?XBA zXa62Q&Z~bu`CSwvQG5M^Tm0$e_$2Pp{`J*g@`7I_ld;HW2t)0k%l%8XGhUT)HOQ7u zxu2d4MVYG4tk{>Tk%R%(*Im?u=^d%H`G3zl|6bJ;U#^_DE1z;Cz8qSG40$|woG=8n z(hGp7tCg_NVvp3(vR8Ep`!JOp{#z=8;vQzB_Oq|;G<#7D^nHaVc1IIaIBqui{n_&V z`L6%J4OTjH+(`w>)f*P$O}54qwx%l(;2yrpBwNIuJs5Td8rI*xK{#PUCD@Fv{o*pS zYc%Lkx&J2ZpV#2e8k(_Grsr&y0kt&Gey;U1_i011e*k_(-g?hUb` z`thx*z|ezix3yVlL?cXoEj+OE;yHGIC{Q}DIh#8(@35i-z!N&3+@Bj9`zm?HuRMN|N;1r&bdAf3S z0qM7}NRZUca28lPOP9GF?De|^^Hzq9@kw+RXFs;J&qJs8>U{Io81`V3Au3>}$^a4T z_BCb0X((9vk4^LEqWDWuoi-UGthXSFH1yDsYwG-5n*qC5`wO@o)o7TD&7iAIWXLOj zzgT~sm(pqSFJGDtlkGC!Vz!)kx1T|fx7|XQoDg5nP3@?7YyNgoR&afc%TY-zXUc_> z!`mH~XaXeF2Os=e(EMDL`8ke#`L6!&@72U`d4VI5%innU!Uspl>-b}Cc{!ddQU&Pi zH2Wcc9@^iJS%!^XNgt+?&Uw7@<*w9&CC0E|SQ+_#)#Qt8G-hqkZcX^ppk8$bHo zj??sPg`IgGo*)+t%fBhqp^zff?_G7caB13OIQ*wYx%EFo>YvBZXLmfbO^{muOEEmV z0y+O?A>)l2IULD9_ypOc{lBg+C;8{k+cSNtUv=+E}cg398z4&yB03CS= zxOTgq-*4Npw*kL)lH0Y0-H->la>*6^!REVHb9HcddBd+WaLE%=zq>!jPcG%jyi8+X zgk4|R-=g#|=zaE~Vro0d1#C+B3HI^u7Qw$P$G!ZQv6H9y(!C2 zCjxoRXv2Oku~+t9OIbboX*>7ZqyF&L8?2)W`>ixR{#~DP<_eMEji=7KDXF)DyCjc4 z{2zy$CG&o+Wq5veUK2S|N6#?J(~ogY6QUdp&k4)peB=K6?UYHjboAX|=lTO2rL*k3 zIbGPJ1*wko@!PvY5Jpq(ad9hVWwl?THoyPq&CNc-Z0P6h!x`(IbC0jU=?gQ-;dVDI zLuVk!#QzaLFbw`WSb3eCgKc*q1AeZT-&d&!HeZVH*ZQ+ljaJ!<2et2XUiw{>JmwW7 zb5ksIm49F7SNw+_54({-NUsaTz{#eM{l0|zZ!a)KpPg6LGd=b{>J^n@e4Qk}E`O&= zCRS%=MT42O&raw$$L~J#TL{&4E4{0RxY1FGf=WMxY#FVVKw`-_G{#Tp- z@wxI|rZiw8v^)bGuMu-De*=e&&(p&a+3lemD$|uHsCrEa85caB*|z{1of&0-X$o;mP++|KV#^P_7}tP==&T14zr{ zk0FQ|O;}EDrFE>>Z(j-0Nt)J*o_pH0XP)nuqWm&!paxFaJIfGX{zPwxVJ-D=sF4 z-fg?*YJ_s_2EFL37B^z0P7|_wx@JH8{+6q}x}2^C&FBsP!IbtAa;7g#74)7nEtQ{bd0RT2G=|mM z-Nx`79>yH*+ivtt7UM0MUx>R9nz@}r%^XodlibliD%k%!%D?=iXGf7l3%^jnbW2uk zwj!YKM-}AtYA7M(XvwYw3hzIsH0fGetXACmDv^d|SLNigssv@>u)~~s{VD2N;|4!L?be9G{1 zhGYxXe6?JQl-}h>sr`NIkNG32lH9%>MPX)Fbhbs~)>ZUjBjR%&HaF*hM+Od@sQkt_JpmE{k$YOf3%lThtwd&U z>fqRB&yxQ#Yp8gzeT`-m!kRN~zt23(>rmRpmo>wt8Y2zaW|27PhODIOHp+ENEd}EY z3VQAj##@A?J}X48dbCU7*jH?j_!lZwYdsdq@YV2N8v$KJEHB!qvZK{~hgW#fIL1*I z{YncNwlh-Tr)|jM(=wIpBw;;ThMKy=*k-ZhB1xccHE_GHll1sZdo-k}@o-xq zSUe>fcE^E$GCa6G@cAy+0bKeBCx4V)%&gG5=)nHBOVNK76w!B`KoNaejQzSmg*T33 zoFNOY?413yel7!9vYQ#dWPX|szthA}t(v>r8q^sVQKFE`{6;%M^Cnk&lN)*ELDgD* zZ^Q;77PT#}#J|JHw=z<6Pcvn#S0ST78J3(|-|@V%_h7U()0ldL23X1!F}x zARlnrPr?lPVg{P|K*FPu-tRexhX+?nxqs}>Ol5vzex%f0*)*AozV~! z6k?gXti>ZP-0|ak;8NvEp4+Zc?k4e7E~+!5B%$<^;olSd`47%T@8o$5KKCBF`%vkW zuBtB6=B2Ve>WPn9FJf6f1#_x^WvMwoDr2ABWf-q#$;{E4PZ(%|XG)t7Vmwh!I?iTj zH*~x}RC>lpfBdW|&H1Il+_mHGEnGX=Fe_vJ5E#0TFXg-8IBKT=WQc)XiG$d*__gv$ z@nP-d(xzSKhTwNreuU?n$kl98-fI2V?E>PLl2_Rp!{6?|JEG6y<>V_Dt|RQngqL zqohGh?pU&>2S_6H(edzM84FBCxwgYb%Rq*#1KfQEl{GGHQ<5m6dx^-mupfFBFIirAm^j;539h(%O3>8LU|kRsWm_4=2Kglgspshz5e1z%FbTvvbu9r@)XXKJi%mE zndVn+xzkrRCk^7>^{6A4w~d421k-DPcY0KVoTx7R8;|vE^^B|Os@sD{3!Wke;q>q| zr?xGAOqo9!?rOrZqFaTkclpix(^blmw?hBP7ZuLY9&Cd&$|@Ki#tMG#20!T zG`KjArOORtah&%I#H|cd+zqTIOC|9hCofiR0%ow2w54oLD~>u)6xh^-b}0$ zv6aAM-Ye^29c@|}rEB}EdnNtI?A?na9a07@neWtW*lcyj&TQ!{^gb-MTBuu}IGwQH z+m$i$ZAI%tU`_GLA-6+S=^pAvhB|8XvvOg=D|MHSaKP1emDC^EeZt_oDSA;S{(%{_ z@_xGnp?l4cCJ@B6cXuDwQy@zi@|aO`Fw!mZ+bH2tWu{yh#3@y9{ctRcU(NJlTs3x|9)+n0qI@|u&ez9Y&jpv zDcFYJmPKOL=XC`YFIEM2h1wEUXof1+hzV9jwHm{NkoBRh<)M0_b*Lnv;Pl4$WAZI8 z_{v9W#+}1ZDSRt^{L;~ORH4ChpRiD|J0sFUW<9q??z@Z3acX+Z@(mNlmg%_hsKDJu z367C)5sXEKD}=bIIsN_XP1&)2P7zOZs8P2EbYyUxXu5(fDv6U^=u2uaUrS0fl<48_ zqsCDl+938?;#us2gA?uyqhCtuaisA^5aAggK0+n!buGrS%p^_h+%>hRYBP5aIJF-Q5kf_v_=g%X!A~qpYhlVs;_s z2xXtVM&&L7Iv%z=p3=I-jv2UDJZ*}}@F9qMe#f}u>UYOOk$KPA&~i#h!YkG$2gY4R zI=j*hs>tZ^2Zr~XY;go=6L~*f$Pi~GTA`ZIJ(B5E>@=v+ux;jxx51laX?DYfwm*Fm z_Gru!^|Z>O+^qD4Sk+rs-y1{hI7ly)ZCQ2~&o}HF=~~i`4j0THNF_8Y;is@1|BtUP z4~M#M+b^X}McInbN?F@b_7+LfkS)uQEm?-d3}y_eEDob{nYO`=8wj4^qrZ{dR^CfUgrq_mFRKK+O17PqZ=hN)gfaGLNT7U z(u1@Qdgj6TVPcW}_C$wK#WdO4nx$ozyRc5oJj9{-t7IL);aMGDxy#D)Zb4YDc`I_5 zHf$&93E3`h>gj`*Bm~TX34L5vsJP)d9yZr?MO?!ne|ldwbe%^n-|rX#)}<&-eYxU696RJJXf=+yC~tu?mC1o2(I;Bojb%C^FGt-|`UNa;kn zxt-YdNsE6R^Iea2Ti##q0JSQw@?V@*5Bl>p0twf4mmccntW-IJlKW;eeBH|$%1c`$ zyT#C+Irc|VmV46H`(8FVr`R6;>Tu-PePZ>LmN53IB2d?u?NH-9&b9eV<;jyL7J&Zn z-S8&g$y>3n2a-)(GwxPqVy3b8X3>@QhVbO zSfg37r_Wq3%B;qXA{N~Uy&s|^{M%N)mg8rUtoRrYYWGxbIo`L%1|QdM&XBZAp=VJC z>BnW)rWo=X#upT37cnL$2nee3spL#k`jN699MwaJIdeo+s7o(A9CN%?ziXK58J6XsN(>^x)67bs zbgazt3w97!PE**R6&`dnc0hhfk!%gNQYO9At zpifpw`7Ty_5KxUTa_~qzDa3@#)P~yL5EYM{8mo%ux3SFmIXQ^V{LtR_is7~$K`1V; zYj1{m6ncKWR@ovqszF5N9vL%hwIr|xrOo(Ka-BAV%4F8x6#2nBEv?ptupW5_IXwh4{T9A6|;%HVPAc3af=(zvl+)Z(`mZW`N_rA5)UuA5?Z}I zSWT7)s~h&jTA?D2Me^B4mP1QeB=%Q;xLKOIk$yr{EBPwA_Tk1FVR&|N>Ct?Ekb}x; zPntJcjpO9=p?&Da+0~(qxA@y`jKecb#Md7CXsH2!-b!RBY&WW+S3q;_9xgI-K~77A zs?{L0aKzJU`1d9r)T+ z8aP?803)Hr_x^8nW0q;JDV(Vg_Gr(WXI zXGx1f8m6vR7@s80GsWa>;2}ymQ9x{zz~ot5I&6`?r!*5#)2P&gnDANwV4U}fhowcBd}v8 zivjx%^>z+_LnG!mi8CS0pf@O&=qrbDv;R0qug^uaH26ljORlV(hH{H6tL_Jk*Ib6x z*nNkpgzdmM&5v|BjE4Gfl6nlF2%dNPx#^ayjy~&j1V+fdQ`)QhY~AIw%aqGG$@Ypp z!NIN<6uRRBUb3vq-wy;CxRl`nrqqP`k9vQXf>$C^Ubyp|mc&K=$vKV3}GQFfzxp5vfOJ=aid zZl$7J^Ntk{fJ7AP=7!s~jmo2F@Ft5zq-k>WVfHyW`iHCL~XK|BQto%Vuaf? zvbO8z!{Z}28&J3)-D@l|`{b>{XQlE1Tk9GVVlYfW0G69Ye{g2y8E*zJdKfN;oGTnG z^Y!c)HN$Zzo@ZKVYL&lLY9M-tlXhg&Y7UKyb?7L{R$qv*%@^o6L0?)ukUMv3-Qt~j zyZ3wNsWoes(_)4meL*X~q|MD}kc#((@@n~S+vkjUvdHltCpj9TvkW0!5AmqoKM_pPk17$~H32AtQ zzQyS)c-->zt4fn|u^wbRie6wpSYpYlL~oTLi}Fg_e}z+uMqXXoNK}47DjXI<-e1e6 z3k|pONUkS*D*i~nud7HJcm-uN>lu}6tz7J?D}6&pKJxAVGBup;{8F3tbZf;oTXP{@ zcx8()41*jl?@wz9Y1GN5O_dMvXj(^8?d|3t55uW#J!vl##TPoT6O64oN6mM* zEJgyPLfmo4=G#Y1VZS*g*ATaAp;QtwSNA?(#)Ed<#40cpMwpcjp2gv3JxW)4OxrsR zGOW8EsOZd^pk)R7yPTKSBs*qE&L$-~zp`)7I-de+63;K3_w;7`wOHyhq_24Y6!2Wh zN0aK3Y-T$WPjlyT+WEAiJJ?M!Pr@ z@|ZFL3eQHnBIOLZ6}uWQ^4UNVPv7KQN}KFKqOXorY{`asoW0w$e1i|WrFR22ydQo1 zJfBT?0_09&f^+Ft|1#3F0(QJ0Vf#HUAE{T`NrGsgQabM7muU?l%dg+q!P}FTzr;jr z&Fc5I#;$ai=qz=VPF(rVQlJuyQ{%g2Fm&DIVlQ zx25N?E^7|K!!aV~hPCGx;RyOnWvlfwzSnFM@_irYh%rTGoA zLmg;eaFy746RTk)-=nfkO1L4HzvbE@83HbGMMU{=|OR9sYoTee0}^ z+hx*>Y%3!w%;*pd$mAdfBJ_R~r*(K1KjJHUU8F-%39%hQZ@+NR)Sf~U3=IP&)nTbu zu>t1ekB2$lVncn`vm_`dmb)gH8fOsguVl|&7jG&Di^a#|*d%+*6Z#bxHezIHWz_RLlXG-~Zu6Ba4{P%7{qnQ2^BaCVtya^_bR56v| zoM*ylE*~dt_-(g*yEExI4CCcppZ9ZR%`;-pRG6OiSs6CpaL!d6)cqyD-Pt0XrQ}uo zn&!FYeuRN5B|7iEzm1rB{e7AnDj+`tp&@QgKWP=JU@Q^^DEqg&9=P3e^VrvvD^PIj zKdbpE%1k$JA~DJ2A)D*NdzRf<_545O`e{R5Lc~IXT|=@6@r7URD33sxA_ts7Crs|M zpAS|zdwh13R#IUPD?Aum%Vjm$N>%9w5vSnu7*FI)oe0~-nq-WpBvvE8%7cH*`fQ6y znT~RZU?63OH7j*G$})!7xq(hIS@BSbX3r4qF~~@RjY0{+!lF z3yV7yRQY*8>kRz4TD#ZpmUcYC1l3Rg4Z;(}9OjO$|LwJ1gDD&dF#p~MYpj$*rhwU{oy)|l< zsZhf9GYS8g$m@;E#q$`Uw0i=J&Q%+S_+p6rSz8s&9k=PVVHRgD#{m4{r=s zE%?syagOd6@VuoxC%poRJVlkCb|IQBIfsDNLj$Yls7RKQBI>(6BN>vn{)!L1Zn+?v z4pCmFWCuwoVt*tiU`Ghqm@#$^+xQ_8f0<((P8$RtTueIQ)Z z7_~HzW#-Lts6!_s^C=qRIe>4gm~5d5-*s@jY&&#{>|QxWmN2xvep6%bRVFPV^~=!g z$Gl!ev;f_8j{9;ehJ%E;Cz}g~4D1DN+}3GP#%i$SfEsfFkt85B-d)JhuIEJd8`w~&75F)L_I9E;U?!%U5ga&2U@HvB8wiWX1Wd~!o{{T8j_yl zwM&Ixt~lvRJrPGAJ+$2IW8o2Ipx1Lg$wu;Ai2su?kJ;sg>Yy`&_NImTqj-bfn~7u^ z2K(!=CAw*yPmLZuWHZ+9{At*^@3no}lDtV9S@bznIoR#iMk7=Ys`#dOW8xo-7Nwu; zs|!_z86Qa}kH|Y=O>h{!ED|9g>`D!0E9DVhqalVnm&7T;w!Ee z$d?%&b{{1iZj4drNp|5OM0v)3wbxshnjJJouD#}$pgiGP9;nH;zcpGCbS9%;ob1Xm z(js9*Sh4gb8z@u+2pH(KXJ?sToZGVbj?x)&((gr;WHCf3E)QFA_lq)T!M7)D311UN zHvd8g&a9slog-)S{pW2`X>y)TXXa2#2>)efY>|K5b@{pAi%>6A`T}jHvt=h1*#f0L z(891=XXIy;RKv>JR$6c<;dfkyCs&!THWUj{YII{CaYdXT?0R%2$Ju)p`;@STY6>tD zF}ix;h6tbo>M*@=D0|^mm)5}VB;;;1Qk#DFKToOuiGX5{GZ`oIpEFPvxgY!r+J`JZ zOY`eylor|&e6TMdX#*jo1-?I_rn|gkE{?1flcqjqTa{L)tt4e%3SpIgEdQ z5?uH6gLc}_3hgZFk)F<(WebDO^KSG!=%q3Ty+nm8TjBp7UKW%K@B|(vQKeOxHv~?i z9to^ih|Y^)fah?W&MnrDVs+qptr*x&QXIOXn|sK-vHB1Kevn?Q*CASLvLUR?@1{zy4A7 z{@cp%k`ZKMCP!%Ci|Vh@C~K%#;|bG}mo#Uy&idXE=DwdrZ~i_DfBQfX4naBY`?sIF z2?2C(O}%iqCx=PDQUmJQw187|kFr?HAK~|1Ug=6a*+OSf+ z`a+4m>K!w8a*C(_wMXmRcB^|#i&ZE_?JdsrMOcKD(GK54kT5KG|k&q*n~V8$5kC zG21+A8T@J6pA@9xaYbgoDxAv0pI~weJA$2bbr@8wJ=lU^hg$8~H96k@{jk4%0j~>6 zvDrc>>w@H|veVPskL}j@w>Z}ia&fwGmO@@eZfYJ#k(yl!d!EAwQL%Gv0@XPCq?F*PoKO5c?B)cr)A&SpYvCnXME zqpc==fQWqFH6!Rmn7hKJ^t7A_Ye1;E$XHDI1m#_4DC%TwIB@LVaOc$j?VeRS!me>U zGo{rbq@rQr5`@ldTt#(@#a$E^f6RZv6qQKs?F)v;B5d`p>Z~xF%he59;TB9^uKE__OyM6cT3nsQC?C;(Iru4|dfSY-z7g zOl}b`gW5Zj4NGc{9)Y|#ymwL}cIC2W6=u4EKRESijN%E~e}n}8^EO3{ zDdMTT{Z%njK+W1LQzB`k@1tN?ZQ_tB+$c$VN7FdErCv4WkqcG~uoN}Il#Jf`3&S1Q z*}Ez0tG;?^R>H*ba(=BUV=jTF-+#aYlWHZ^cRIUR1%2fZ$10}?%kpKYW68Z`b2`yo z(h5*(E328$8qtT7z7p+HGKUMCZ|>fx7VBgB?fCKtfB2jzv_JVS{p?jv< zu;z!xaojEisQw*@|M%M?I4-}#gRHOB9(&SctH}ST)cjA?Tm#S4*9?K@mD{2(UDHDt zf6yK<$a~WuvT_-pa+V}~;*L^8};bu&of1RQjdTNtlSH&}Np z`T7TzYRX9_RWW2D`C}gUMeAT;grdTrU|-CB?})t$4Wp{Pwzb4M&41MH|L^Ul&c8X3 zX#(%J)!)!uC)7T1T~SS^W|uy8{qI)V|NWnE{nI5n=XW*!TuOK>KkV@G>av_kI)XF1 zzQR(*pvzLK<&Sr6Y$nUZx8$Y8WWr7DZhTQeD5ThgWWnHHGx;7eE`ot|0cO z8N|HVdKL=RGqaNWzkBGP|9X1tP|8Mte|N|Me6P?=8n=kBa30`(6ZXF6PbY2Iz~8m& zmc#q6CJEPld%<9^D(2D%`eKNLjp>VgW#KN+b@x9k{hhPtNf(ow+sxMSrKnmp&MEuj znJ58-iFS&Hd^OyA7K5`jeLR^dtHX1M02=+8dsU{fw7f{D2zMU!t;Zg$^Wi^}wRU+u zICvLFJMc3>LEa>=H$?RzI&S+Xq-X5`V_}pmZ-eWyT{!>SbN#PHA9mjB;YNllt@FdRZfX>&IlHnb7q$1Sy}Si{QS1p*K0O+l|Nv_Z!ZkExf&zdvfb! z5I=U88ixOpsYTEgmfyqh)-L2SO2-9E-JU=FRRxKlKX3D8;c(OF0F*9oJD0kLaF0MRRz+>}f%Ul4?GfSrgVO-hs%Md;| zOD8r*zrcb7 z(VD1^=X>;V`mc8K!S{?cY1#Fzt%7X~k@y`_!O?^mDoEyYnlk2(BoX7bi`t}yi=yz0 z{iRYK)fRwxc0_jk?VWU;rb)-$@y2*}+s+biNt@o&D>o4X4lCr@ z+UQO1bFxcjKyo_8%Z7|SH#~caJ3D$ZVYaA|m93rvbrG`5Se#=8kl8@2D@#8C)dstH zb?*K?Gy`so9HgSI_k{;pO{h8aQf2K-3DB2VJbf54YspG;s93i{%?E9PLO`wx#-lhs zxn<=K3u70P4hIOv&ui(`W1IsT`tu4K#I(5ahqcCwVeAfb%Mm|Mu;x&u$> z^r0^Jwg~Hd1@E<%N0i(c_@enV;4uK-|Kwkuz~aL*)z8x2Z#IoLG|E_=&k{O!~5_5?-WqnBKo) zp(%>X7}n0jgd8)08;D&zy_=pznBCYK+jT|k9bnX&AfKN4U+k5Cz=X{R^wtaCeEE>bE0XGd8 zpqQd+%uZ4qd#6XU0`vmsHVP9sVX2=CI46{wJ(gI z4S5#!7AzM+-3NrQXDNWIW2k zYSGk*zw@3G`Kv@YBVg0kUek25^5?QZNy~nIliWv%k-^WJAr-yl=#~P4FRMR74EsQ@ z7ZWsi^k%pCjr?F(*3gVX`_w>+288gfa8%dGf`-T92%Bd#b~lEZ%5qRVei zdU^HqmWE%q(|F3fMoU*}w?9wW62lVCu`KUubI6xFG{DKG>-f2w>t5(oWN%&$8S8p~ z35`Tolw7TdyKFRT(#W&^E#2zZc1?3el7y{iaT7=R@l2Bci{JKPc&)LdK$k6If;HnZ zC)Lku#8l|Oaqqt78NYds8q877y*Q<7NWG%Sun~)r&PTuub?9p11&j--Zs%t-m7-#t z{Zz3wXw}C<#vEFh+FPk?(tTw%btyfUXW*F{^00+Z1p%rKA|;tND%y*E8JmF$pafht zRzwLnsKUQ0O)j(Z{RA2N?=INCuJf*opv`~#@=Eyg-JO=jK|M)umTFqXD&OOgO!}=k zUxTG7M*D`gtO`i!Q;X@j8lfeMK(_ZsQuYIenX^#2nQCaO9-~tyI}>-^0^)+L`=uXl zZvq;Cqa^b|7v?AgCfh;iGfx&ncXSj?-}%GdjP(K5JCa0?W^GlM=fgfv@jiIPL;bY! z6o2Sk$PlhyT24eSuEd~n)nv}~(}1SLmt_x(o?{yHJ(w`p;CcK?w6Mw_N>lJVN}TQE z9{dio#C)mz3#MI0yYY(1m}QUdf(Hl*O}!fAr>G6st!zl+^i5Qf#^7Aq6XG2-#xWUahbK|4aB=RGHa3q4WR6hWl3%cA9f_t?(eYaMb|mOSQz0 z$Rip{Ppv1`OrgmGsVjMtEde)gghs2p00KNnW>hxaNbehx1B;>|v%?Ejq!D6%S@@Z` zyVGHp`^`&4@jua_&icrxOsyhgq<%@zpAsJwQ)FA7>6>-!OhOJ&3ZUdZYrTT^%(oir zOfe0%zuef%^2q}K1aFq!HoOZeIlpyT_v>^Oh8t}*sk4@$=}B7)1VQ8Q){{S!%fKLt z-4ldF^Rqwi3A|>U(~<*?(p?$+;@DHYkt01Ha9$FfVn3+X1$?v7P-xG198b;Ne9*gQ zOlgq%Sdr|Ke-I>ezt2)HF|i9l@_WRhBzg|2C)~feCw9ZS^h1qxJfT@WsAjFdd(9wn zRU1fR*7aYGXL*10`t7Ae(}$mOHdtRDr$33Cp@DasFYcC}kbn2vf&&QSyV!O!H*1w4 z@i`%pTZ>H+1wbG!e2oTFUBcYLcKib~@;V-Tj0zG^RG_i~HNetY*|{=vp#1YwL7d#u z9C2+H_*-N#=)=PW125HNr()kwfGApi^=;aTOT%qTDB6rpd7$m8E^>QWp$EgVk3SKl zAUJpEv|rXB3TLZ|u|H=*fA=WAUgcT9#O~qW7Z`SV@tg)W45GF@d5+)G2&Co+b6}m2 zosm_2sDQCT3}3bB&zrv8nsw{Vz5-wxL-E^z#@y}%P+`92~yU3L7Pj>3m%ME|ARbNsiRio zptUqrr8cuvrhlwCF{!aL|FndnqJM9|RYT1x@e6-Qz`M?S^(j+?D4;2ywH_@jS)T~#5`Wefd+S(1S_d@44uf9lb6z@Lh(zeH zWRUW-#zbJW|A+-vcMlVkmO@TS5Ch z-aeoeYJ>EUnP@9?Fd+}&OZi+!yrkS$=bd%F+5a^|oZsIp=WVEYXyZ_07{i3j2MGC= z;DRgVju|&ZjvoL0ewz7ISysH1?s4n-bV`S{$P?fJ9FS`QG}7)+=76AO){cJyP-8`d zDInSfO7{58%h78*w$`koByGdsj0>dz#scs^)*~5)!mA5#<~>66(s0+EMFoBRznW zXDx_P63tM7IooN-@_-5SLFy7OKM-ptX$g>2&yX{?k|AZ zu0PfoDt59W0!o0BUL9IqF9BEqI?7f!Tzl4>1-c!GT{8Eo@_mdA*>PBza_1L{6^zfu znWWj=R)y?U(C!eh9!2)ad@!GNJtOG9iSH2gO zyB$Rj&2tW%{*00ihKVex&m|1CMk;VbsW@XAS`uE%8>VKKAQa!pZAWO&^Lxgh zM5!x^1^uZRKjmvBIG_0B+q(BdO~5w@p^p<-9@76H~EW~we zvzU$~(B#(MaoYo;P(b-K?Kp9Ip>Wv4F#a+A$G)4aFVp%uYk*?aOC+JhdD=|Ou;4u# zlm$>_?10uz7Vw+4D%5#AwOo18yLX|AY)0;*U3s>+eb zT6yK@e4g#t`sC$kdb+9)81%)_HRr6<1+c~t znTn|%!yiA+RfL2`tZ5%~&%U7e`B;GvoPy-}+a@BP(T0=E^pc+qbugW~bmVY6^2&MlGBNRWRT zyisyB_A%l}MZ*&R6*vAItFT0(5c!X7`dz!ce2&ZzDSb}qn%}X^ls)^8Zg%z!fGI)% zy}DY981PF~AL;2^hE72;6{ePWcT8@fp!ER(wDEg^S%VF@p+vH$!O_XRyR3TtTB}@V zmjhJ3&!x|jTNZe>#lr$Hv0S3+k=L_>8iaddIiEM<>$u^<(cr&|Bp1 zF^yhd&W^j|8#a{J&rg1WD;hgQ1Ycu(wOd%Q@Y_RWllwcnibt`dZGiQ9s}rp(o||7| zt%O9z8qoXU6_Hu1eM3RILn%H~z^;OR`_!3CCYX&=^W z8VPszc}N0@ARRG>yotgEkffke>WUMV#|Pm5B&7XSq+QLe1T`qT{^gTBfaa)(OP{;| zOsEZ~CK5T(sya$(B)2r(46ape^`L$rT*GXi5NacP&9*1~z$ABxqa^GyYQ@gBEw(Bq zC)1zmF(5IXq2DP8S}{ZX72w(Sij!W3>6(mvThp)BdnzUDQnUw0SrQ)LpD=p5C-1RG zCH2KrG*~x%sX-=|o%sFfcsgsBSCTr9Tcv{2#}!kEiLuUPx4ia?;;a`?oId6Sl$hG9 zr85`cblt8ut8uhs9Y;oYZRmHZID0NoD9oT-!C{l zkj70X*Dd^Bi$V!{Oe1z6-c2h?&e8yS^Vfw%Ioj6r&U43A@(du0FX5^6dgzj^i|Pck z81nVSrqW_;*b+4UTR8S-sFfyngv?Wmmb=8SHX?{&r#mFwoI4^$jHSr%xs!vAD8dZ zv^{}$KyKT#&YvH2TCQ)?slvc;R7*-^egVMWMeHELedG6Nlzh_WjmLjDCY_kn3LVUW zuAZG%^3N0}k})sj2}qnI@DBObcdwMVyjI2bqCK>fr>x!itx?PG7ql7&usVl1Df!c4 zlTUsdkfxxRY_4=TP9s)`tM9aP2=j#|q2#~vrlg+BW`Uy6;Y~GW^3YRxc3c{A(46i% zL01QGeR5z2=4$`$KhDuRra)fFJj-zXMvzX}S8Pgoy@S~HMkO9prmp`ziH?6NWTkj9Vg0BBsc*WQS_|iD-{&4=PiD*8 zu9*vY4ac)06_>&DQ(>XxOQv^!9cn?Rc>(@+YG5sJBqfUfA->TY8)nw`IReqklpG zQr4IbImxb`kDQgai%~GweT%n&Ty>zziHI(anbn>>rV)y~#bC0X+5#Qd@93w8!^JM0 z>&I?1T$GjY+b<){O!oMs+|FGqKqiSewRk>!Gt&gf(Z4NfDv2G}C?bO6WfiOJ`!lZR z?rzS+qJfY#n0X~-BF7&@n=oDTiOjH_cX@3PMF;r1m zHy<6(5wWC?vV1bW>KN`SuQ@9Fhof^x7|2hMTyv<8ugYO5ARu59!~g37AcGW9MdD%a zham+&_s*63|0y^9i)gXKBe=#qbM!+@hAv%(_Pi=H=?d0HZ;I-f@Ch&ez_H~IGX;j> zGn*d|BDjq+CyMj@trETT4W{lKZtgYu+2MMt8-X+Mn6>MzlcBxLtf0`_z;SVLcze1t z8Nff+U@c#7O1V&tI zODB#+lJvdo&Ev4za207|JVu`f-IvfPkIA1Z$8V2XA;R}l1T3oIw^x*{eqxT*bFPBS z9o9H;sRs)eA$NQWIF>@1`AwOwgR8^3G80n9p0(tpS;#DRUoVVm!rZ?99?uX8T8zx* z$xb`>UQvSvC?h3}tI^7rwevHd%De1ThveiIV=MFpw#~q7(pXY#7z7i~!0port(Tplb_eoqxK(wonO<%uP{WMUUo&jtq`;CH$892dE4+at;= zi%6Gr7#avOu(?!CyRZ^H`Qx9}mlWgOmcDy|*+k=zP1GyjN#k_>lcm&|`G9L7ku&A- z%W@94ad!BNx!v(8PbI#`(zW zY>N-M)9(;1Nau1)_Vc4Ksg0i0vPSjm8_g`Z9Z~1>tv!~(`MOG>WRTV6uFMh*o5I9w zXWd?m{MQ1{a%JwQHljVXIt_?ga&mff?m#9T9BN@l#o&GBubLX=V|gUh@rsK+Oy)Y@ zl6NE5c`WnaXu?ZDdE;wNPjai++$_*2w^H0(buuzt{a1%#(?(ZK0rXDH`LTvGdUa$p z{W}EFN25Qf`_|tlPJ|hZn)jNL19!j)?Nv89(*{lr!!ICVcmi0xVFMu(&Ho%krKcYc zUVIL|qaO2eXUx{Vi<%OCCI?L7KR^?D(+DukGnwu^gW8_;nLQFVyK`gXl%U-dti9r5 z<={CBT+l1Vzx1`c(pCZ<(l?@=pPceJ#qT=CjM|LQvn!x~>`$*NK{Usq^wYwA?kGke z#-myL(j3rFGZ+g}QSicZn_rwA$99^53t8O;JYsJ2?Vvu76t|ul0tt4|L%~jIjH2c{ zlndCVWp>r9^XFHHuSnBX{;or$p}lxuRwsNxP?n0hwlx4Rk!zaY%9V_T6kg z=YciE&?OZR9$(`|Qu;zh9tCo=y-kXI`?itBv$pa=F6M{Iw>Nfa$wrynAJ|{q_I-6PoAY@!QAMh@F z=@0dw9$cAgpCdZq-Un5##SjKzJ95;mhf75ofC3xD9O12!`Fs@>M0wC*`+n3TEQFER#YgZgNqm0}-*>DL%6fnWqz zE~WTXC1n|ft{U3sc*yB>Pwi+zE39qu5^V{v9C?xxHbkO4n^Q(&TxXJAvkp`(G?gpxg|FLDmrQh$(~d)N8{?1)3zv+51A#n}c~z`O zgDtT}0ss@%46F#%tE!;Iu*yGou!xo^DEvk&%$FW!)O&2f-S^Vgwi>hC!j(?M@zg%L}D{uIDcP-M@UnU6Au?Z0Wj*-f2U&V2*UFXA0doKO2I%MS<=G z6r5H4d8F*w7xZ~Km_Uf(D5ex9bI^wB)Z}DRv1xNK0lTn+Dnr_T#2F;Lf`$@{GYodL zl7I$H4FYKo6peEvI@7J$ZTq|IsuLS}a+IBj#RLI-yUVa6i*0*)Ds0>o&COb^g1V0; zwF%7veU4oA4T@DVQjJSzj7)wXV4tP7!DkzVl#Lu{kG+NFb^WEEeLs#-t`g11xn%45 z92Z+k;Nms7!`ddf+^;6l-6I4b#~$gZ-X;F{w5!mjarT4RI*YLCAD7x|1?jGxumVc4 z*N&c!$ox`I%`T|B1}9@L&REfPF4}DWubV4h!^iE99B*r-ccp4&sD+D5PNm%7_}4wU z>bcUg=d%CU#<;|p>(hr0oV~CQIGA#3XdL6x7vXSdPAgQudF3_hvdUsEWui;C`J3=B~z0Fghl`}palHqb$;EZR->S}}8+|uN6AMI(8D6BHwtQFGlUu)v?19KVc%%)1 zA5Mu({?J-XkqX?VHn_c6pB_m-H9<-g!m94@9XYH9&(bq7AF;9HACcU{TLoN6)Oanj3wa%d*Kt@B>@XRxs=IbLeVw3~miW>j@~AE{^)z+8s8I3q zx-8-2ID8wCaZNPf8PC0a#!L5ock6tg?LBw2z+LN-qvM>aX7y#^OYYYrdI#=b**2XAeLi>@syF>%||((NB374^VE&H@na` zO0=8kh;=@CM*f1s%n6!>3I$GkB7JKx9nbBPx&7lU?`@p+V@ZbemOyiKT5FW0sdgfEf2kW{x z6008siApZmb3o~PKd|6&QEGU{UF=TLdaRy5j-B~zr2pODb^^}1TkQP9N(dAV&t{`Y z6{RlOwo2?3G&Y*}Jg@6}hFUUwy6k)Ipu_z=t?#{z(_LXNC-E3nwtvj__?ZV&I@_(KXz2Jlh zMRwK-axXADrDifW>h3!Qn?02W6=u7B&*jyD7(1uz-qC34?aI?zYjTXr(|NMHhrX$= zT)C`xJmunErZ=nh0x5;@U!_|^_TGQ>yH_lQ?Uj!XmuSjY!*n>jq34cI*U?+h{lnMA z_(nxv^HX@nZx>DoGRj6mgIIsixL*r!Fq!f-WqmrtV(z`bdhoLq(+aOdt5Chuxj+1f zi%WYO{d_`?%RS+bwofm!C<3|>*DV2HXRjdWhi{EV?a zWz{1V2F=M;6xH93<-h;fcxLx%VwA6pvoq~6;npKq=({Pw#Hij(Pf>;Uk1prKe|^{o zdH1`?`1b?AR2@Ih_Mvf4q|93c-A*K?DysePHS^_@|1mfmZ+BI5 zaMc)n`5r$}g;tF{f3UJMHHCmy<#*6*@~82N9X!ez=%QI6L52K#d$2{lQl0k0W%~GC zwid*a4FbwCz08eneEIxYd+>cYAM_3@Vo$9i*iM!qm7vHkoc#5rzY(z7zG_kb!A$<0 zYKUM15E~M_<9jp|ASV*qJq0l0MC_ZRpKNh>-A4**6K(4q*RNUj+eKVu1iU>u{ROkX z@ro~8{h}B20m~>9V0=tg@4pR*mhb982sbje{ z*|4E9{TD|F>H60`PXh2M^c}lUqly5U!$7b9nd>aq7Vp6dL10&PzK+l3>tMxWt!~zY zy>^19X-z$_-dQ(HGGGV3H=2O z>cRoOE7~u95LYo3A20z-n!Jr)JvxaE`4)Y1}W`rW5tsy*S`gHYidyS^Na{`i)=$jQ)qL(1~49XXzwGkw65 zH+o`X;(lEapW1};6O)U_nq?E&x)K1=OZT%JA6fy(vdVz&R}sYx$~EhuvSRev&^Io3 zx(xRnKJmff+K}NwS@B|{$WjJmvKow`!$SaC!J4=NKdA7*KU-K>)N4WHL!0Bja3B2a zz%=vmXv3+Bxa+Pd`|rXJOqUqksomSN_bsh*SF(0*6P>dv_ng_;0H*t z8F%kO{QI08yY%V7(!%T39Y02@Wm(92nMV3Hrgw}ymxF!?zYHH-W@BEt?H1G6x-&U{ysFmGl9C)- zg-uxjpJgEb9N;5y=|>e-N8Hb{|A^jkp5r+QDo^YW!rw>SZ!PPnmpw@`;90!*Kz;-G ze|!q$l|Gai@#%68_k-7qL6;H$GMIy;*@$dLSYfXC9v3nyeBN&6d#Won8Dm4QPQ#VU zn5`|5TElmyQ;}E>JlL!Oy~49c$f?Hf*ttb~aOKCz@2rZStviz%0;PveAbr)JMbz8Q z_UFGImTzoqZvG5784!CsP1ky`B%hNr)$97u6^>^yu5Pu&mf8~6x56!msi{lIlD3x4 zhuVY-^)vI$^>6B_hf}+l8ul!0s_pD>%XhoV%#1zOEZKwGZYw%XKCDtRRy|QxDfsY< z#&PBB_gC-60)HS~N3lTP!(K}tRro(%Yq^o|qpab| zQd6b}ik+Cp6p$%0sI4{9H(=qGb z{N=k!;=T^oI?XTWv0o=0WO>PB$FQe~I@+v_lWg6R`%w4q`qGiRUaKz$!wz8=IQOzb zz?~TT_1G6Vx13F|*B3|Luo|$qt+Mc!bz}m3k3}FC_(n#$aF&e6Df9Vc@yt_CfzlTR znCeX)@oL=vcKyjd+^(`$zNm>O2}#rgkRq@bhfB84Z0|ToR-Zc!Nvx7_HK|Nv4`p=~ z*j^*Wynew4qN`6k9-$*wCZt8@0H8m~d`QC5^IJoVc)whAd90)Y=FE|fj!!DP2p7v7 zfRTELMp6-?J)_H;)sMy)lkrjVw>`A=$@uSkAhVzf!SpamD!*wkh z*x#<1?I|U5ZN#D!_kP@Wgy(>q(~GYyZEA@qI#sYGDLGjUl*WDmAJKx$?Wy+mEYmwD z%Czb` zkJmD|h79Y!XQ;5U7$p=1u_4WXP5Byd6LzYly|Fz;xLVB@=gu9*BwMs0Lv7uE>cuN4 z>W0K}&nr{U&9E0Ov&6zeW4^87R~N=&4yo=U?DOEAxA7f~{Jzxhz;@|$qig^|zI5Y4 zM@^~V$9)8$+s&iW-b0QD-1bA1o}}AywQ@Rd;7lsYXSaWaoAfIzY>gNPnJ@EtXyM8h z{WJVmP`6yWV$%g9R#o6&%Y!d7*(=3Pmu)%KM&8}!S8Rq;koMj zyfyxLtDK_4=iP|sH>#Yt=u(#rvYvX03TsG>Qe^ddkTNuAF(L4J&-C%-~Ts(piDbgD|(Z11m(&J7_Fdh@}_tZ&888=vcMm6YZA@JDy{B+9;c^LX_CW9+TN;)<5EU)-e$!Cevv4#6e3 zB)CIx2mu1Yf;8?l1Si1)G#((h6KGr$+}+(9cetB#X1+W3%zS6=pYS|1uy*aWYE}K- zw^ogahjM|g_a92n<=@c_beuc@WhoqX#|syMH-6v7vSaLPP@cLv#^-1# z7CYcu=XpcFTv)zl15-N!cqq(`wU5TYa81QBA|ll;B~_DoQJ<8vGug38ae&84)H31u zoaz>HT8-V1UvdrA(Gw-A-fxgd@!GF|eq&0!xn4lk>V3iF+64ur?i=v3E)JjorV$4Ky0S>cJ)J)ujZz?OG(4AZutZo#xT1|nV7WJj$iv5}~?v1sTm6f7~F)Vg-mtnSYV(SN96M8v|z(~yvo16&U zLX8)yO^L-g?imv#vZ@x>vwT^&0&bj|l8c%I{i8d5nGmlVU>4uUOF3NJwVep7ZRpO4 zrqj|`1)3<;Tx+Scp+o(UZSj`(hK;E8(Tr6_4gTPc-{Wn@=cy!7)h-`Zif5uelIP>n zixlF%u+M85UuA(Dfk;>MGwqp{f6bm=4`#U+tHSb+4hMu5R4aU7!16YfY|m592f2kW z`4(5E@ue#ziK^^J)wLF{U61WT+7%lIW>r+eIq_M(h?|!e9Zm1MY;H@|t}5QduNWRS zT^i2?TXb;W;GQ$+#)MyZrMu(~E%OYVbc zI)7WNBb`C>CU-hq-y`s3QKtPl8d3Lw5onLsCA*0s+djgJakSlh!fb-OwR9)leR1Zn zvA#KpP2c?X`Z04bQdqs-#^Pgv%CiGwile7(2CS3$P!d(7g9Ama7w0r;;MFP?_L*_O zYEgtGt%@$(Vm`Aev-1+~cEG>>q$=NsJe0H1mjpQp7s!dSx-j8}K*hBMHXm4mgXrGpqT2(&nB$B#qkQ3%9wL!*F}_z zOF7S!qvnrDBF`Qr1Ddi;=0qO_QJBkn5UYdu*8=bf z#tLlheLr7gC<&5K(T?dz;z(~Oh|PW`<18#tSl#IKQ4<!K>US!U?1f~aNOw_8y@;j>-6O)4oR#iKJeF_L5rsLn zjw?=+|4@^3pJHb@0104QjFgU8?_q1odCZ|NiIn0#q6Z3=lAX)d9jP{zN-g0ZhF=Yi zTy3Ga`E`J|UZ4NOYPxHCd;L-G{rMG77B;6vy?i_EOR4=S zY8khv6-!qjozGhHpANs}KTN2PxmET;^r&ZQH}p81@pn}yYZB+O#YG0q!sj~qim7#> zp4PMc4~2Rt@Y`W(keg3|Kvj5oeUD^$XcytMh0&02o4_JpAv8pXGaz&MFv0q)=Lo9> znfIMs!$&%~HSomRD0wgZ)}J}}JPzmj1xva7tr)!t?`HPMltVpdeYbWo#Cn~Qwj9R_ z={tUqf3%0-b3y5JEGd#h!egjx9Mr>iu^@=fPbs~y4p4I#1{uS)e$AE9tFBE{t@*^5 zLPEiUxq^!8jcxAXNBB`CAvMmv5Zv_Ts4D!b&s03zb8`826Q4*aZeqW0tgk!5XOQ!La>Oy9XY|O z!ByF`G~7h7fX5AHYyf?d?c!%(40`R->}-Q_4h1_-PvD_z*zF;X z5!7f(ypAJo2e|dusBsfx$!(c&xZu=|e3e7U(ipcm6i>x7w z?szx^N#n?E?(l&&)T{ow<;#4F>4R%M9{qwew;WnKN|qN-!@Y&cL7c_P`)WFQEj8vP(;!%A< z{%Kz@9$sxB%4C@T=i zX8M~3T8PH*NbRGYVb9NDAW?bkWy})AO&|@m5&99XI~08>CMOlQ?Vi)LfMujB@w=E) zCfme!>cz?8Mp+*%CDEaKfx{JUAL$)=Vx%zJ;oj`>4rlu&!D#nHMb3ilniz@U&xcc~ zu-7nj3x9Ph46m^Q*C-QOhf|DBMm*b3a%k zr%xP%ElM zt6@1S*Kr7#-)WG*!%|>Lm`f+?l#cVQM0v1vF12aaw+SwmERX(WvnX^n|Qu-=pbl@3}Q9_4rZFaj&9ZgjkCm>v@7C;aqfil^x(`vk4@K0e2UAYBc*TWS?TJRe;-1R$wT{4w$9F62tDbIs;)|w zeWQgVFYGFh`9SizULjZSaQo>$3ghgUg`FRYbK*!qLcOgjd}F|y60xuLeJESBMGbgA zq_7T>KZ7?y;Dkr|&yP|d-R2n5Kvm9z*^e!#q(xn5_L5+>5NU`}<0)8?Xqs9578pm4 z&{UXY`6fxezAN9~&*=3^YT;O0M7%%p6Et{qrgxo&?}?<5qF6@GYzT~tsG+y>>s5Pw zhHVA*jrkedM}k^%P$t`Eum?XpTw0Dl@}3nm9c3GbBp>=p_q$Q%TWl;5f2KAUTcoRY zPv#@Fc$}%SGI%pWUJ^%gh%HF`Jx|Pk01;{L9`B7_wAF()%|Bx z7pSPlGui+w6$DNw=q*<)vuNEsy77ksnJaXWt{`J+^J(i{INPLNJCA9r|FGgqwNE6H zBOHzwJfRS7|%R7fJmU_RqQ-1gmCqK{t@QPm}bwwO9;!!pUs zc$fN|%uY7m{9!_9lWi2+>+v!H|SPpg@aH!QoC5no@4hVr?U8g2Q;G0u{; zk5RWEhp`MgE@V4ntq`fPst7f>cGYuK z&D5>9-ghNEW{C);R|ezYtSf3C*UgJW{c1%(OUm< zco>C_{L(tC&DvY)zC*uwZzk{Uhp&?0kv=43wT@HJ5RTy%>36C?aJ4OQ)5Wkv=vwF( z1W%$Y$Tt&5NguQ=^fIaBTOV5tL<%;lK`hc>ymQ8uWy-zFFws~}v}A~$*6M1_F-aT;wPl*AWir4F;AK0#MKyXm0407Y|^(?FxP-^xX((#CnZ!Hx*>GTjNt zg}DkCcgybVSF5bP1`;xFdy(uu0~sExZ0`=%qYEFoQc42pfZ|0^naXl@9h4v*x_7g3;QVt7rfXh$1q6Lw1 z=t2Q^tX328vAm+xzxA*B$@8}pRhXZ4gp(%&vX-S#**%_y?NiKq*-ikN_}g|sr_{}o>pu^g(?fRTxWdp!Fnxk2_5 zIsH8{s99P|F#W~aZC6b|Imx#3PMK)~552PM@(XO`_1d-~>Yk`2EKenCws+Xt>$M~< zKcG;1^SJJ@8t6-mykHoe#>hK#L__2&W5-8nhJns-!hr~kB_k)&U`6l8daL#hOk9ma zPk)6l63%%qx(6fhO2|bjrZ^sDRrd)=@X7Eow#-`0k6}nGXE>>`%gP_rI4ZGBxL0sK zVTt)O2@Cu~ukHBgTjqvJX&f0Jq$!4Aj5BZPdSVx|OM&&y1}L@^;fBPte|>S#J1iK! zIz$pf)GoqpAe#Vd0X`ChO!o|4ELo4}cO{6yCMZ500Z(;`dRvf`Ng2jme<|(nws;_T zq1Pf0Cd;N2xY#iFjJU|FRBxI5O;ZQ()qzVeQ;i=;-Aeub<3<0qrn%Nww}K^drpzk(|p)@jF8x z2ERu%5bi#=cEk}la}3=sS)Zi|1Sx5QhEpm~ZcssuzcOt?F;$3|cr|Nu|G< zho{PHlb-Fj-9KNkP`hjwdlm(Cgh}MELtlrJL;2X>SC?;LQPR=YcZB0cbvl*@{4)SQ z!O-A9t{M)-9*dLk_rESTSU|zseMP$boL-oP6$ATQKJ|geZ$PucYtVRM`MEEyWJbU8 zw)NonYj`}00ku|4)v)q0P+IR>Tj^OHT5D4?ZojLReuh3Ub$|lh`_r@LNJY%wykA z75TlxgvNBll%>qYc*q250V#3BZf!gO0V&fM-$);HwERi zAvQ4)#G^O$fNrUy5F9n67%0=YXoqu15Ix7*+b;u>W8@INha6FDNVq@ zRlb1VWaIFz67%1Ee|%WUs0&)lkRo8lCZDY2R(*HQl92bymt`**t4&fRXp7?cto9?} zNH2HW6&L@j=LCl`|G0*PNx+g=VTLa?4bgwBf{NnlO4p{NcRVsP1D7{Hhx)k*{_`0S zfQeqtt=>OiX;7Cf1P;GrV?Xrka%%ai?FqElcNV5mDlS~-uvkki{9xO^lf;r}@)<$l z2q??o%W`1BbMMScg6cs7=0;T^?Ba{B^J!aptb3?zeR4xllHQOF(SrlJZx0PU(ukoF z#Yf!lOJ5u>lsAK-e6I~nVmtLkh@BSl zm$lZRNdm#>5-(b^$yWb3IVOI+C`pPr1)6AYn&qLW|IrM7&V&dgO5f~f1}Q4K?=5(i zeL%>c>AfjSwo%~rM#GnT?YzIbZ4qK7xQt?}K3Et@S|`+1vs6jjOsT#vIDe&`l-Xbr zRCpASyf1jJM$R_;#0+Fo5|HwJ((130+*gfsRQd0He&$D%2G_lA_tuj~KBfbl8NDRl z@0M%~+uJWQ=bQ|}NIOG93!<;~rcorRguNuJ@jD|E`=e@+AOC%SKUSiPF%zpnxG1$d zT0d;t7#i*U1Ib2gd#1D^Ar>JBDrJcu8SyFg8uGt1(pfkV69$a5&b25AjEUS&^>i7N zJ$L^^+px5Ew<67YnL_>keKTJn6X_X7eJ;8RW%N!Vv5Aq`#DKohl-F*PJ&y<@nE9A) zrwM6v_0_k33mC*o#3C4u9tS}24(3It2O_8_Xn$=LUJ6&cDhGt^6APnx{bQ;BOaK30 zX^l)ILJSlyZr6qH7uEh-o{lvfdi$iDnFaY$5mO$3Saq2-G+*UETl@bVfdRf_ilQWh zzq{vXF$LyoSPynpMk=Ig-g_7iXj4Hhx=Q-rmXQ$==pf&Xv18#Nl`4MiHo^y2?jem| zewUzh3p?Oae4e~v@_z-3{t2}dB%=U`mKDB{SZ2D&gjg;tDC(z-`5f`Q{{-*<_M`qN z|KO3RF$i*IJ&f(`C6wf0uGTxR+Vu7ja!U`OBsgT6hylmn|CeWpfC9Sjx-PO1;**s< z*TTlkp>UO@hD{z2KA(&Gi<(g3@$j#Z-oH>S0ayyH<|XL#%@T5|+K(=`R`d;}b;_Ho zctfrTfdXEp5Uj9>e5HT;93+tFkkrNpv?O%>-0F;VQ*RqMiZb!k7x)X^y|{iW_P+Z6 zfF1w+CDBqqA~#!L8 zb`=cU?>4F^oAvPUkN#`;{!3&7(ae?aayNqS@`Y-BTt}ajRC7sLaY|g0XtC3EcaP{Q zex>l=zft}Y5-j+ic7@+oX}4LT7}W{xd*~66Vo!t$yUu<4<2cD2XSqbg)}tx^oJ~yg z-+UBf0zyY8BOr}nwLno~!I$$6aD$@#p&Bvm|7L{T(`vC$o1eQ|XqG&-?98L;G9wi? zVeUsT1^GB z*rcvG4N9gOfwBrxQy0tC*i(9MjmRS`I$6;&WVTRv>{O}jecEFo`*TNLi>oCoqc>JW zc62VhRr>y#!c{Dqw%{=Th-x}|zRJ}n9_0eL;j%ihb|%9+GHq@4M~$szrw@K_*qlQ` zbv3U(ptKpS=~=1#bnQ^tHz*=M|CpyM|F@uG&2nX))9x1Tb(BPSOU3C`GyB^72A=Ru zJeh?l!#C8<_+0hsCC4|3EQ}A;{mkRO^Zz4xm1$1s|0YaTMJ4)!rRASQc7t31;~}EJ z8fwPLMen$)HxWfb3O0nLQ{{jtfA39b13UBu@8pF4-S#=ZU@_{RUT-RA}R z{~G^g3`7i^SQnjePJ#OCLIEi_ZnrFZW^WgX|;eINg(`jF%Z@Hj6hyt zb5cpa>0=bH{kQ`0z~kSaL!u910~y0*Wlv5-qB|99ePvPcInmpe9-X&U;6G)fjgN1g zPcZK-kKLDgA2}Lj(4b;^AAPuc+?v+^7UfxXQ=cr%b8d9+g<^Kzx<-Z*;j`BLn@ufN z0trP+PhiW1X#BjT+f=|(jJYyjZ~HkT+&OOe!C*QW#aV^zj~Ghr#D97Ls7A=VY$kx4 zwjA-tH8Vx*Pv~?`w%DUvNr^vy)cK4w7xyKaW9y}kOtn^7BqjUKfWfv+oM4%|7VTX7^oCmdEzk2@0Ny$|YGIX@O%vO8 znR(2V{xJ4)fcOiQ(^PpB}-dsnDYq{E)t)9u@H9v5fPlOplPau;&4EXE*p z+xf%8YqT*w4$7fx;*|12OFDAqCP}|H}!=Dgy6xgPaben zhr$)pa-5*vXv>ysR9C|3^JFX=_^3QMna_6eZ(PsL@~=;%-x2p{%R5-b*h@5+F9B@r zUBu>qRNu%)F6*5)UPtT>&9BwvV!VuueI8P*-=3C;Z$(P-oQ?M7{;`kB+e0*BY?3|o zp37lh7A(>#Omlcmj_Ca5)Fm?~$C8mt{3)#o!mQ)~+e+bUnPLHy?VJ575e@?=CbMg2wKy)}pml9XnMrUZtd@I8V4vDYj^$>De^$ z*?)j;Wo+}K5BiaAr3opNwrud9YKWi32HmGhogU2ACXi(eRgNT9R8E}UW<8+f1z@Fz*@H`WH?!Bz?3oc zASJzO?SKfNCjTbemUxDN^8Cy8*06)NCjM3a8t2{QK#oxz%7dhZF76`A7324VO1KvD z(BdKcp-xZQrgfi$@e1k%Q-+VRirBHtj7|P-miedg>9;CE$0%*Jr-MQUgQVaeXF|sx zW@=j@}3K zn*6>Pto(TJUUHlCd!5smoKT@(YtCZQ{71Soi&pK&e2=k@fgmpTMV~U<51tQQNr2-I zE97$D?3Q-Ce>^7tZP3ph=aU_)ceie4O-Sw7D?I=HpO-=b#iG6w?)M&VDzs>ViQ+i_ zDmp!3Tl6gLHW?b|OR&Qgicd&qNSVJh@L3ZDwW$NxiB5U=f`rv22So)~T$?upk?Bxj=KYknv}8 zzyJjogT&A?B((YMw;q~?rIwV_w=c_`3~J@xzpDu)Or_tCfA~2Z`)nKc**1|m?)$3} zo9mS*?v=hjqMa`yk`(0nB0qfm1N$E{9u^El8JAWjCZ--K4u_daS#o|mJ;_06zJ5H) z-@wos@BVKZ%FyP&NQ7t+WH! zT@=LyZrLa*5uHy{rR+^!=x9xg-12Q2|KmISjuVk+G%Ih92{*tzP2jVdNu4G0!RBh| zj_A3g>JQveN9F@9!IpPjXE7$TQ1;HVSDX$eco|is`zx${hdi)#bg1Xovp2iFxzJ7( zkpsqa_nEGfeg)N}+t8&~jr*`K8hxf8pYjJaD5g>hk1V->y;4AvsNWw^f&XEbWadTG z9$BfO=8ZB5kl2r%B%psu>a~!Bu=kC+q20WkWSD}AdpZKRhKQ_;@{|-CVLZ6cywCsu z$6RWSB$Zo(=3X!OjFpC=DvQxaokPs!#X66s-d~pVwuyUs1O|%h-vN^umIz{Ytb_@` zrHYL2(|30F{b_Yzq94cS*=mAZuie7@4*-J|9~Wl^g~Qq0F955fUPN@t%&eSG?`|&+ zEZc)IYcaFRfVt50JG0x9O;c-_}y!bpshkjQB%672(xtvZEbn!Kt`z z(X+@ks+#KRe=KWc1`?>A7->lC+!t z`_V7tENH0aLW|Go%!Pj?i9|i!?!N{}{KRUn5(nx3lya~ATCRN#)l~KJtKMfE{RLSh zWhIg?Ox#-Xd;ILQZ-`i=TSkoIjAQWIIj=uWXiVl9Xe$26OEP9bM#G5((2rh1RZ%)! zBi97Xp$HPr+8qGu<~V|#M#BIDG#i{y$J2JBb76xnq z{tOJbLTCYxuT;#NETU#IN(vZk3A~2;8}L?IpSFlec;cU*n0CS}Iz1Y{(+&&ctB}| zcN;1RM)2iii9sLWYi6~vrU&5M?$-b#Y$t-^M=1})IZ6~lIe_ZDg)dNgtjD?eS{G*m z&F6nPnx03uI_U3hl%*+G^1By(@D%ceEVo3@xsgliOmE8dsKS{&h!V1|eeXMbwtWvwH}k&X&O#L#IxOKdVj0*S*#G;J`!t zxo9$f*f_M=RAJ+)6@)K`E`-}{ieIehaIQu4`~*pnAG4tmy^iVg$%hs6OQl(EE{3Py zpw`B}(S|P5{P=>o7@dMR3dcT){N-jUzU=P)&nD{|66`WwDkt*Q%GcoPTU_Jua-gV; zjb`4Bkj4cD7C?ASGw&Udftz1>&hFy}8xXBhlp_9GWrqvazrm=4xeWUk8>FNi_O#(d&pP zxaD~3Xwzx29C!v|$w9s$uDjFLmwHZs6r&gLU}H@(a!WbDZ=>=Ep@7D1%OaF{gLgVW zp+5nxe&y}&|6aucL0SV#9(z|m@2%$k(n}o~<`Ot{&`+w<7S@@oF;Dj<6Ek3zzsjsY z8QdceGJ0&)T&UfqAtFVJ-s9j^;__A^6Emac2f`JV30@ZJb**mk>+uTGeKkCE;-?*V zfmtZdIr6#X(=-c_Tir^|Wn0Nj+w+Y6WtWHNaZ#)hIE3a004qRtW4F*S(Ox5Z+W)%J zenA*pAL-~YkbE_R)3AP6v}z?BFUGACUwkE)P)SQ3=7Q0IFADbu64#h45HBiwKGzNb z+UA(5c+F{0k6^HU*aT<*n2XHNw%iXFhD?cw&Zl2@T_|$=?rd*um8OB-Vqgayz&}8S zqrXU{xpm4zlHROV^zeK~J-S+K@-h&;EM`0S4dMlF`2pkBC$|H5T0vPhAU~>#gQJ#5 zUjw%tq5rP!3sd!9^|X_-1|u-M-(dp5jRjm6cwHmfqT7^xDjS7s(P5M9-Z=dA{yce) zci`Zs^Ex(0V)1)fXDYAa(Fc}a`8x|GMh&@!PG1|0j-D$BTpGlk@8(fA3>Ef9SFhBn zj}_}=HS5@|@O#(6Ejw8+DbS{5z{H);dL+_7k#zhd<4+!hL0{-;f+Zxu-vA+%7M}Q> zW5iK({XQs+yOpQ?Z!1M}Zn5oDDL?J*6O3zS2Wq4;(-{=nqHJrB#upoxnxv(Q7K&ei zfpUC+AgX{1k_JByeP!NY!KDXI1=8A1{TM5OMQ{!`L;yySHgOOH7Y1xDDl22B7-B@t zSDb;npe6SV0U>n-+~&U*G{Ola^hiBRd#q69Ts4ch4VApLM0i7fZ3L+8@oSg7I=bin zRVr-?DWJw62`W7o`VAHK*!(+LZ1-pUs&n8bqe2=#E##Yo4Ul`LcEfd4b-|6ZTGH$* z0+xLs`|}{g7Y7+C=Ok8r4_{931$Rs`BCr25`~0B2dD7doh5N_L^;hN8w7u}IOdf~V z+rRhZs!h?Mx@`+bJL>T#rJ?d~Ct~TfU1TlqwbTQeenCHJr|XPac3PB`1iCy%xVDa! zc6FQ1)qW;^Y%D;fosYz(SsTJOo&`-uoW4Izf_QZLsH&>g3GQJ~Ae)KJ!}r^MGaPz| zMsza+`EC0Ot*>WxsB;_Rh)*mrojpA31q8wK%ahte*8HpJupnxOH?Wppy&c2;#5hXF z`O5ctU!QDf0Mh`2OK0e5a9;n1gfxIhg_dmSmM5Avt3&=sGm=Uxw!zb>QnpO*tXP(c zbWNNO(9SG*WHtwTy5!#YGzS|p3!o^y9(QMkd95_G@~!T!gr}{qM=3sw{@wh-D^;t^ zPufR0ii567i?B*xc(ldOy8jxJaIOEIT|9goCYN7Nf5~ z$1hjpy_WopU`qW1uUwb~&1ZvZY1!YXGw63;SxP&wn>F)QMgiZ=9Y9+E42!19Le$Tp zvhpyFSwvc~z+3ii!!!%N0P>$rJ;yeZ0H7Vo8EN2PhIcJTstfvo^%d&im69&I5c?y}+2z z7Y|OU)SlaP9)Otao6}8y4id=!(i4WLT;=@b!@j_4OE`tv8QkyO_G9fi@qr6Ov+Lfv&gQI`M?w+`BsoF`_ALE!DQ?$ls+MFZJII zA$NK0F~n)Jo=-v$^aqEl!){F-A)dl|A3HYf8S*io`J;=NmyXpEN{D*$^0%%bb02fJ z?v|T%)G{ptvMX*2xd72@Kzb73oleI#`j#pEy90u8T}k>FSG>}$clW9$h*3LGu!f(EAhG1>uh^J zz$9{Wt{e4PnEW!3fE~vtmp9ohu#in3gLbODLOncU^tq%DudZBwmtCefQDm+X$9AF! z4h|)9#OGYj3WWdO9Kz~(g}^+&TrLBs{+g^MbxoA$R8-sh2+J1i1;x#q0q zJt%nOzWY#;p9%@k)0H?N1>8qK0u6IBZxP5-n$bMcd0(wS0*8jPq;s&~4`*F(%IeDe zry4?!+Hlnv+SaQ=MHK&%-7_9Nkhpr4E>PA*>?;&Xc^%Bs%cuXO-hae(i09UH);6pX|@NGmi8kpQji-ey|;r2WE` ziZ~a1b9Z>GaS5dM?8G~0)$pjrUaXqoo1O*~p{nvW>%o(9@@+bYw z2f(u_P}06awSEN}+U78_hbSd7$^gUF3&4y<4}62R!v0AW0aR1_%?mGJSwNy%;ahXP5#I5qne~HQ&zG0{N$T z9nuVNS!b9uipAW01}<&167QCiN=^*I69$S`51!XM`5AT;-GZM0sc7fvEpVC0ovh!hc>++b+NqFYEJQdZs7H$hgbV|fBE{mQW#F{^a4TajV%CnbGgns@zPB7G{Ji;faJRG=Q4{A;*2mzZ-dBh9!hlbXH}dx=z9KawcInOR@S~N`88p=JA}Qy zK+~M)Y9OH4Js7pVuOh}ij@4fByNPt)T)<+0>HU=8kTPx)wc~W~bZJ$}ntp&rSEQx%j0jSJ5b*J&E_cf`I(mt0n!YVD z)`rQOXeQYEz$kM+h2|(9rw1i})KM@@_lB66QWwKa?~YoV_3J4VK!D=_I@ZouEQ3;N3p}2@>r- z4!JlWGmzzdx4dx!7>-w*EDuBnM6@Bdi=9Z;=Ku=Ap%&Jy|0qIb8a@j2%N~?~!pY3QU%T?nf0l^(}t) zjVT}F1*$m>8m@^XT1*(xZr|={Dd3Ng1@fT59xs>tl)dG9pHm|5zF*mb+@SB0j_e{A z1P!DKor-Vawaw1}N_t99_jZqYmoa4>4s)oqsC*MHWqY67t-Lul69&eq;Nj*#YAOTj zZdid=wl7K40q~g)t_qF;7Tv%x(m#T%f(>YdYi^cD^AwFn(&8oBQFuy3JkHizehn|E zg}5@6Hhu@qc-1Wq5nDZ61V!p|X>zEocn{q~S&rhH{7D~MjD^IAOm!Y!vzVGJG?k^5 z4+Zd;&!YVPcv8euEH7TD+w^n(VFWyrul{;x5>{jPXZEFnm-EeFgH7&-P77iSU3(Txq?bIXXU@IK7NI?-UaOlW7An+-$_4pXysZte~B;_%$qmOZB8Eb7D6b}x=n%3czu!C zn|YQ(xbGEW{HPgc+>S{Y+r2cp$b<~lY?#Xk#6#J$6vD9Pyn+ckpETH9!C4{U6a$>P z_#`Qf-+|)H;I*L&hvX&Ycthr3UddJ}abHoL6f-i;bok%{5a|aS_?*RH$>6PLun9Bp zbxzRy#6oCA!iMVE29br0T`I)C(2R2eQ^;bp&H$ zFhK~3sPW%rAG9{=450lw8$maSX?}aQGq#4c4?0N~NTCqLG}eNnba1!PPUe`=Lc3PO z(a<}++yjMWE~v#kJNq=?&X_S=VLNa=c?NXSHIcklY7!d4f0kpuBO}E@Cq`8E`d<%K zLmfcA_;0RECBbC8S`0t00NsnNMQY{j1u=)Yg-cQ(I3Lc(X-PV`|wpro-Cwg&nRW6uqrmvvwR_NHe7NU zY7qDP2kUzOAk^Kc0+Q?=XqB~H8%-9@h%JJRnrdLy1G==&_nX+P96E-Q1wbl;qR^W{^FO&}0%{4dX^<6%) zy$+yaZQ!@HG(JeC$-Tz$SbIg(R@Wm6p%#`#^#QlH2pVx+MjA3>2Wm%2Co{@d!XVvz@LY%uOX(W(3^RPOR86 zu&=b03{LkA^h`9L8v)0d=Oh6u9T53Q_Gm{26}9dNY-4+P`#R1kxS~DcRl{~DMes)) z80HEkGC-6(<4hi$$9|T$LWU=~~}GZR6v0H=1`HL1tapn08BT!iG4;85GZ!99w! zn`YaIxcDrcDG)V0f<-^WMCNuH*mNjBi8vRCoI&<3XOlaFlO-o*{r&<#+65f#q)bJAS{Ym`=WWRLa~M020|7aBBSE{6}^ zw55%(kt)1sloeMAN>$#7L~(M7;bg=k&ol=1Uz7GvgEZS74@xSbSrn3aX59D z2_Rp7Gsz*Y@|Ko5VE2_x<%>`fuh38{{nX!Yea8?b490Cq{~ng%+FH)nWf*{yM8lGI z*$;8f9mD250+PH7OS9`b^>umG|W7eYssUD9>l2^l8B z>8w1+2UjuVVA~$X0+ocrFRLR!`E#EZNkz+jjLL;{BqF4|l;-q<`{MqH<`-ztUt26=@*sxa)BRhGD$dwFGx}sG+TXY3SyMQFchvaP|yR&~Wx)&;*f)V(eqY zY3fNs;qC2xoaE?g{N`=)Je1<1Q)U(5>82X;=o}L

    ww5gW#7b1nEN22|4B%My+zkW@t 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 CI=Vyv literal 0 HcmV?d00001 diff --git a/packages/lumos/img/lumos-logo.svg b/packages/lumos/img/lumos-logo.svg new file mode 100644 index 00000000000..c30b5f3eb9c --- /dev/null +++ b/packages/lumos/img/lumos-logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/packages/lumos/img/lumos-screenshot.png b/packages/lumos/img/lumos-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..425c1aa5b3af7f10d9298adf9f5593f51616a081 GIT binary patch literal 412352 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

    u+i8KWp>5nr}pAb1aQI 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ΞP_2qHAo)nj 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ˢSodK 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 z zs4&;~D^prNQf=A?w_WT^tUW-0(WdxcoV{gGoLk$4i8tDfgkX&moZ#;65(pODLV^Sj z?(P~ajeA0H3GPnt;DN^7-KWVp?>Fzvd{r|w|EZ=6_Ves}uf5i_&Q9dYj}2C{J7Xgd zO$K4(bIW|MAp^UEsi$CvG(+P_1@#)5En;o4J{DU7I93q6uh_m@X0Z39O{vM<&Knv?{V|@ zx;oYY=F3A|zPmn7ym(3$9gS$}QBoP@441OW_

    *4Y8!=s{ozrc30O+M3I0BIU-d> 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

    yvkh?kzuyLc~8sp>+pH1I5CU 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�}_%^J!7q0V6GZYIaUI@2`8!1 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 z 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 shCjaB|NI(${Y3wB8U8=I3@6YJQ{mqQ Date: Fri, 15 Mar 2024 15:30:38 +0100 Subject: [PATCH 07/33] [AWS] Improve latency description in integration setup (#9346) * initial refactor of latency description * add changelog entry * update changelong pr link --- packages/aws/changelog.yml | 5 +++++ packages/aws/data_stream/apigateway_metrics/manifest.yml | 2 +- packages/aws/data_stream/ebs/manifest.yml | 2 +- packages/aws/data_stream/ec2_metrics/manifest.yml | 2 +- packages/aws/data_stream/ecs_metrics/manifest.yml | 2 +- packages/aws/data_stream/elb_metrics/manifest.yml | 2 +- packages/aws/data_stream/emr_metrics/manifest.yml | 2 +- packages/aws/data_stream/firewall_metrics/manifest.yml | 2 +- packages/aws/data_stream/kafka_metrics/manifest.yml | 2 +- packages/aws/data_stream/kinesis/manifest.yml | 2 +- packages/aws/data_stream/lambda/manifest.yml | 2 +- packages/aws/data_stream/natgateway/manifest.yml | 2 +- packages/aws/data_stream/rds/manifest.yml | 2 +- packages/aws/data_stream/redshift/manifest.yml | 2 +- packages/aws/data_stream/s3_daily_storage/manifest.yml | 2 +- packages/aws/data_stream/s3_request/manifest.yml | 2 +- packages/aws/data_stream/s3_storage_lens/manifest.yml | 2 +- packages/aws/data_stream/sns/manifest.yml | 2 +- packages/aws/data_stream/sqs/manifest.yml | 2 +- packages/aws/data_stream/transitgateway/manifest.yml | 2 +- packages/aws/data_stream/usage/manifest.yml | 2 +- packages/aws/data_stream/vpn/manifest.yml | 2 +- packages/aws/manifest.yml | 2 +- 23 files changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/aws/changelog.yml b/packages/aws/changelog.yml index 1c9a52831f4..1252c4339fe 100644 --- a/packages/aws/changelog.yml +++ b/packages/aws/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.13.1" + changes: + - description: Update latency parameter description + type: enhancement + link: https://github.com/elastic/integrations/pull/9346 - version: "2.13.0" changes: - description: Add Amazon MSK integration diff --git a/packages/aws/data_stream/apigateway_metrics/manifest.yml b/packages/aws/data_stream/apigateway_metrics/manifest.yml index 9fad056decc..a3ded65eaa3 100644 --- a/packages/aws/data_stream/apigateway_metrics/manifest.yml +++ b/packages/aws/data_stream/apigateway_metrics/manifest.yml @@ -25,7 +25,7 @@ streams: required: false show_user: true - name: latency - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `5m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. type: text title: Latency multi: false diff --git a/packages/aws/data_stream/ebs/manifest.yml b/packages/aws/data_stream/ebs/manifest.yml index ddc6369b0f6..d738b843814 100644 --- a/packages/aws/data_stream/ebs/manifest.yml +++ b/packages/aws/data_stream/ebs/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/ec2_metrics/manifest.yml b/packages/aws/data_stream/ec2_metrics/manifest.yml index 59ceddadaf0..8a15fd55b2d 100644 --- a/packages/aws/data_stream/ec2_metrics/manifest.yml +++ b/packages/aws/data_stream/ec2_metrics/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/ecs_metrics/manifest.yml b/packages/aws/data_stream/ecs_metrics/manifest.yml index 73306c0da3e..837fa3d6fb4 100644 --- a/packages/aws/data_stream/ecs_metrics/manifest.yml +++ b/packages/aws/data_stream/ecs_metrics/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/elb_metrics/manifest.yml b/packages/aws/data_stream/elb_metrics/manifest.yml index 5b1c38bb754..48bce706a5d 100644 --- a/packages/aws/data_stream/elb_metrics/manifest.yml +++ b/packages/aws/data_stream/elb_metrics/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/emr_metrics/manifest.yml b/packages/aws/data_stream/emr_metrics/manifest.yml index c16c0819354..373787bc6a6 100644 --- a/packages/aws/data_stream/emr_metrics/manifest.yml +++ b/packages/aws/data_stream/emr_metrics/manifest.yml @@ -31,7 +31,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/firewall_metrics/manifest.yml b/packages/aws/data_stream/firewall_metrics/manifest.yml index 417522f087a..672815ad860 100644 --- a/packages/aws/data_stream/firewall_metrics/manifest.yml +++ b/packages/aws/data_stream/firewall_metrics/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/kafka_metrics/manifest.yml b/packages/aws/data_stream/kafka_metrics/manifest.yml index 8857189bd64..0f039c45eb0 100644 --- a/packages/aws/data_stream/kafka_metrics/manifest.yml +++ b/packages/aws/data_stream/kafka_metrics/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/kinesis/manifest.yml b/packages/aws/data_stream/kinesis/manifest.yml index 82ea4ed8502..97f04ab7d37 100644 --- a/packages/aws/data_stream/kinesis/manifest.yml +++ b/packages/aws/data_stream/kinesis/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/lambda/manifest.yml b/packages/aws/data_stream/lambda/manifest.yml index ea3d754b140..00fdba14515 100644 --- a/packages/aws/data_stream/lambda/manifest.yml +++ b/packages/aws/data_stream/lambda/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/natgateway/manifest.yml b/packages/aws/data_stream/natgateway/manifest.yml index f321ee4f903..55a8853ace3 100644 --- a/packages/aws/data_stream/natgateway/manifest.yml +++ b/packages/aws/data_stream/natgateway/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/rds/manifest.yml b/packages/aws/data_stream/rds/manifest.yml index a52723fe299..9c6a270a38f 100644 --- a/packages/aws/data_stream/rds/manifest.yml +++ b/packages/aws/data_stream/rds/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/redshift/manifest.yml b/packages/aws/data_stream/redshift/manifest.yml index 64ba5350ca2..39fe2a86510 100644 --- a/packages/aws/data_stream/redshift/manifest.yml +++ b/packages/aws/data_stream/redshift/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/s3_daily_storage/manifest.yml b/packages/aws/data_stream/s3_daily_storage/manifest.yml index 194bd377e6c..33eec16ae63 100644 --- a/packages/aws/data_stream/s3_daily_storage/manifest.yml +++ b/packages/aws/data_stream/s3_daily_storage/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/s3_request/manifest.yml b/packages/aws/data_stream/s3_request/manifest.yml index ebdfb0ab649..620c188f01d 100644 --- a/packages/aws/data_stream/s3_request/manifest.yml +++ b/packages/aws/data_stream/s3_request/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/s3_storage_lens/manifest.yml b/packages/aws/data_stream/s3_storage_lens/manifest.yml index 20b3a423dda..fb5ac2ff489 100644 --- a/packages/aws/data_stream/s3_storage_lens/manifest.yml +++ b/packages/aws/data_stream/s3_storage_lens/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/sns/manifest.yml b/packages/aws/data_stream/sns/manifest.yml index 361557a3625..3dcd20a1107 100644 --- a/packages/aws/data_stream/sns/manifest.yml +++ b/packages/aws/data_stream/sns/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/data_stream/sqs/manifest.yml b/packages/aws/data_stream/sqs/manifest.yml index bdb5aa8f9b2..68bb5a33c43 100644 --- a/packages/aws/data_stream/sqs/manifest.yml +++ b/packages/aws/data_stream/sqs/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/transitgateway/manifest.yml b/packages/aws/data_stream/transitgateway/manifest.yml index ff51121e944..323551bc096 100644 --- a/packages/aws/data_stream/transitgateway/manifest.yml +++ b/packages/aws/data_stream/transitgateway/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/usage/manifest.yml b/packages/aws/data_stream/usage/manifest.yml index f7928fdc75f..f2dd2d0bf82 100644 --- a/packages/aws/data_stream/usage/manifest.yml +++ b/packages/aws/data_stream/usage/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: include_linked_accounts type: bool title: Include Linked Accounts diff --git a/packages/aws/data_stream/vpn/manifest.yml b/packages/aws/data_stream/vpn/manifest.yml index 05eb6486c9c..c2925432279 100644 --- a/packages/aws/data_stream/vpn/manifest.yml +++ b/packages/aws/data_stream/vpn/manifest.yml @@ -30,7 +30,7 @@ streams: multi: false required: false show_user: false - description: To address latency issues between certain AWS services and CloudWatch, specify a latency parameter to adjust the collection start time and end time in Metricbeat such as `15m`. + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. - name: tags_filter type: yaml title: Tags Filter diff --git a/packages/aws/manifest.yml b/packages/aws/manifest.yml index 34fb534e9b0..ffbbfa0addb 100644 --- a/packages/aws/manifest.yml +++ b/packages/aws/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: aws title: AWS -version: 2.13.0 +version: 2.13.1 description: Collect logs and metrics from Amazon Web Services (AWS) with Elastic Agent. type: integration categories: From b5d1e40b49b1932171d6cc472a0fe2abb1d9da90 Mon Sep 17 00:00:00 2001 From: Dan Kortschak <90160302+efd6@users.noreply.github.com> Date: Mon, 18 Mar 2024 06:42:34 +1030 Subject: [PATCH 08/33] qualys_vmdr: increase request timeout and document (#9371) Requests to the API may take significant time to complete, so increase the default and document that short timeouts may cause requests to fail to help users avoid this issue. --- packages/qualys_vmdr/changelog.yml | 5 +++++ .../asset_host_detection/manifest.yml | 18 +++++++++++++----- .../data_stream/knowledge_base/manifest.yml | 17 ++++++++++++----- packages/qualys_vmdr/manifest.yml | 2 +- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/qualys_vmdr/changelog.yml b/packages/qualys_vmdr/changelog.yml index 4971c977726..e3ad661b1c9 100644 --- a/packages/qualys_vmdr/changelog.yml +++ b/packages/qualys_vmdr/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.1.0" + changes: + - description: Increase request timeout default and document timeout length warning. + type: enhancement + link: https://github.com/elastic/integrations/pull/9371 - version: "2.0.0" changes: - description: Expand documents to map each vulnerability per host. diff --git a/packages/qualys_vmdr/data_stream/asset_host_detection/manifest.yml b/packages/qualys_vmdr/data_stream/asset_host_detection/manifest.yml index 7d0fe3a7d1b..df64cca6496 100644 --- a/packages/qualys_vmdr/data_stream/asset_host_detection/manifest.yml +++ b/packages/qualys_vmdr/data_stream/asset_host_detection/manifest.yml @@ -15,7 +15,9 @@ streams: - name: interval type: text title: Interval - description: "Interval between two REST API calls. User can choose interval as per their plan mentioned in [Qualys API Limits](https://www.qualys.com/docs/qualys-api-limits.pdf). Supported units for this parameter are h/m/s." + description: >- + Interval between two REST API calls. User can choose interval as per their plan mentioned in + [Qualys API Limits](https://www.qualys.com/docs/qualys-api-limits.pdf). Supported units for this parameter are h/m/s. default: 4h multi: false required: true @@ -23,7 +25,9 @@ streams: - name: batch_size type: integer title: Batch Size - description: "Batch size for the response of the Qualys Server API. This parameter specifies the truncation limit for the response. Specify 0 for no truncation limit." + description: >- + Batch size for the response of the Qualys Server API. This parameter specifies the truncation limit for the response. + Specify 0 for no truncation limit. default: 1000 multi: false required: true @@ -31,15 +35,19 @@ streams: - 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." + description: >- + Duration before declaring that the HTTP client connection has timed out. Give a timeout of more than 1 minute when + retrieving data which is more than 15 days old. Supported time units are ns, us, ms, s, m, h. Requests may take + significant time, so short timeouts are not recommended. multi: false required: true show_user: false - default: 30s + default: 10m - name: input_parameters type: text title: Input Parameters - description: "Input Parameters for the URL. param1=value¶m2=value¶m3=....*" + description: >- + Input Parameters for the URL. param1=value¶m2=value¶m3=....* multi: false required: false show_user: true diff --git a/packages/qualys_vmdr/data_stream/knowledge_base/manifest.yml b/packages/qualys_vmdr/data_stream/knowledge_base/manifest.yml index 9172ff5b114..93b9626e30f 100644 --- a/packages/qualys_vmdr/data_stream/knowledge_base/manifest.yml +++ b/packages/qualys_vmdr/data_stream/knowledge_base/manifest.yml @@ -15,7 +15,8 @@ streams: - name: initial_interval type: text title: Initial Interval - description: "How far back to pull the Knowledge Base data from Qualys VMDR. Supported units for this parameter are s, m, h." + description: >- + How far back to pull the Knowledge Base data from Qualys VMDR. Supported units for this parameter are s, m, h. multi: false required: true show_user: true @@ -23,7 +24,9 @@ streams: - name: interval type: text title: Interval - description: "Interval between two REST API calls. User can choose interval as per their plan mentioned in [Qualys API Limits](https://www.qualys.com/docs/qualys-api-limits.pdf). Supported units for this parameter are h/m/s." + description: >- + Interval between two REST API calls. User can choose interval as per their plan mentioned in + [Qualys API Limits](https://www.qualys.com/docs/qualys-api-limits.pdf). Supported units for this parameter are h/m/s. default: 6h multi: false required: true @@ -31,15 +34,19 @@ streams: - name: http_client_timeout type: text title: HTTP Client Timeout - description: "Duration before declaring that the HTTP client connection has timed out. Give a timeout of more than 1 minute when retrieving data which is more than 15 days old. Supported time units are ns, us, ms, s, m, h." + description: >- + Duration before declaring that the HTTP client connection has timed out. Give a timeout of more than 1 minute when + retrieving data which is more than 15 days old. Supported time units are ns, us, ms, s, m, h. Requests may take + significant time, so short timeouts are not recommended. multi: false required: true show_user: false - default: 3m + default: 10m - name: input_parameters type: text title: Input Parameters - description: "Input Parameters for the URL. param1=value¶m2=value¶m3=....*" + description: >- + Input Parameters for the URL. param1=value¶m2=value¶m3=....* multi: false required: false show_user: true diff --git a/packages/qualys_vmdr/manifest.yml b/packages/qualys_vmdr/manifest.yml index f7e0cded9d0..b7db7a283e1 100644 --- a/packages/qualys_vmdr/manifest.yml +++ b/packages/qualys_vmdr/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: qualys_vmdr title: Qualys VMDR -version: "2.0.0" +version: "2.1.0" description: Collect data from Qualys VMDR platform with Elastic Agent. type: integration categories: From f7bcc2634f37107df14610ce5da054406d1f4619 Mon Sep 17 00:00:00 2001 From: Dan Kortschak <90160302+efd6@users.noreply.github.com> Date: Mon, 18 Mar 2024 06:48:27 +1030 Subject: [PATCH 09/33] sentinel_one_cloud_funnel: improve process handling (#9361) --- .../sentinel_one_cloud_funnel/changelog.yml | 5 ++++ .../pipeline/test-process.log-expected.json | 1 + .../ingest_pipeline/pipeline-process.yml | 24 +++++++++++++++++++ .../sentinel_one_cloud_funnel/manifest.yml | 2 +- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/sentinel_one_cloud_funnel/changelog.yml b/packages/sentinel_one_cloud_funnel/changelog.yml index 24fed47691e..f63e9529341 100644 --- a/packages/sentinel_one_cloud_funnel/changelog.yml +++ b/packages/sentinel_one_cloud_funnel/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.13.0" + changes: + - description: Improve detection rules support for process events. + type: enhancement + link: https://github.com/elastic/integrations/pull/9361 - version: "0.12.0" changes: - description: Improve detection rules support. diff --git a/packages/sentinel_one_cloud_funnel/data_stream/event/_dev/test/pipeline/test-process.log-expected.json b/packages/sentinel_one_cloud_funnel/data_stream/event/_dev/test/pipeline/test-process.log-expected.json index eeffda9be47..d9931ba018a 100644 --- a/packages/sentinel_one_cloud_funnel/data_stream/event/_dev/test/pipeline/test-process.log-expected.json +++ b/packages/sentinel_one_cloud_funnel/data_stream/event/_dev/test/pipeline/test-process.log-expected.json @@ -39,6 +39,7 @@ "args_count": 1, "command_line": "./nr-winpkg", "entity_id": "D0046CBAF5BC03DA", + "executable": "C:\\ProgramFiles\\NewRelic\\newrelic-infra\\newrelic-integrations\\nr-winpkg.exe", "hash": { "md5": "65f9131df4b7c909ae41add0fcd172fa", "sha1": "a1d7ac9e15c26535a7dec40bba21cda4de078504", diff --git a/packages/sentinel_one_cloud_funnel/data_stream/event/elasticsearch/ingest_pipeline/pipeline-process.yml b/packages/sentinel_one_cloud_funnel/data_stream/event/elasticsearch/ingest_pipeline/pipeline-process.yml index 86b3ea805af..017a7e09d6f 100644 --- a/packages/sentinel_one_cloud_funnel/data_stream/event/elasticsearch/ingest_pipeline/pipeline-process.yml +++ b/packages/sentinel_one_cloud_funnel/data_stream/event/elasticsearch/ingest_pipeline/pipeline-process.yml @@ -274,6 +274,10 @@ processors: field: json.tgt.process.publisher target_field: sentinel_one_cloud_funnel.event.tgt.process.publisher ignore_missing: true + - set: + field: process.code_signature.subject_name + copy_from: sentinel_one_cloud_funnel.event.tgt.process.publisher + ignore_empty_value: true - rename: field: json.tgt.process.reasonSignatureInvalid target_field: sentinel_one_cloud_funnel.event.tgt.process.reason_signature_invalid @@ -293,6 +297,14 @@ processors: field: json.tgt.process.signedStatus target_field: sentinel_one_cloud_funnel.event.tgt.process.signed_status ignore_missing: true + - set: + field: process.code_signature.exists + value: true + if: ctx.sentinel_one_cloud_funnel?.event?.tgt?.process?.signed_status == 'signed' + - set: + field: process.code_signature.exists + value: false + if: ctx.sentinel_one_cloud_funnel?.event?.tgt?.process?.signed_status != 'signed' - date: field: json.tgt.process.startTime tag: 'date_json_tgt_process_startTime' @@ -321,6 +333,14 @@ processors: field: json.tgt.process.verifiedStatus target_field: sentinel_one_cloud_funnel.event.tgt.process.verified_status ignore_missing: true + - set: + field: process.code_signature.trusted + value: true + if: ctx.sentinel_one_cloud_funnel?.event?.tgt?.process?.verified_status == 'verified' + - set: + field: process.code_signature.trusted + value: false + if: ctx.process?.code_signature?.exists == true && ctx.sentinel_one_cloud_funnel?.event?.tgt?.process?.verified_status != 'verified' - remove: field: - process.parent @@ -336,6 +356,10 @@ processors: field: process.name copy_from: sentinel_one_cloud_funnel.event.tgt.process.name ignore_empty_value: true + - set: + field: process.executable + copy_from: sentinel_one_cloud_funnel.event.tgt.process.image.path + ignore_empty_value: true - convert: field: sentinel_one_cloud_funnel.event.tgt.process.pid target_field: process.pid diff --git a/packages/sentinel_one_cloud_funnel/manifest.yml b/packages/sentinel_one_cloud_funnel/manifest.yml index 72d8b88f927..ee24b0b39e5 100644 --- a/packages/sentinel_one_cloud_funnel/manifest.yml +++ b/packages/sentinel_one_cloud_funnel/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: sentinel_one_cloud_funnel title: SentinelOne Cloud Funnel -version: "0.12.0" +version: "0.13.0" description: Collect logs from SentinelOne Cloud Funnel with Elastic Agent. type: integration categories: ["security", "edr_xdr"] From 44acbabac0fb1c501cb5e48c4780adc49e5af818 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Reddy Burri Date: Mon, 18 Mar 2024 11:31:02 +0530 Subject: [PATCH 10/33] [TI_Cybersixgill] Add IOC expiration support (#9374) * Add IOC expiration support --- .../ti_cybersixgill/_dev/build/docs/README.md | 6 + .../_dev/deploy/docker/files/config.yml | 45 ++++ packages/ti_cybersixgill/changelog.yml | 5 + .../_dev/test/pipeline/test-common-config.yml | 2 + ...test-cybersixgill-ndjson.log-expected.json | 12 ++ .../_dev/test/system/test-httpjson-config.yml | 3 + .../threat/agent/stream/httpjson.yml.hbs | 7 + .../elasticsearch/ilm/default_policy.json | 23 ++ .../elasticsearch/ingest_pipeline/default.yml | 82 ++++++- .../data_stream/threat/fields/ecs.yml | 7 + .../data_stream/threat/fields/fields.yml | 12 ++ .../data_stream/threat/lifecycle.yml | 1 + .../data_stream/threat/manifest.yml | 10 + .../data_stream/threat/sample_event.json | 19 +- packages/ti_cybersixgill/docs/README.md | 29 ++- .../transform/latest_ioc/fields/agent.yml | 201 ++++++++++++++++++ .../latest_ioc/fields/base-fields.yml | 37 ++++ .../transform/latest_ioc/fields/ecs.yml | 67 ++++++ .../transform/latest_ioc/fields/fields.yml | 39 ++++ .../transform/latest_ioc/manifest.yml | 18 ++ .../transform/latest_ioc/transform.yml | 37 ++++ ...-63c9fee0-5bea-11ec-9302-152fd766c738.json | 72 ++++--- ...-717013b0-5bed-11ec-9302-152fd766c738.json | 66 ++++-- ...-c75353f0-5be8-11ec-9302-152fd766c738.json | 63 ++++-- ...-7186bf10-5be4-11ec-9302-152fd766c738.json | 11 +- ...ybersixgill-security-solution-default.json | 14 ++ packages/ti_cybersixgill/manifest.yml | 2 +- 27 files changed, 791 insertions(+), 99 deletions(-) create mode 100644 packages/ti_cybersixgill/data_stream/threat/elasticsearch/ilm/default_policy.json create mode 100644 packages/ti_cybersixgill/data_stream/threat/lifecycle.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/agent.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/base-fields.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/ecs.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/fields.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/manifest.yml create mode 100644 packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/transform.yml create mode 100644 packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-security-solution-default.json diff --git a/packages/ti_cybersixgill/_dev/build/docs/README.md b/packages/ti_cybersixgill/_dev/build/docs/README.md index f49f11d1ba9..0b54853de5e 100644 --- a/packages/ti_cybersixgill/_dev/build/docs/README.md +++ b/packages/ti_cybersixgill/_dev/build/docs/README.md @@ -8,6 +8,12 @@ This integration connects with the commercial [Cybersixgill Darkfeed](https://ww The Cybersixgill Darkfeed integration collects threat intelligence from the Darkfeed TAXII service available using the credentials provided from Cybersixgill. +#### Expiration of Indicators of Compromise (IOCs) +The ingested IOCs are expired after the duration configured by `IOC Expiration Duration` integration setting. An [Elastic Transform](https://www.elastic.co/guide/en/elasticsearch/reference/current/transforms.html) is created to faciliate only active IOCs be available to the end users. This transform creates destination indices named `logs-ti_cybersixgill_latest.dest_threat-*` which only contains active and unexpired IOCs. The latest destination index also has an alias named `logs-ti_cybersixgill_latest.threat`. When querying for active indicators or setting up indicator match rules, only use the latest destination indices or the alias to avoid false positives from expired IOCs. Dashboards are also pointing to the latest destination indices containing active IOC. Please read [ILM Policy](#ilm-policy) below which is added to avoid unbounded growth on source datastream `.ds-logs-ti_cybersixgill.threat-*` indices. + +#### ILM Policy +To facilitate IOC expiration, source datastream-backed indices `.ds-logs-ti_cybersixgill.threat-*` are allowed to contain duplicates from each polling interval. ILM policy `logs-ti_cybersixgill.threat-default_policy` is added to these source indices so it doesn't lead to unbounded growth. This means data in these source indices will be deleted after `5 days` from ingested date. + {{fields "threat"}} {{event "threat"}} \ No newline at end of file diff --git a/packages/ti_cybersixgill/_dev/deploy/docker/files/config.yml b/packages/ti_cybersixgill/_dev/deploy/docker/files/config.yml index 32762a590d9..2bd3cc75a09 100644 --- a/packages/ti_cybersixgill/_dev/deploy/docker/files/config.yml +++ b/packages/ti_cybersixgill/_dev/deploy/docker/files/config.yml @@ -99,6 +99,51 @@ rules: "type": "indicator", "valid_from": "2021-12-07T22:43:29Z" }, + { + "confidence": 80, + "created": "2024-03-10T13:58:01.596Z", + "description": "Hash attributed to malware that was discovered in the dark and deep web", + "extensions": { + "extension-definition--3de9ff00-174d-4d41-87c9-05a27a7e117c": { + "extension_type": "toplevel-property-extension" + } + }, + "external_references": [ + { + "positive_rate": "medium", + "source_name": "VirusTotal", + "url": "https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f220" + }, + { + "description": "Mitre attack tactics and technique reference", + "mitre_attack_tactic": "Build Capabilities", + "mitre_attack_tactic_id": "TA0024", + "mitre_attack_tactic_url": "https://attack.mitre.org/tactics/TA0024/", + "source_name": "mitre-attack" + } + ], + "id": "indicator--302dab0f-64dc-42f5-b99e-702b28c1aaa0", + "indicator_types": [ + "malicious-activity" + ], + "lang": "en", + "modified": "2024-03-10T15:58:01.596Z", + "name": "4d0f21919d623bd1631ee15ca7429f20;5ce39ef0700b64bd0c71b55caf64ae45d8400960;7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f220", + "pattern": "[file:hashes.MD5 = '4d0f21919d623bd1631ee15ca7429f20' OR file:hashes.'SHA-1' = '5ce39ef0700b64bd0c71b55caf64ae45d8400960' OR file:hashes.'SHA-256' = '7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f220']", + "pattern_type": "stix", + "sixgill_actor": "vaedzy", + "sixgill_confidence": 80, + "sixgill_feedid": "darkfeed_012", + "sixgill_feedname": "dark_web_hashes", + "sixgill_post_virustotallink": "https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f220", + "sixgill_postid": "c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a", + "sixgill_posttitle": "[病毒样本] #Trickbot (2021-12-07)", + "sixgill_severity": 70, + "sixgill_source": "forum_kafan", + "spec_version": "2.1", + "type": "indicator", + "valid_from": "2024-03-07T02:55:17Z" + }, { "confidence": 70, "created": "2021-12-07T13:58:01.596Z", diff --git a/packages/ti_cybersixgill/changelog.yml b/packages/ti_cybersixgill/changelog.yml index f04b212e14c..b06ea20fa41 100644 --- a/packages/ti_cybersixgill/changelog.yml +++ b/packages/ti_cybersixgill/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.27.0" + changes: + - description: Add support for IOC expiration. + type: enhancement + link: https://github.com/elastic/integrations/pull/9374 - version: "1.26.0" changes: - description: Set sensitive values as secret. diff --git a/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-common-config.yml b/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-common-config.yml index 4da22641654..2c7449ef783 100644 --- a/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-common-config.yml +++ b/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-common-config.yml @@ -1,3 +1,5 @@ fields: tags: - preserve_original_event + _conf: + ioc_expiration_duration: 5d diff --git a/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-cybersixgill-ndjson.log-expected.json b/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-cybersixgill-ndjson.log-expected.json index 09ea0089d7b..3a6aeeb9b57 100644 --- a/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-cybersixgill-ndjson.log-expected.json +++ b/packages/ti_cybersixgill/data_stream/threat/_dev/test/pipeline/test-cybersixgill-ndjson.log-expected.json @@ -4,6 +4,8 @@ "@timestamp": "2021-12-07T09:22:41.485Z", "cybersixgill": { "actor": "layna61524", + "deleted_at": "2021-12-12T09:22:41.485Z", + "expiration_duration": "5d", "feedname": "darkweb_vt_links", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -42,6 +44,7 @@ }, "first_seen": "2021-12-07T00:03:00.000Z", "last_seen": "2021-12-07T09:22:41.485Z", + "name": "2e7e43be1fc3cbefef8d686ce63ceb30456a4a67d555407fb6797e969972945c", "provider": "forum_bestblackhat", "reference": "https://portal.cybersixgill.com/#/search?q=_id:a452593da2f6314c2f2d6c98c6473608e11914e3", "type": "file" @@ -63,6 +66,8 @@ "@timestamp": "2021-12-07T18:04:26.451Z", "cybersixgill": { "actor": "CoinProject.info", + "deleted_at": "2021-12-12T18:04:26.451Z", + "expiration_duration": "5d", "feedname": "malware_download_urls", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -91,6 +96,7 @@ "description": "Malware available for download from file-sharing sites", "first_seen": "2021-12-07T14:52:00.000Z", "last_seen": "2021-12-07T18:04:26.451Z", + "name": "https://ru.scribd.com/user/456422024/ForkLog#from_embed", "provider": "forum_hyipinvest", "reference": "https://portal.cybersixgill.com/#/search?q=_id:3f8c56e4cf6407ee7608e0f605503cb1e3fcedb9", "type": "url", @@ -119,6 +125,8 @@ "@timestamp": "2021-12-07T21:24:50.350Z", "cybersixgill": { "actor": "Admin", + "deleted_at": "2021-12-12T21:24:50.350Z", + "expiration_duration": "5d", "feedname": "dark_web_hashes", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -152,6 +160,7 @@ }, "first_seen": "2021-12-07T21:23:33.000Z", "last_seen": "2021-12-07T21:24:50.350Z", + "name": "1dce6f3ba4a8d355df21a17584c514697ee0c37b51ab5657bc5b3a297b65955f", "provider": "blog_hackdig", "reference": "https://portal.cybersixgill.com/#/search?q=_id:c550f74ba76c0b2c9c46b0577f551ba5ef855813", "type": "file" @@ -173,6 +182,8 @@ "@timestamp": "2021-12-07T22:48:59.141Z", "cybersixgill": { "actor": "enginewo", + "deleted_at": "2021-12-12T22:48:59.141Z", + "expiration_duration": "5d", "feedname": "compromised_sites", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -201,6 +212,7 @@ "description": "Shell access to this domain is being sold on dark web markets", "first_seen": "2021-12-07T22:43:29.000Z", "last_seen": "2021-12-07T22:48:59.141Z", + "name": "sdbpibandung.sch.id", "provider": "market_magbo", "reference": "https://portal.cybersixgill.com/#/search?q=_id:955f5379c2828ce483b74a671e498a5f69f9ea36", "type": "domain-name", diff --git a/packages/ti_cybersixgill/data_stream/threat/_dev/test/system/test-httpjson-config.yml b/packages/ti_cybersixgill/data_stream/threat/_dev/test/system/test-httpjson-config.yml index 3838cb93d9a..e8cf3d861b4 100644 --- a/packages/ti_cybersixgill/data_stream/threat/_dev/test/system/test-httpjson-config.yml +++ b/packages/ti_cybersixgill/data_stream/threat/_dev/test/system/test-httpjson-config.yml @@ -9,3 +9,6 @@ data_stream: url: http://{{Hostname}}:{{Port}}/taxii/sixgill-taxii/collections/102/objects interval: 30s enable_request_tracer: true + ioc_expiration_duration: 10d +assert: + hit_count: 4 diff --git a/packages/ti_cybersixgill/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/ti_cybersixgill/data_stream/threat/agent/stream/httpjson.yml.hbs index 2bea32e7bbb..96dc6124174 100644 --- a/packages/ti_cybersixgill/data_stream/threat/agent/stream/httpjson.yml.hbs +++ b/packages/ti_cybersixgill/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -50,6 +50,13 @@ cursor: timestamp: value: '[[ .last_response.header.Get "X-TAXII-Date-Added-Last" ]]' +{{#if ioc_expiration_duration}} +fields_under_root: true +fields: + _conf: + ioc_expiration_duration: "{{ioc_expiration_duration}}" +{{/if}} + tags: {{#if preserve_original_event}} - preserve_original_event diff --git a/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ilm/default_policy.json b/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ilm/default_policy.json new file mode 100644 index 00000000000..ec3f7c9942e --- /dev/null +++ b/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ilm/default_policy.json @@ -0,0 +1,23 @@ +{ + "policy": { + "phases": { + "hot": { + "actions": { + "rollover": { + "max_age": "1d", + "max_size": "50gb" + }, + "set_priority": { + "priority": 100 + } + } + }, + "delete": { + "min_age": "4d", + "actions": { + "delete": {} + } + } + } + } +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ingest_pipeline/default.yml b/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ingest_pipeline/default.yml index b8efd57a20f..585d4e80769 100644 --- a/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ingest_pipeline/default.yml +++ b/packages/ti_cybersixgill/data_stream/threat/elasticsearch/ingest_pipeline/default.yml @@ -27,11 +27,6 @@ processors: ignore_missing: true - drop: if: ctx?.cybersixgill?.type != "indicator" - - fingerprint: - fields: - - cybersixgill.id - target_field: "_id" - ignore_missing: true ##################### # Threat ECS Fields # ##################### @@ -74,6 +69,13 @@ processors: - "yyyy-MM-dd'T'HH:mm:ss.SSSz" - "yyyy-MM-dd'T'HH:mm:ss.SSSZ" if: "ctx.cybersixgill?.valid_from != null" + - fingerprint: + fields: + - cybersixgill.id + - cybersixgill.created + - cybersixgill.modified + target_field: "_id" + ignore_missing: true - grok: field: cybersixgill.pattern patterns: @@ -106,6 +108,22 @@ processors: value: "{{_ingest._value}}" override: false ignore_missing: true + - set: + field: threat.indicator.name + value: '{{_temp_.threatvalue}}' + ignore_empty_value: true + - set: + field: threat.indicator.name + copy_from: threat.indicator.file.hash.md5 + ignore_empty_value: true + - set: + field: threat.indicator.name + copy_from: threat.indicator.file.hash.sha1 + ignore_empty_value: true + - set: + field: threat.indicator.name + copy_from: threat.indicator.file.hash.sha256 + ignore_empty_value: true - rename: field: _temp_.threatvalue target_field: threat.indicator.ip @@ -168,6 +186,59 @@ processors: type: integer target_field: threat.indicator.confidence ignore_missing: true + - script: + lang: painless + tag: script-default-deleted_at + if: ctx.cybersixgill?.deleted_at == null && ctx._conf?.ioc_expiration_duration != null && ctx._conf.ioc_expiration_duration != '' + description: Indicator Expiration is done after `_conf.ioc_expiration_duration` (default 90d) since its creation time. This script adds a default `cybersixgill.indicator.deleted_at` field to allow indicator expiration. + source: > + def dur = ctx._conf.ioc_expiration_duration; + ZonedDateTime _tmp_deleted_at; + ZonedDateTime _tmp_created_at = ZonedDateTime.parse(ctx.cybersixgill.created); + if (dur instanceof String){ + String time_unit = dur.substring(dur.length() - 1, dur.length()); + String time_value = dur.substring(0, dur.length() - 1); + if (time_unit == 'd') { + _tmp_deleted_at = _tmp_created_at.plusDays(Long.parseLong(time_value)); + } else if (time_unit == 'h') { + _tmp_deleted_at = _tmp_created_at.plusHours(Long.parseLong(time_value)); + } else if (time_unit == 'm') { + _tmp_deleted_at = _tmp_created_at.plusMinutes(Long.parseLong(time_value)); + } else { + _tmp_deleted_at = _tmp_created_at.plusDays(90L); + if (ctx.error == null) { + ctx.error = new HashMap(); + } + if (ctx.error.message == null) { + ctx.error.message = new ArrayList(); + } + ctx.error.message.add('invalid ioc_expiration_duration: using default 90 days'); + } + ctx.cybersixgill.deleted_at = _tmp_deleted_at; + } + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: cybersixgill.deleted_at + tag: date_deleted_at + target_field: cybersixgill.deleted_at + formats: + - ISO8601 + - UNIX + 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}}}' + - fail: + description: 'If this date processor fails, it leads to transform errors, hence failing the document for investigation.' + message: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed' + - rename: + field: _conf.ioc_expiration_duration + tag: rename_conf_ioc_expiration_duration + target_field: cybersixgill.expiration_duration + ignore_missing: true - script: lang: painless if: ctx.cybersixgill?.external_references != null @@ -280,6 +351,7 @@ processors: - cybersixgill.sixgill_feedid - cybersixgill.sixgill_post_virustotallink - cybersixgill.type + - _conf ignore_missing: true on_failure: - set: diff --git a/packages/ti_cybersixgill/data_stream/threat/fields/ecs.yml b/packages/ti_cybersixgill/data_stream/threat/fields/ecs.yml index 7e4da707181..022139ab678 100644 --- a/packages/ti_cybersixgill/data_stream/threat/fields/ecs.yml +++ b/packages/ti_cybersixgill/data_stream/threat/fields/ecs.yml @@ -60,3 +60,10 @@ name: threat.tactic.id - external: ecs name: threat.tactic.reference +# Manually define this as a workaround for failing tests and validation +- name: threat.indicator.name + level: extended + type: keyword + description: The display name indicator in an UI friendly format +- external: ecs + name: labels diff --git a/packages/ti_cybersixgill/data_stream/threat/fields/fields.yml b/packages/ti_cybersixgill/data_stream/threat/fields/fields.yml index d61ac6c9e9f..15a570d3c31 100644 --- a/packages/ti_cybersixgill/data_stream/threat/fields/fields.yml +++ b/packages/ti_cybersixgill/data_stream/threat/fields/fields.yml @@ -29,3 +29,15 @@ type: keyword description: | The mitre description of the indicator + - name: deleted_at + type: date + description: | + The timestamp when indicator is (or will be) expired. + - name: expiration_duration + type: keyword + description: | + The configured expiration duration. +- name: labels.is_ioc_transform_source + type: constant_keyword + value: "true" + description: Field indicating if its the transform source for supporting IOC expiration. This field is dropped from destination indices to facilitate easier filtering of indicators. diff --git a/packages/ti_cybersixgill/data_stream/threat/lifecycle.yml b/packages/ti_cybersixgill/data_stream/threat/lifecycle.yml new file mode 100644 index 00000000000..5a4af9095b7 --- /dev/null +++ b/packages/ti_cybersixgill/data_stream/threat/lifecycle.yml @@ -0,0 +1 @@ +data_retention: "5d" diff --git a/packages/ti_cybersixgill/data_stream/threat/manifest.yml b/packages/ti_cybersixgill/data_stream/threat/manifest.yml index ae564b2ce85..d1ebca62766 100644 --- a/packages/ti_cybersixgill/data_stream/threat/manifest.yml +++ b/packages/ti_cybersixgill/data_stream/threat/manifest.yml @@ -1,5 +1,6 @@ type: logs title: Cybersixgill Darkfeed Logs +ilm_policy: logs-ti_cybersixgill.threat-default_policy streams: - input: httpjson vars: @@ -45,6 +46,15 @@ streams: required: false show_user: false description: URL to proxy connections in the form of http\[s\]://:@: + - name: ioc_expiration_duration + type: text + title: IOC Expiration Duration + multi: false + required: true + show_user: true + default: "90d" + description: >- + Enforces all IOCs to expire after this duration since their creation time indicated in the feed. Use [Elasticsearch time units](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units) in days, hours, or minutes (e.g 10d) - name: interval type: text title: Interval diff --git a/packages/ti_cybersixgill/data_stream/threat/sample_event.json b/packages/ti_cybersixgill/data_stream/threat/sample_event.json index 9cd03108cb0..22ee5bf764f 100644 --- a/packages/ti_cybersixgill/data_stream/threat/sample_event.json +++ b/packages/ti_cybersixgill/data_stream/threat/sample_event.json @@ -1,14 +1,16 @@ { "@timestamp": "2021-12-07T13:58:01.596Z", "agent": { - "ephemeral_id": "a7e7cf45-534a-4104-b3c3-9b30d6ebeeb9", - "id": "5607d6f4-6e45-4c33-a087-2e07de5f0082", + "ephemeral_id": "5b99e697-c059-40e4-9097-eb5a21a371c6", + "id": "49b0da18-7d53-4b44-9bda-940341f4fb0f", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.9.1" + "version": "8.12.1" }, "cybersixgill": { "actor": "vaedzy", + "deleted_at": "2021-12-17T13:58:01.596Z", + "expiration_duration": "10d", "feedname": "dark_web_hashes", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -28,18 +30,18 @@ "version": "8.11.0" }, "elastic_agent": { - "id": "5607d6f4-6e45-4c33-a087-2e07de5f0082", + "id": "49b0da18-7d53-4b44-9bda-940341f4fb0f", "snapshot": false, - "version": "8.9.1" + "version": "8.12.1" }, "event": { "agent_id_status": "verified", "category": [ "threat" ], - "created": "2023-08-28T14:48:23.885Z", + "created": "2024-03-15T19:20:27.045Z", "dataset": "ti_cybersixgill.threat", - "ingested": "2023-08-28T14:48:24Z", + "ingested": "2024-03-15T19:20:27Z", "kind": "enrichment", "original": "{\"confidence\":70,\"created\":\"2021-12-07T13:58:01.596Z\",\"description\":\"Hash attributed to malware that was discovered in the dark and deep web\",\"extensions\":{\"extension-definition--3de9ff00-174d-4d41-87c9-05a27a7e117c\":{\"extension_type\":\"toplevel-property-extension\"}},\"external_references\":[{\"positive_rate\":\"medium\",\"source_name\":\"VirusTotal\",\"url\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\"},{\"description\":\"Mitre attack tactics and technique reference\",\"mitre_attack_tactic\":\"Build Capabilities\",\"mitre_attack_tactic_id\":\"TA0024\",\"mitre_attack_tactic_url\":\"https://attack.mitre.org/tactics/TA0024/\",\"source_name\":\"mitre-attack\"}],\"id\":\"indicator--302dab0f-64dc-42f5-b99e-702b28c1aaa9\",\"indicator_types\":[\"malicious-activity\"],\"lang\":\"en\",\"modified\":\"2021-12-07T13:58:01.596Z\",\"name\":\"4d0f21919d623bd1631ee15ca7429f28;5ce39ef0700b64bd0c71b55caf64ae45d8400965;7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"pattern\":\"[file:hashes.MD5 = '4d0f21919d623bd1631ee15ca7429f28' OR file:hashes.'SHA-1' = '5ce39ef0700b64bd0c71b55caf64ae45d8400965' OR file:hashes.'SHA-256' = '7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d']\",\"pattern_type\":\"stix\",\"sixgill_actor\":\"vaedzy\",\"sixgill_confidence\":70,\"sixgill_feedid\":\"darkfeed_012\",\"sixgill_feedname\":\"dark_web_hashes\",\"sixgill_post_virustotallink\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"sixgill_postid\":\"c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a\",\"sixgill_posttitle\":\"[病毒样本] #Trickbot (2021-12-07)\",\"sixgill_severity\":70,\"sixgill_source\":\"forum_kafan\",\"spec_version\":\"2.1\",\"type\":\"indicator\",\"valid_from\":\"2021-12-07T02:55:17Z\"}", "severity": 70, @@ -66,6 +68,7 @@ }, "first_seen": "2021-12-07T02:55:17.000Z", "last_seen": "2021-12-07T13:58:01.596Z", + "name": "7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d", "provider": "forum_kafan", "reference": "https://portal.cybersixgill.com/#/search?q=_id:c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a", "type": "file" @@ -82,4 +85,4 @@ ] } } -} +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/docs/README.md b/packages/ti_cybersixgill/docs/README.md index 102994b191a..277b8e8e17b 100644 --- a/packages/ti_cybersixgill/docs/README.md +++ b/packages/ti_cybersixgill/docs/README.md @@ -8,6 +8,12 @@ This integration connects with the commercial [Cybersixgill Darkfeed](https://ww The Cybersixgill Darkfeed integration collects threat intelligence from the Darkfeed TAXII service available using the credentials provided from Cybersixgill. +#### Expiration of Indicators of Compromise (IOCs) +The ingested IOCs are expired after the duration configured by `IOC Expiration Duration` integration setting. An [Elastic Transform](https://www.elastic.co/guide/en/elasticsearch/reference/current/transforms.html) is created to faciliate only active IOCs be available to the end users. This transform creates destination indices named `logs-ti_cybersixgill_latest.dest_threat-*` which only contains active and unexpired IOCs. The latest destination index also has an alias named `logs-ti_cybersixgill_latest.threat`. When querying for active indicators or setting up indicator match rules, only use the latest destination indices or the alias to avoid false positives from expired IOCs. Dashboards are also pointing to the latest destination indices containing active IOC. Please read [ILM Policy](#ilm-policy) below which is added to avoid unbounded growth on source datastream `.ds-logs-ti_cybersixgill.threat-*` indices. + +#### ILM Policy +To facilitate IOC expiration, source datastream-backed indices `.ds-logs-ti_cybersixgill.threat-*` are allowed to contain duplicates from each polling interval. ILM policy `logs-ti_cybersixgill.threat-default_policy` is added to these source indices so it doesn't lead to unbounded growth. This means data in these source indices will be deleted after `5 days` from ingested date. + **Exported fields** | Field | Description | Type | @@ -27,6 +33,8 @@ The Cybersixgill Darkfeed integration collects threat intelligence from the Dark | container.labels | Image labels. | object | | container.name | Container name. | keyword | | cybersixgill.actor | The related actor for the indicator. | keyword | +| cybersixgill.deleted_at | The timestamp when indicator is (or will be) expired. | date | +| cybersixgill.expiration_duration | The configured expiration duration. | keyword | | cybersixgill.feedname | Name of the Threat Intel feed. | keyword | | cybersixgill.mitre.description | The mitre description of the indicator | keyword | | cybersixgill.title | The title of the indicator. | keyword | @@ -67,6 +75,8 @@ The Cybersixgill Darkfeed integration collects threat intelligence from the Dark | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Input type. | keyword | +| labels | Custom key/value pairs. Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. Example: `docker` and `k8s` labels. | object | +| labels.is_ioc_transform_source | Field indicating if its the transform source for supporting IOC expiration. This field is dropped from destination indices to facilitate easier filtering of indicators. | constant_keyword | | message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | | tags | List of keywords used to tag each event. | keyword | | threat.feed.dashboard_id | Dashboard ID used for Kibana CTI UI | constant_keyword | @@ -79,6 +89,7 @@ The Cybersixgill Darkfeed integration collects threat intelligence from the Dark | threat.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | | threat.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | | threat.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.indicator.name | The display name indicator in an UI friendly format | keyword | | threat.indicator.provider | The name of the indicator's provider. | keyword | | threat.indicator.reference | Reference URL linking to additional information about this indicator. | keyword | | threat.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. | keyword | @@ -102,14 +113,16 @@ An example event for `threat` looks as following: { "@timestamp": "2021-12-07T13:58:01.596Z", "agent": { - "ephemeral_id": "a7e7cf45-534a-4104-b3c3-9b30d6ebeeb9", - "id": "5607d6f4-6e45-4c33-a087-2e07de5f0082", + "ephemeral_id": "5b99e697-c059-40e4-9097-eb5a21a371c6", + "id": "49b0da18-7d53-4b44-9bda-940341f4fb0f", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.9.1" + "version": "8.12.1" }, "cybersixgill": { "actor": "vaedzy", + "deleted_at": "2021-12-17T13:58:01.596Z", + "expiration_duration": "10d", "feedname": "dark_web_hashes", "mitre": { "description": "Mitre attack tactics and technique reference" @@ -129,18 +142,18 @@ An example event for `threat` looks as following: "version": "8.11.0" }, "elastic_agent": { - "id": "5607d6f4-6e45-4c33-a087-2e07de5f0082", + "id": "49b0da18-7d53-4b44-9bda-940341f4fb0f", "snapshot": false, - "version": "8.9.1" + "version": "8.12.1" }, "event": { "agent_id_status": "verified", "category": [ "threat" ], - "created": "2023-08-28T14:48:23.885Z", + "created": "2024-03-15T19:20:27.045Z", "dataset": "ti_cybersixgill.threat", - "ingested": "2023-08-28T14:48:24Z", + "ingested": "2024-03-15T19:20:27Z", "kind": "enrichment", "original": "{\"confidence\":70,\"created\":\"2021-12-07T13:58:01.596Z\",\"description\":\"Hash attributed to malware that was discovered in the dark and deep web\",\"extensions\":{\"extension-definition--3de9ff00-174d-4d41-87c9-05a27a7e117c\":{\"extension_type\":\"toplevel-property-extension\"}},\"external_references\":[{\"positive_rate\":\"medium\",\"source_name\":\"VirusTotal\",\"url\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\"},{\"description\":\"Mitre attack tactics and technique reference\",\"mitre_attack_tactic\":\"Build Capabilities\",\"mitre_attack_tactic_id\":\"TA0024\",\"mitre_attack_tactic_url\":\"https://attack.mitre.org/tactics/TA0024/\",\"source_name\":\"mitre-attack\"}],\"id\":\"indicator--302dab0f-64dc-42f5-b99e-702b28c1aaa9\",\"indicator_types\":[\"malicious-activity\"],\"lang\":\"en\",\"modified\":\"2021-12-07T13:58:01.596Z\",\"name\":\"4d0f21919d623bd1631ee15ca7429f28;5ce39ef0700b64bd0c71b55caf64ae45d8400965;7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"pattern\":\"[file:hashes.MD5 = '4d0f21919d623bd1631ee15ca7429f28' OR file:hashes.'SHA-1' = '5ce39ef0700b64bd0c71b55caf64ae45d8400965' OR file:hashes.'SHA-256' = '7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d']\",\"pattern_type\":\"stix\",\"sixgill_actor\":\"vaedzy\",\"sixgill_confidence\":70,\"sixgill_feedid\":\"darkfeed_012\",\"sixgill_feedname\":\"dark_web_hashes\",\"sixgill_post_virustotallink\":\"https://virustotal.com/#/file/7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d\",\"sixgill_postid\":\"c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a\",\"sixgill_posttitle\":\"[病毒样本] #Trickbot (2021-12-07)\",\"sixgill_severity\":70,\"sixgill_source\":\"forum_kafan\",\"spec_version\":\"2.1\",\"type\":\"indicator\",\"valid_from\":\"2021-12-07T02:55:17Z\"}", "severity": 70, @@ -167,6 +180,7 @@ An example event for `threat` looks as following: }, "first_seen": "2021-12-07T02:55:17.000Z", "last_seen": "2021-12-07T13:58:01.596Z", + "name": "7bdf8b8594ec269da864ee662334f4da53d4820a3f0f8aa665a0fa096ca8f22d", "provider": "forum_kafan", "reference": "https://portal.cybersixgill.com/#/search?q=_id:c0c9a0085fb5281cfb40a0ddb62e1d2c6a53eb7a", "type": "file" @@ -184,5 +198,4 @@ An example event for `threat` looks as following: } } } - ``` \ No newline at end of file diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/agent.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/agent.yml new file mode 100644 index 00000000000..845b84ed9c0 --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/agent.yml @@ -0,0 +1,201 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organization id used to identify different entities in a multi-tenant environment. + + Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. + + For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. + + It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. + + As hostname is not always unique, use values that are meaningful in your environment. + + Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. + + For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type. diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/base-fields.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/base-fields.yml new file mode 100644 index 00000000000..9b559d71a60 --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/base-fields.yml @@ -0,0 +1,37 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: dataset.type + type: constant_keyword + description: Dataset type. +- name: dataset.name + type: constant_keyword + description: Dataset name. +- name: dataset.namespace + type: constant_keyword + description: Dataset namespace. +- name: event.module + type: constant_keyword + description: Event module + value: ti_cybersixgill +- name: event.dataset + type: constant_keyword + description: Event dataset + value: ti_cybersixgill.threat +- name: threat.feed.name + type: constant_keyword + description: Display friendly feed name + value: Cybersixgill Darkfeed +- name: threat.feed.dashboard_id + type: constant_keyword + description: Dashboard ID used for Kibana CTI UI + value: ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738 +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/ecs.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/ecs.yml new file mode 100644 index 00000000000..e3fd02e3895 --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/ecs.yml @@ -0,0 +1,67 @@ +- external: ecs + name: ecs.version +- external: ecs + name: message +- external: ecs + name: error.message +- external: ecs + name: event.category +- external: ecs + name: event.ingested +- external: ecs + name: event.kind +- external: ecs + name: event.original +- external: ecs + name: event.severity +- external: ecs + name: event.created +- external: ecs + name: tags +- external: ecs + name: threat.indicator.file.hash.md5 +- external: ecs + name: threat.indicator.file.hash.sha1 +- external: ecs + name: threat.indicator.file.hash.sha256 +- external: ecs + name: threat.indicator.url.full +- external: ecs + name: threat.indicator.url.domain +- external: ecs + name: threat.indicator.url.extension +- external: ecs + name: threat.indicator.url.original +- external: ecs + name: threat.indicator.url.path +- external: ecs + name: threat.indicator.url.scheme +- external: ecs + name: threat.indicator.url.fragment +- external: ecs + name: threat.indicator.ip +- external: ecs + name: threat.indicator.type +- external: ecs + name: threat.indicator.description +- external: ecs + name: threat.indicator.provider +- external: ecs + name: threat.indicator.reference +- external: ecs + name: threat.indicator.confidence +- external: ecs + name: threat.indicator.first_seen +- external: ecs + name: threat.indicator.last_seen +- external: ecs + name: threat.tactic.name +- external: ecs + name: threat.tactic.id +- external: ecs + name: threat.tactic.reference +# Manually define this as a workaround for failing tests and validation +- name: threat.indicator.name + level: extended + type: keyword + description: The display name indicator in an UI friendly format diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/fields.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/fields.yml new file mode 100644 index 00000000000..24d37ab118d --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/fields/fields.yml @@ -0,0 +1,39 @@ +- name: cybersixgill + type: group + fields: + - name: feedname + type: keyword + description: | + Name of the Threat Intel feed. + - name: title + type: keyword + description: | + The title of the indicator. + - name: actor + type: keyword + description: | + The related actor for the indicator. + - name: valid_from + type: date + description: | + At what date the indicator is valid from. + - name: virustotal.pr + type: keyword + description: | + The Virustotal positive rate. + - name: virustotal.url + type: keyword + description: | + The related Virustotal URL. + - name: mitre.description + type: keyword + description: | + The mitre description of the indicator + - name: deleted_at + type: date + description: | + The timestamp when indicator is (or will be) expired. + - name: expiration_duration + type: keyword + description: | + The configured expiration duration. diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/manifest.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/manifest.yml new file mode 100644 index 00000000000..f5296fd0c0a --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/manifest.yml @@ -0,0 +1,18 @@ +start: true +destination_index_template: + settings: + index: + sort: + field: + - "@timestamp" + order: + - desc + mappings: + dynamic: true + dynamic_templates: + - strings_as_keyword: + match_mapping_type: string + mapping: + ignore_above: 1024 + type: keyword + date_detection: false diff --git a/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/transform.yml b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/transform.yml new file mode 100644 index 00000000000..e288e30e501 --- /dev/null +++ b/packages/ti_cybersixgill/elasticsearch/transform/latest_ioc/transform.yml @@ -0,0 +1,37 @@ +# Use of "*" to use all namespaces defined. +source: + index: + - "logs-ti_cybersixgill.threat-*" +# The version suffix on the dest.index should be incremented if a breaking change +# is made to the index mapping. You must also bump the fleet_transform_version +# for any change to this transform configuration to take effect. The old destination +# index is not automatically deleted. We are dependent on https://github.com/elastic/package-spec/issues/523 to give +# us that ability in order to prevent having duplicate IoC data and prevent query +# time field type conflicts. +dest: + index: "logs-ti_cybersixgill_latest.dest_threat-1" + aliases: + - alias: "logs-ti_cybersixgill_latest.threat" + move_on_creation: true +latest: + unique_key: + - event.dataset + - event.id + sort: '@timestamp' +description: Latest Indicator data retrieved from cybersixgill Darkfeed TAXII server. +frequency: 30s +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: cybersixgill.deleted_at + # Delete immediately after reaching the `deleted_at` timestamp. + max_age: 1m +_meta: + managed: true + # Bump this version to delete, reinstall, and restart the transform during package. + # Version bump is needed if there is any code change in transform. + fleet_transform_version: 0.1.0 diff --git a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json index d92a13f17f6..9fd25519bf1 100644 --- a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json +++ b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738.json @@ -66,6 +66,25 @@ "data_stream.dataset": "ti_cybersixgill.threat" } } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_ioc_transform_source", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[3].meta.index", + "key": "labels.is_ioc_transform_source", + "negate": true, + "type": "exists" + }, + "query": { + "exists": { + "field": "labels.is_ioc_transform_source" + } + } } ], "query": { @@ -100,7 +119,7 @@ "description": "", "params": { "fontSize": 12, - "markdown": "**Navigation**\n\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \n**[Cybersixgill Files (This Page)](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738)** \n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\n\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information.", + "markdown": "**Navigation**\n\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \n**[Cybersixgill Files (This Page)](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738)** \n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: file**.\n\nThe dashboard is made to provide general statistics and show the health of your indicators like hash type counters, popular domains, statistics about how many unique indicators are ingested and other relevant information. The dashboard is made to provide general statistics and show the health of the ingestion of indicators from Cybersixgill. The dashboard only shows the active indicators that are not expired. The indicators are expired after the duration set by `IOC Expiration Duration` in the integration settings since the time they are created(`@timestamp`).", "openLinksInNewTab": false }, "title": "Files Navigation Textbox [Logs AbuseCH]", @@ -116,8 +135,7 @@ "y": 0 }, "panelIndex": "09ba3dc0-e2e2-4799-b47f-bb919bf290a1", - "type": "visualization", - "version": "8.7.1" + "type": "visualization" }, { "embeddableConfig": { @@ -188,8 +206,7 @@ }, "panelIndex": "31ea16d1-7591-42a7-b773-6fca00e5db14", "title": "Unique File Types [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -263,8 +280,7 @@ }, "panelIndex": "4d3e11dc-c4cc-4373-bb83-3d39fe6ffa98", "title": "Unique MD5 [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -365,8 +381,7 @@ }, "panelIndex": "c66ad183-f4f0-4605-b35d-85b7038403fd", "title": "Mitre Tactics ID [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -467,8 +482,7 @@ }, "panelIndex": "fcc44298-dfb6-4bd4-a63d-e845ce3eb859", "title": "Mitre Tactics Name [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -542,8 +556,7 @@ }, "panelIndex": "e9b6f0ad-5e6b-44da-923e-dc0d5ccfdfea", "title": "Unique SHA1 [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -617,8 +630,7 @@ }, "panelIndex": "93e32abe-87e3-469e-b7e9-a7ef7dfa2cce", "title": "Unique SHA256 [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -717,8 +729,7 @@ }, "panelIndex": "0638c316-a573-412f-b3c4-f72dde07c6e8", "title": "Top Feeds [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -855,8 +866,7 @@ }, "panelIndex": "6866585e-4589-4a7e-9763-3b2493f488e7", "title": "File Tags [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -957,20 +967,17 @@ }, "panelIndex": "256a7b33-485f-4715-90f3-768bea61d23e", "title": "Confidence Levels [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" } ], "timeRestore": false, "title": "[Logs Cybersixgill] Files", "version": 1 }, - "coreMigrationVersion": "8.7.1", - "created_at": "2023-07-12T04:51:38.930Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-15T20:00:54.955Z", "id": "ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -987,6 +994,11 @@ "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[3].meta.index", + "type": "index-pattern" + }, { "id": "logs-*", "name": "31ea16d1-7591-42a7-b773-6fca00e5db14:indexpattern-datasource-current-indexpattern", @@ -1076,7 +1088,13 @@ "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "name": "tag-ref-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "type": "tag" + }, + { + "id": "ti_cybersixgill-security-solution-default", + "name": "tag-ref-security-solution-default", + "type": "tag" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json index 5ce1c3db7ca..f35fba3ea69 100644 --- a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json +++ b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738.json @@ -66,6 +66,25 @@ "threat.indicator.type": "url" } } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_ioc_transform_source", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[3].meta.index", + "key": "labels.is_ioc_transform_source", + "negate": true, + "type": "exists" + }, + "query": { + "exists": { + "field": "labels.is_ioc_transform_source" + } + } } ], "query": { @@ -101,7 +120,7 @@ "id": "", "params": { "fontSize": 12, - "markdown": "**Navigation**\n\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \n**[Cybersixgill URLs (This Page)](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738)** \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \n\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information.", + "markdown": "**Navigation**\n\n[Cybersixgill Overview](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738) \n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \n**[Cybersixgill URLs (This Page)](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738)** \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is an overview of the different threat intelligence indicators with a **threat.indicator.type: url**. \n\nThe dashboard is made to provide general statistics and show the health of your indicators like popular domains, file extensions, statistics about how many unique indicators are ingested and other relevant information. The dashboard is made to provide general statistics and show the health of the ingestion of indicators from Cybersixgill. The dashboard only shows the active indicators that are not expired. The indicators are expired after the duration set by `IOC Expiration Duration` in the integration settings since the time they are created(`@timestamp`).", "openLinksInNewTab": false }, "title": "", @@ -118,8 +137,7 @@ }, "panelIndex": "4c3ed6e1-8b4e-4eab-8d84-70ed4f506216", "title": "Files Navigation Textbox [Logs AbuseCH]", - "type": "visualization", - "version": "8.7.1" + "type": "visualization" }, { "embeddableConfig": { @@ -190,8 +208,7 @@ }, "panelIndex": "73a752f9-bde5-4396-8ede-e9e77a37182d", "title": "Unique File Extensions [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -262,8 +279,7 @@ }, "panelIndex": "02f1732b-a981-4fba-8b27-b944f2f3c98c", "title": "Unique Domains [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -362,8 +378,7 @@ }, "panelIndex": "8994501a-1550-4cf2-857f-d6b6491ffb62", "title": "Most Popular Domains [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -464,8 +479,7 @@ }, "panelIndex": "ab7ab31c-e76f-4613-b17d-fdd909f17e0d", "title": "Percentage of URL Schema used [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -567,8 +581,7 @@ }, "panelIndex": "fda93ed1-72f0-4489-80b7-9e69d14f30aa", "title": "Most Popular File Extensions [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -669,8 +682,7 @@ }, "panelIndex": "08fe9c8a-d5d8-4c8f-ab42-b0cfb0390008", "title": "Mitre Tactics ID [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -771,20 +783,17 @@ }, "panelIndex": "a828d701-6a36-4401-8b35-419b4454c6fc", "title": "Mitre Tactics Name [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" } ], "timeRestore": false, "title": "[Logs Cybersixgill] URLs", "version": 1 }, - "coreMigrationVersion": "8.7.1", - "created_at": "2023-07-12T04:46:26.520Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-15T20:01:08.837Z", "id": "ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -801,6 +810,11 @@ "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[3].meta.index", + "type": "index-pattern" + }, { "id": "logs-*", "name": "73a752f9-bde5-4396-8ede-e9e77a37182d:indexpattern-datasource-current-indexpattern", @@ -875,7 +889,13 @@ "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "name": "tag-ref-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "type": "tag" + }, + { + "id": "ti_cybersixgill-security-solution-default", + "name": "tag-ref-security-solution-default", + "type": "tag" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json index 134f861b7eb..33001112266 100644 --- a/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json +++ b/packages/ti_cybersixgill/kibana/dashboard/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738.json @@ -45,6 +45,25 @@ "data_stream.dataset": "ti_cybersixgill.threat" } } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_ioc_transform_source", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "key": "labels.is_ioc_transform_source", + "negate": true, + "type": "exists" + }, + "query": { + "exists": { + "field": "labels.is_ioc_transform_source" + } + } } ], "query": { @@ -79,7 +98,7 @@ "description": "", "params": { "fontSize": 12, - "markdown": "**Navigation**\n\n**[Cybersixgill Overview (This Page)](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738)** \n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is a health overview related to the Cybersixgill Darkfeed integration.\n\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from Cybersixgill. ", + "markdown": "**Navigation**\n\n**[Cybersixgill Overview (This Page)](/app/dashboards#/view/ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738)** \n[Cybersixgill Files](/app/dashboards#/view/ti_cybersixgill-63c9fee0-5bea-11ec-9302-152fd766c738) \n[Cybersixgill URLs](/app/dashboards#/view/ti_cybersixgill-717013b0-5bed-11ec-9302-152fd766c738) \n\n[Integrations Page](/app/integrations/detail/ti_cybersixgill/overview)\n\n\n**Overview**\n\nThis dashboard is a health overview related to the Cybersixgill Darkfeed integration.\n\nThe dashboard is made to provide general statistics and show the health of the ingestion of indicators from Cybersixgill. The dashboard only shows the active indicators that are not expired. The indicators are expired after the duration set by `IOC Expiration Duration` in the integration settings since the time they are created(`@timestamp`).", "openLinksInNewTab": false }, "title": "Overview Textbox [Logs AbuseCH]", @@ -95,8 +114,7 @@ "y": 0 }, "panelIndex": "555e9e6c-04e9-4022-b6df-bda07dde30c4", - "type": "visualization", - "version": "8.7.1" + "type": "visualization" }, { "embeddableConfig": { @@ -242,8 +260,7 @@ }, "panelIndex": "e971fedd-6afd-4d03-93ac-d0c751acc254", "title": "Feed and Indicator Selector [Logs Cybersixgill]", - "type": "visualization", - "version": "8.7.1" + "type": "visualization" }, { "embeddableConfig": { @@ -318,8 +335,7 @@ }, "panelIndex": "d37eb797-f273-43c2-9004-b947891cce55", "title": "Total Indicators [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -439,8 +455,7 @@ }, "panelIndex": "86d83606-4176-44b1-b3f3-011d5b5b4b58", "title": "Total Indicators per Provider [Logs AbuseCH]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -541,8 +556,7 @@ }, "panelIndex": "f3141aca-8e35-48a7-9ac8-cc43fa1a47c0", "title": "Mitre Tactics [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -616,8 +630,7 @@ }, "panelIndex": "6509dcc9-bb9c-4c1f-80e9-612f67ada340", "title": "Total Datastreams [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" }, { "embeddableConfig": { @@ -757,20 +770,17 @@ }, "panelIndex": "aab4fac0-d39c-4521-aa9b-0a49d5938e9e", "title": "Indicators ingested per Datastream [Logs Cybersixgill]", - "type": "lens", - "version": "8.7.1" + "type": "lens" } ], "timeRestore": false, "title": "[Logs Cybersixgill] Overview", "version": 1 }, - "coreMigrationVersion": "8.7.1", - "created_at": "2023-07-12T04:46:34.989Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-15T20:00:21.661Z", "id": "ti_cybersixgill-c75353f0-5be8-11ec-9302-152fd766c738", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -782,6 +792,11 @@ "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index", + "type": "index-pattern" + }, { "id": "logs-*", "name": "e971fedd-6afd-4d03-93ac-d0c751acc254:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", @@ -861,7 +876,13 @@ "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "name": "tag-ref-ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", "type": "tag" + }, + { + "id": "ti_cybersixgill-security-solution-default", + "name": "tag-ref-security-solution-default", + "type": "tag" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json b/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json index 54f4421a486..03b8557e40e 100644 --- a/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json +++ b/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738.json @@ -4,12 +4,11 @@ "description": "", "name": "Cybersixgill" }, - "coreMigrationVersion": "8.7.1", - "created_at": "2023-07-12T04:45:21.934Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-15T19:20:05.636Z", "id": "ti_cybersixgill-7186bf10-5be4-11ec-9302-152fd766c738", - "migrationVersion": { - "tag": "8.0.0" - }, + "managed": true, "references": [], - "type": "tag" + "type": "tag", + "typeMigrationVersion": "8.0.0" } \ No newline at end of file diff --git a/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-security-solution-default.json b/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-security-solution-default.json new file mode 100644 index 00000000000..2ea984f8795 --- /dev/null +++ b/packages/ti_cybersixgill/kibana/tag/ti_cybersixgill-security-solution-default.json @@ -0,0 +1,14 @@ +{ + "attributes": { + "color": "#FEC514", + "description": "Tag defined in package-spec", + "name": "Security Solution" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-15T19:20:05.690Z", + "id": "ti_cybersixgill-security-solution-default", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0" +} \ No newline at end of file diff --git a/packages/ti_cybersixgill/manifest.yml b/packages/ti_cybersixgill/manifest.yml index 18ed38f5552..89fd7352106 100644 --- a/packages/ti_cybersixgill/manifest.yml +++ b/packages/ti_cybersixgill/manifest.yml @@ -1,6 +1,6 @@ name: ti_cybersixgill title: Cybersixgill -version: "1.26.0" +version: "1.27.0" description: Ingest threat intelligence indicators from Cybersixgill with Elastic Agent. type: integration format_version: "3.0.2" From 35039ee607618bab2f5ca86f6a52dca0ccf33b81 Mon Sep 17 00:00:00 2001 From: Marc Guasch Date: Mon, 18 Mar 2024 16:45:24 +0100 Subject: [PATCH 11/33] [windows] Map host.os.type explicitly for all data streams. (#9369) --- packages/windows/changelog.yml | 5 +++++ .../data_stream/applocker_exe_and_dll/fields/agent.yml | 2 ++ .../applocker_msi_and_script/fields/agent.yml | 2 ++ .../applocker_packaged_app_deployment/fields/agent.yml | 2 ++ .../applocker_packaged_app_execution/fields/agent.yml | 2 ++ packages/windows/data_stream/forwarded/fields/agent.yml | 2 ++ packages/windows/data_stream/perfmon/fields/agent.yml | 2 ++ packages/windows/data_stream/powershell/fields/agent.yml | 2 ++ .../data_stream/powershell_operational/fields/agent.yml | 2 ++ packages/windows/data_stream/service/fields/agent.yml | 2 ++ .../data_stream/sysmon_operational/fields/agent.yml | 2 ++ packages/windows/docs/README.md | 9 +++++++++ packages/windows/manifest.yml | 2 +- 13 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/windows/changelog.yml b/packages/windows/changelog.yml index 27dab8e4dd0..0dd99cf40fd 100644 --- a/packages/windows/changelog.yml +++ b/packages/windows/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.44.4" + changes: + - description: Map host.os.type explicitly for all data streams. + type: bugfix + link: https://github.com/elastic/integrations/pull/9367 - version: "1.44.3" changes: - description: Add filters for visualizations to ensure only AppLocker events are displayed diff --git a/packages/windows/data_stream/applocker_exe_and_dll/fields/agent.yml b/packages/windows/data_stream/applocker_exe_and_dll/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/applocker_exe_and_dll/fields/agent.yml +++ b/packages/windows/data_stream/applocker_exe_and_dll/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/applocker_msi_and_script/fields/agent.yml b/packages/windows/data_stream/applocker_msi_and_script/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/applocker_msi_and_script/fields/agent.yml +++ b/packages/windows/data_stream/applocker_msi_and_script/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/applocker_packaged_app_deployment/fields/agent.yml b/packages/windows/data_stream/applocker_packaged_app_deployment/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/applocker_packaged_app_deployment/fields/agent.yml +++ b/packages/windows/data_stream/applocker_packaged_app_deployment/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/applocker_packaged_app_execution/fields/agent.yml b/packages/windows/data_stream/applocker_packaged_app_execution/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/applocker_packaged_app_execution/fields/agent.yml +++ b/packages/windows/data_stream/applocker_packaged_app_execution/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/forwarded/fields/agent.yml b/packages/windows/data_stream/forwarded/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/forwarded/fields/agent.yml +++ b/packages/windows/data_stream/forwarded/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/perfmon/fields/agent.yml b/packages/windows/data_stream/perfmon/fields/agent.yml index 294674f3128..918048a45b8 100644 --- a/packages/windows/data_stream/perfmon/fields/agent.yml +++ b/packages/windows/data_stream/perfmon/fields/agent.yml @@ -56,6 +56,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/powershell/fields/agent.yml b/packages/windows/data_stream/powershell/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/powershell/fields/agent.yml +++ b/packages/windows/data_stream/powershell/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/powershell_operational/fields/agent.yml b/packages/windows/data_stream/powershell_operational/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/powershell_operational/fields/agent.yml +++ b/packages/windows/data_stream/powershell_operational/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/service/fields/agent.yml b/packages/windows/data_stream/service/fields/agent.yml index 0aca68da6ed..559419f0483 100644 --- a/packages/windows/data_stream/service/fields/agent.yml +++ b/packages/windows/data_stream/service/fields/agent.yml @@ -63,6 +63,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/data_stream/sysmon_operational/fields/agent.yml b/packages/windows/data_stream/sysmon_operational/fields/agent.yml index 665ec1e6c19..431119029b3 100644 --- a/packages/windows/data_stream/sysmon_operational/fields/agent.yml +++ b/packages/windows/data_stream/sysmon_operational/fields/agent.yml @@ -54,6 +54,8 @@ external: ecs - name: os.platform external: ecs + - name: os.type + external: ecs - name: os.version external: ecs - name: type diff --git a/packages/windows/docs/README.md b/packages/windows/docs/README.md index 649b37d62fc..426ea19070d 100644 --- a/packages/windows/docs/README.md +++ b/packages/windows/docs/README.md @@ -274,6 +274,7 @@ An example event for `applocker_exe_and_dll` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -653,6 +654,7 @@ An example event for `applocker_msi_and_script` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -1025,6 +1027,7 @@ An example event for `applocker_packaged_app_deployment` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -1398,6 +1401,7 @@ An example event for `applocker_packaged_app_execution` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -1746,6 +1750,7 @@ An example event for `powershell` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -2082,6 +2087,7 @@ An example event for `powershell_operational` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -2505,6 +2511,7 @@ An example event for `sysmon_operational` looks as following: | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | input.type | Type of Filebeat input. | keyword | @@ -2778,6 +2785,7 @@ The Windows `service` data stream provides service details. | host.os.name | Operating system name, without the version. | keyword | | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | | host.os.version | Operating system version as a raw string. | keyword | | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | | windows.service.display_name | The display name of the service. | keyword | | @@ -2834,6 +2842,7 @@ The Windows `perfmon` data stream provides performance counter values. | host.os.name | Operating system name, without the version. | keyword | | host.os.name.text | Multi-field of `host.os.name`. | match_only_text | | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.type | Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | windows.perfmon.instance | Instance value. | keyword | diff --git a/packages/windows/manifest.yml b/packages/windows/manifest.yml index d16241694a3..ec6c35f5cf8 100644 --- a/packages/windows/manifest.yml +++ b/packages/windows/manifest.yml @@ -1,6 +1,6 @@ name: windows title: Windows -version: 1.44.3 +version: 1.44.4 description: Collect logs and metrics from Windows OS and services with Elastic Agent. type: integration categories: From 43dc271cc6fe910f341ca9ee252b704919c0e179 Mon Sep 17 00:00:00 2001 From: ShourieG <105607378+ShourieG@users.noreply.github.com> Date: Mon, 18 Mar 2024 21:56:51 +0530 Subject: [PATCH 12/33] [Carbon Black Cloud] - Fix @timestamp value by changing source to device_timestamp (#9380) * added fix for using device timestamp as @timestamp * added new test and regenerated tests to incorporate @timestamp * updated changelog --- packages/carbon_black_cloud/changelog.yml | 5 + .../test/pipeline/test-endpoint-event.log | 1 + .../test-endpoint-event.log-expected.json | 127 ++++++++++++++++++ .../elasticsearch/ingest_pipeline/default.yml | 36 ++++- .../endpoint_event/fields/fields.yml | 3 + packages/carbon_black_cloud/docs/README.md | 1 + packages/carbon_black_cloud/manifest.yml | 2 +- 7 files changed, 169 insertions(+), 6 deletions(-) diff --git a/packages/carbon_black_cloud/changelog.yml b/packages/carbon_black_cloud/changelog.yml index de8b216a440..b8cf80fc571 100644 --- a/packages/carbon_black_cloud/changelog.yml +++ b/packages/carbon_black_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.2" + changes: + - description: Fixed handling of @timestamp in endpoint event data stream. + type: bugfix + link: https://github.com/elastic/integrations/pull/9380 - version: "1.21.1" changes: - description: Fix handling of network direction. diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log index eec0e1a52bd..e7c87863b8e 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log @@ -14,3 +14,4 @@ {"type":"endpoint.event.netconn","process_guid":"XXXXXXXX-00442a47-00002328-00000000-1d81e73a30955e7","parent_guid":"XXXXXXXX-00442a47-000002d0-00000000-1d807560b2edfc4","backend_timestamp":"2022-02-10 11:49:36 +0000 UTC","org_key":"XXXXXXXX","device_id":"14","device_name":"DESKTOP-014","device_external_ip":"67.43.156.12","device_os":"WINDOWS","device_group":"","action":"ACTION_CONNECTION_LISTEN","schema":1,"device_timestamp":"2022-02-10 11:45:02.8882089 +0000 UTC","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":9000,"parent_pid":720,"process_publisher":[{"name":"Stellar Cyber Inc","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED"}],"process_path":"c:\\program files\\aella\\aella_conf_win_srv\\aella_conf_win_srv.exe","parent_path":"c:\\windows\\system32\\services.exe","process_hash":["6174da1a2dd7594456bbb3ae50ac5587","2ad7d1a17ee2dd897a5a45515e5ae46f8b6b61d3f67c90c1fa0c7910f06d0515"],"parent_hash":["d8e577bf078c45954f4531885478d5a9","dfbea9e8c316d9bc118b454b0c722cd674c30d0a256340200e2c3a7480cba674"],"process_cmdline":"\"C:\\Program Files\\Aella\\aella_conf_win_srv\\aella_conf_win_srv.exe\"","parent_cmdline":"C:\\WINDOWS\\system32\\services.exe","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","remote_port":9001,"remote_ip":"67.43.156.14","local_port":9716,"local_ip":"127.0.0.1","netconn_domain":"","netconn_inbound":false,"netconn_protocol":"PROTO_TCP"} {"type":"endpoint.event.netconn","process_guid":"XXXXXXXX-00442a47-00002328-00000000-1d81e73a30955e7","parent_guid":"XXXXXXXX-00442a47-000002d0-00000000-1d807560b2edfc4","backend_timestamp":"2022-02-10 11:49:36 +0000 UTC","org_key":"XXXXXXXX","device_id":"14","device_name":"DESKTOP-014","device_external_ip":"67.43.156.12","device_os":"WINDOWS","device_group":"","action":"ACTION_CONNECTION_LISTEN","schema":1,"device_timestamp":"2022-02-10 11:45:02.8882089 +0000 UTC","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":9000,"parent_pid":720,"process_publisher":[{"name":"Stellar Cyber Inc","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED"}],"process_path":"c:\\program files\\aella\\aella_conf_win_srv\\aella_conf_win_srv.exe","parent_path":"c:\\windows\\system32\\services.exe","process_hash":["6174da1a2dd7594456bbb3ae50ac5587","2ad7d1a17ee2dd897a5a45515e5ae46f8b6b61d3f67c90c1fa0c7910f06d0515"],"parent_hash":["d8e577bf078c45954f4531885478d5a9","dfbea9e8c316d9bc118b454b0c722cd674c30d0a256340200e2c3a7480cba674"],"process_cmdline":"\"C:\\Program Files\\Aella\\aella_conf_win_srv\\aella_conf_win_srv.exe\"","parent_cmdline":"C:\\WINDOWS\\system32\\services.exe","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","remote_port":9001,"remote_ip":"67.43.156.14","local_port":9716,"local_ip":"127.0.0.1","netconn_domain":"","netconn_inbound":true,"netconn_protocol":"PROTO_TCP"} {"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff32","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"15","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.2725926 +0000 UTC","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} +{"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"16","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.2725926 +0000 UTC","create_time": "2022-02-10T08:03:29.540Z","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json index 8cb599060e8..1fd0df06999 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json @@ -1,6 +1,7 @@ { "expected": [ { + "@timestamp": "2022-02-10T11:50:51.686Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -103,6 +104,7 @@ } }, { + "@timestamp": "2022-02-10T11:50:36.152Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -201,6 +203,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:55.630Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -323,6 +326,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:40.240Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -444,6 +448,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:40.177Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -565,6 +570,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:37.880Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -686,6 +692,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:39.521Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -807,6 +814,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:36.552Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -928,6 +936,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:38.068Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1027,6 +1036,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:35.068Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1126,6 +1136,7 @@ ] }, { + "@timestamp": "2022-02-10T11:51:35.443Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1224,6 +1235,7 @@ ] }, { + "@timestamp": "2022-02-10T11:49:37.539Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1322,6 +1334,7 @@ ] }, { + "@timestamp": "2022-02-10T11:48:14.278Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1434,6 +1447,7 @@ ] }, { + "@timestamp": "2022-02-10T11:45:02.888Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1546,6 +1560,7 @@ ] }, { + "@timestamp": "2022-02-10T11:45:02.888Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1659,6 +1674,7 @@ ] }, { + "@timestamp": "2022-02-10T11:48:05.272Z", "carbon_black_cloud": { "endpoint_event": { "backend": { @@ -1766,6 +1782,117 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2022-02-10T11:48:05.272Z", + "carbon_black_cloud": { + "endpoint_event": { + "backend": { + "timestamp": "2022-02-10 11:48:51 +0000 UTC" + }, + "create_time": "2022-02-10T08:03:29.540Z", + "device": { + "external_ip": "89.160.20.156", + "os": "WINDOWS", + "timestamp": "2022-02-10 11:48:05.2725926 +0000 UTC" + }, + "event_origin": "EDR", + "organization_key": "XXXXXXXX", + "process": { + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": false, + "username": "NT AUTHORITY\\SYSTEM" + }, + "schema": 1, + "scriptload": { + "count": 1, + "effective_reputation": "REP_NOT_LISTED", + "publisher": [ + { + "state": [ + "FILE_SIGNATURE_STATE_NOT_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING" + }, + "sensor_action": "ACTION_ALLOW", + "type": "endpoint.event.scriptload" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "ACTION_LOAD_SCRIPT", + "original": "{\"type\":\"endpoint.event.scriptload\",\"process_guid\":\"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33\",\"parent_guid\":\"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49\",\"backend_timestamp\":\"2022-02-10 11:48:51 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"16\",\"device_name\":\"DESKTOP-015\",\"device_external_ip\":\"89.160.20.156\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_LOAD_SCRIPT\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:48:05.2725926 +0000 UTC\",\"create_time\": \"2022-02-10T08:03:29.540Z\",\"process_terminated\":false,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4600,\"parent_pid\":6728,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\cscript.exe\",\"parent_path\":\"c:\\\\program files\\\\microsoft monitoring agent\\\\agent\\\\monitoringhost.exe\",\"process_hash\":[\"24590bf74bbbbfd7d7ac070f4e3c44fd\",\"ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03\"],\"parent_hash\":[\"2d287989c6f60fa434a345b79b919755\",\"f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89\"],\"process_cmdline\":\"\\\"C:\\\\WINDOWS\\\\system32\\\\cscript.exe\\\" /nologo \\\"MonitorKnowledgeDiscovery.vbs\\\"\",\"parent_cmdline\":\"\\\"C:\\\\Program Files\\\\Microsoft Monitoring Agent\\\\Agent\\\\MonitoringHost.exe\\\" -Embedding\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"scriptload_count\":1,\"scriptload_reputation\":\"REP_RESOLVING\",\"scriptload_effective_reputation\":\"REP_NOT_LISTED\",\"scriptload_publisher\":[{\"state\":\"FILE_SIGNATURE_STATE_NOT_SIGNED\"}]}" + }, + "host": { + "hostname": "DESKTOP-015", + "id": "16", + "ip": [ + "89.160.20.156" + ], + "name": "DESKTOP-015", + "os": { + "type": "windows" + } + }, + "process": { + "command_line": "\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"", + "entity_id": "XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33", + "executable": "c:\\windows\\system32\\cscript.exe", + "hash": { + "md5": "24590bf74bbbbfd7d7ac070f4e3c44fd", + "sha256": "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03" + }, + "parent": { + "command_line": "\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding", + "entity_id": "XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49", + "executable": "c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe", + "hash": { + "md5": "2d287989c6f60fa434a345b79b919755", + "sha256": "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + }, + "pid": 6728 + }, + "pid": 4600 + }, + "related": { + "hash": [ + "24590bf74bbbbfd7d7ac070f4e3c44fd", + "2d287989c6f60fa434a345b79b919755", + "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03", + "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + ], + "hosts": [ + "DESKTOP-015" + ], + "ip": [ + "89.160.20.156" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "tags": [ + "preserve_original_event" + ] } ] } \ No newline at end of file diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml index 614856d5f96..cacd28068bf 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml @@ -13,14 +13,28 @@ processors: field: event.original target_field: json ignore_failure: true + - set: + field: _temp_.device_timestamp + copy_from: json.device_timestamp + on_failure: + - remove: + field: json.device_timestamp + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' - date: - field: json.create_time - if: ctx.json?.create_time != null && ctx.json.create_time != '' + field: json.device_timestamp + if: ctx.json?.device_timestamp != null && ctx.json.device_timestamp != '' formats: - ISO8601 + - 'yyyy-MM-dd HH:mm:ss.SSS Z z' + - 'yyyy-MM-dd HH:mm:ss.SSSS Z z' + - 'yyyy-MM-dd HH:mm:ss.SSSSS Z z' + - 'yyyy-MM-dd HH:mm:ss.SSSSSS Z z' + - 'yyyy-MM-dd HH:mm:ss.SSSSSSS Z z' on_failure: - remove: - field: json.create_time + field: json.device_timestamp - append: field: error.message value: '{{{_ingest.on_failure_message}}}' @@ -317,9 +331,19 @@ processors: field: json.backend_timestamp target_field: carbon_black_cloud.endpoint_event.backend.timestamp ignore_missing: true + - set: + field: carbon_black_cloud.endpoint_event.device.timestamp + copy_from: _temp_.device_timestamp + ignore_empty_value: true + on_failure: + - remove: + field: carbon_black_cloud.endpoint_event.device.timestamp + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' - rename: - field: json.device_timestamp - target_field: carbon_black_cloud.endpoint_event.device.timestamp + field: json.create_time + target_field: carbon_black_cloud.endpoint_event.create_time ignore_missing: true - rename: field: json.device_os @@ -798,6 +822,8 @@ processors: - json.device_external_ip - json.device_internal_ip - json.netconn_proxy_ip + - json.device_timestamp + - _temp_ ignore_missing: true - script: description: Adds all the remaining fields in fields under carbon_black_cloud.endpoint_event. diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/fields/fields.yml b/packages/carbon_black_cloud/data_stream/endpoint_event/fields/fields.yml index af12326154f..e792de11aa9 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/fields/fields.yml +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/fields/fields.yml @@ -237,3 +237,6 @@ - name: type type: keyword description: The event type. + - name: create_time + type: keyword + description: The time at which the event was ingested in carbon black cloud. diff --git a/packages/carbon_black_cloud/docs/README.md b/packages/carbon_black_cloud/docs/README.md index 0da8d4ee34f..8da6f4da8a2 100644 --- a/packages/carbon_black_cloud/docs/README.md +++ b/packages/carbon_black_cloud/docs/README.md @@ -542,6 +542,7 @@ An example event for `endpoint_event` looks as following: | carbon_black_cloud.endpoint_event.childproc.publisher.state | The state of the publisher. | keyword | | carbon_black_cloud.endpoint_event.childproc.reputation | Carbon Black Cloud Reputation string for the childproc. | keyword | | carbon_black_cloud.endpoint_event.childproc.username | The username associated with the user context that the child process was started under. | keyword | +| carbon_black_cloud.endpoint_event.create_time | The time at which the event was ingested in carbon black cloud. | keyword | | carbon_black_cloud.endpoint_event.crossproc.action | The action taken on cross-process. | keyword | | carbon_black_cloud.endpoint_event.crossproc.api | Name of the operating system API called by the actor process. | keyword | | carbon_black_cloud.endpoint_event.crossproc.guid | Unique ID of the cross process. | keyword | diff --git a/packages/carbon_black_cloud/manifest.yml b/packages/carbon_black_cloud/manifest.yml index b633affc53d..0c515a06f99 100644 --- a/packages/carbon_black_cloud/manifest.yml +++ b/packages/carbon_black_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: carbon_black_cloud title: VMware Carbon Black Cloud -version: "1.21.1" +version: "1.21.2" description: Collect logs from VMWare Carbon Black Cloud with Elastic Agent. type: integration categories: From 978d77c84f8b157b193b150d26824a11033bc66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20K=C3=B6tting?= <145989254+SimonKoetting@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:17:41 +0100 Subject: [PATCH 13/33] [Microsoft Exchange Server] Fix recipientstatus Field type, add Support for custom processors & Update Doc link (#9349) * Adjust MS-Doc Link to not specify exact exchange Version * Added support to specify custom processors * Fix Recipientstatus field type * Update packages/microsoft_exchange_server/changelog.yml Co-authored-by: Marc Guasch --------- Co-authored-by: Marc Guasch --- .../microsoft_exchange_server/changelog.yml | 5 ++ .../httpproxy/agent/stream/filestream.yml.hbs | 3 + .../data_stream/httpproxy/manifest.yml | 8 +++ .../agent/stream/filestream.yml.hbs | 3 + .../data_stream/imap4_pop3/manifest.yml | 8 +++ .../test/pipeline/test-messagetracking.log | 1 + .../test-messagetracking.log-expected.json | 66 ++++++++++++++++++- .../agent/stream/filestream.yml.hbs | 3 + .../messagetracking/fields/fields.yml | 2 +- .../data_stream/messagetracking/manifest.yml | 8 +++ .../smtp/agent/stream/filestream.yml.hbs | 3 + .../data_stream/smtp/manifest.yml | 8 +++ .../microsoft_exchange_server/docs/README.md | 2 +- .../microsoft_exchange_server/manifest.yml | 2 +- 14 files changed, 116 insertions(+), 6 deletions(-) diff --git a/packages/microsoft_exchange_server/changelog.yml b/packages/microsoft_exchange_server/changelog.yml index c5b5e92d7fb..4de89e3a3af 100644 --- a/packages/microsoft_exchange_server/changelog.yml +++ b/packages/microsoft_exchange_server/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.1.2" + changes: + - description: Fix Recipientstatus field type, add custom processor support & adjust docs + type: bugfix + link: https://github.com/elastic/integrations/pull/9349 - version: "0.1.1" changes: - description: Fix missing Dashboard references diff --git a/packages/microsoft_exchange_server/data_stream/httpproxy/agent/stream/filestream.yml.hbs b/packages/microsoft_exchange_server/data_stream/httpproxy/agent/stream/filestream.yml.hbs index da3f585997c..9c5a9235ed8 100644 --- a/packages/microsoft_exchange_server/data_stream/httpproxy/agent/stream/filestream.yml.hbs +++ b/packages/microsoft_exchange_server/data_stream/httpproxy/agent/stream/filestream.yml.hbs @@ -12,3 +12,6 @@ tags: exclude_files: [".gz$"] processors: - add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} diff --git a/packages/microsoft_exchange_server/data_stream/httpproxy/manifest.yml b/packages/microsoft_exchange_server/data_stream/httpproxy/manifest.yml index 94c9fcabbab..b071ff6add2 100644 --- a/packages/microsoft_exchange_server/data_stream/httpproxy/manifest.yml +++ b/packages/microsoft_exchange_server/data_stream/httpproxy/manifest.yml @@ -19,3 +19,11 @@ streams: multi: true required: false show_user: 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/fleet/current/elastic-agent-processor-configuration.html) for details. diff --git a/packages/microsoft_exchange_server/data_stream/imap4_pop3/agent/stream/filestream.yml.hbs b/packages/microsoft_exchange_server/data_stream/imap4_pop3/agent/stream/filestream.yml.hbs index da3f585997c..9c5a9235ed8 100644 --- a/packages/microsoft_exchange_server/data_stream/imap4_pop3/agent/stream/filestream.yml.hbs +++ b/packages/microsoft_exchange_server/data_stream/imap4_pop3/agent/stream/filestream.yml.hbs @@ -12,3 +12,6 @@ tags: exclude_files: [".gz$"] processors: - add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} diff --git a/packages/microsoft_exchange_server/data_stream/imap4_pop3/manifest.yml b/packages/microsoft_exchange_server/data_stream/imap4_pop3/manifest.yml index d6fa54f923f..c0871a62ea3 100644 --- a/packages/microsoft_exchange_server/data_stream/imap4_pop3/manifest.yml +++ b/packages/microsoft_exchange_server/data_stream/imap4_pop3/manifest.yml @@ -20,3 +20,11 @@ streams: multi: true required: false show_user: 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/fleet/current/elastic-agent-processor-configuration.html) for details. diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log index c841eff3559..6a83935be5c 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log @@ -1,3 +1,4 @@ 2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005 2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005 2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005 +2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035 diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json index c8c153958cf..d4d03aa0694 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json @@ -24,7 +24,7 @@ } }, "event": { - "ingested": "2024-03-06T15:06:25.588990186Z", + "ingested": "2024-03-19T09:29:56.855062517Z", "original": "2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005" }, "message": "2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005", @@ -80,7 +80,7 @@ } }, "event": { - "ingested": "2024-03-06T15:06:25.589003926Z", + "ingested": "2024-03-19T09:29:56.855089772Z", "original": "2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005" }, "message": "2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005", @@ -141,7 +141,7 @@ } }, "event": { - "ingested": "2024-03-06T15:06:25.589006572Z", + "ingested": "2024-03-19T09:29:56.855094378Z", "original": "2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005" }, "message": "2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005", @@ -173,6 +173,66 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2024-01-07T00:00:07.463Z", + "client": { + "domain": "exchange", + "ip": "192.168.0.1" + }, + "email": { + "direction": "Originating", + "from": { + "address": [ + "support@example.com" + ] + }, + "local_id": "29519319995411", + "message_id": "20240107001234.567E6224C8@monitor.example.com", + "sender": { + "address": [ + "support@example.com" + ] + }, + "subject": "ein Titel", + "to": { + "address": [ + "uwe.musterman@example.com" + ] + } + }, + "event": { + "ingested": "2024-03-19T09:29:56.855121435Z", + "original": "2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035" + }, + "message": "2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035", + "microsoft": { + "exchange": { + "connectorid": "Intra-Organization SMTP Send Connector", + "customdata": "S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com", + "eventid": "SEND", + "logid": "a7ae9ef9-e10c-4111-19bf-08dc0f111bee", + "messageinfo": "2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071)", + "networkmessageid": "0b7099ea-cb95-1234-328e-08dc5f139ac8", + "recipientcount": 1, + "recipientstatus": "250 2.1.5Recipient OK", + "returnpath": "support@example.com", + "schemaversion": "15.01.2507.035", + "source": "SMTP", + "sourcecontext": ";250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:", + "transporttraffictype": "Email" + } + }, + "network": { + "bytes": 38663 + }, + "server": { + "domain": "exchange.example.com", + "ip": "192.168.0.2" + }, + "tags": [ + "preserve_original_event" + ] } ] } \ No newline at end of file diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/agent/stream/filestream.yml.hbs b/packages/microsoft_exchange_server/data_stream/messagetracking/agent/stream/filestream.yml.hbs index da3f585997c..9c5a9235ed8 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/agent/stream/filestream.yml.hbs +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/agent/stream/filestream.yml.hbs @@ -12,3 +12,6 @@ tags: exclude_files: [".gz$"] processors: - add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml index 64e7b183408..3375724ba18 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml @@ -9,7 +9,7 @@ - name: microsoft.exchange.networkmessageid type: keyword - name: microsoft.exchange.recipientstatus - type: long + type: keyword - name: microsoft.exchange.recipientcount type: long - name: microsoft.exchange.relatedrecipientaddress diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/manifest.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/manifest.yml index 3a6dff8d2e0..d113a8c1a90 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/manifest.yml +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/manifest.yml @@ -19,3 +19,11 @@ streams: multi: true required: false show_user: 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/fleet/current/elastic-agent-processor-configuration.html) for details. diff --git a/packages/microsoft_exchange_server/data_stream/smtp/agent/stream/filestream.yml.hbs b/packages/microsoft_exchange_server/data_stream/smtp/agent/stream/filestream.yml.hbs index da3f585997c..9c5a9235ed8 100644 --- a/packages/microsoft_exchange_server/data_stream/smtp/agent/stream/filestream.yml.hbs +++ b/packages/microsoft_exchange_server/data_stream/smtp/agent/stream/filestream.yml.hbs @@ -12,3 +12,6 @@ tags: exclude_files: [".gz$"] processors: - add_locale: ~ +{{#if processors}} +{{processors}} +{{/if}} diff --git a/packages/microsoft_exchange_server/data_stream/smtp/manifest.yml b/packages/microsoft_exchange_server/data_stream/smtp/manifest.yml index f42569ed17d..2bbee65896b 100644 --- a/packages/microsoft_exchange_server/data_stream/smtp/manifest.yml +++ b/packages/microsoft_exchange_server/data_stream/smtp/manifest.yml @@ -20,3 +20,11 @@ streams: multi: true required: false show_user: 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/fleet/current/elastic-agent-processor-configuration.html) for details. diff --git a/packages/microsoft_exchange_server/docs/README.md b/packages/microsoft_exchange_server/docs/README.md index 144151317b4..d8a32630041 100644 --- a/packages/microsoft_exchange_server/docs/README.md +++ b/packages/microsoft_exchange_server/docs/README.md @@ -21,5 +21,5 @@ For step-by-step instructions on how to set up an integration, see the ## Setup Exchange Server -To collect the SMTP Logs, the logs have to be configured on the exchange Server. To enable it, you can follow this [guide](https://learn.microsoft.com/en-us/exchange/mail-flow/connectors/configure-protocol-logging?view=exchserver-2019) +To collect the SMTP Logs, the logs have to be configured on the exchange Server. To enable it, you can follow this [guide](https://learn.microsoft.com/en-us/exchange/mail-flow/connectors/configure-protocol-logging) The other logs are enabled by default, and no further configurations are required diff --git a/packages/microsoft_exchange_server/manifest.yml b/packages/microsoft_exchange_server/manifest.yml index 7aa47440508..1b62ad6d1d6 100644 --- a/packages/microsoft_exchange_server/manifest.yml +++ b/packages/microsoft_exchange_server/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: microsoft_exchange_server title: "Microsoft Exchange Server" -version: 0.1.1 +version: 0.1.2 source: license: "Elastic-2.0" description: Collect logs from Microsoft Exchange Server with Elastic Agent. From de78f907e8b486bdbbff60939b4569f29ca9b854 Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 19 Mar 2024 08:01:11 -0400 Subject: [PATCH 14/33] Adding name field to Audit Saved Object (#9318) * adding new event w/ so name * updating read me * try without reformatting * Updating changelog * Adding test and updating version * ...if this works....... * Formatted using lint tool * Fixing test case --- packages/kibana/changelog.yml | 5 ++ .../test/pipeline/test-kibana-audit-logs.log | 1 + .../test-kibana-audit-logs.log-expected.json | 56 +++++++++++++++++++ .../audit/fields/package-fields.yml | 3 + packages/kibana/docs/README.md | 1 + packages/kibana/manifest.yml | 2 +- 6 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/kibana/changelog.yml b/packages/kibana/changelog.yml index c2b37b9f68f..57d1ac2aecc 100644 --- a/packages/kibana/changelog.yml +++ b/packages/kibana/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.5.2" + changes: + - description: Adding SO name to audit events + type: enhancement + link: https://github.com/elastic/integrations/pull/9318 - version: "2.5.1" changes: - description: Add memory utilization metric diff --git a/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log b/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log index aea673f2bb9..4c0fca2c675 100644 --- a/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log +++ b/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log @@ -1,3 +1,4 @@ {"event":{"action":"http_request","category":["web"],"outcome":"unknown"},"http":{"request":{"method":"get"}},"url":{"domain":"kibana","path":"/api/fleet/enrollment_api_keys/e0a0d409-b22f-4cd0-b417-c934c621ce07","port":5601,"scheme":"https"},"user":{"name":"elastic","roles":["superuser"]},"kibana":{"space_id":"default"},"trace":{"id":"2eeefc09-26a2-4aea-840d-9170b0a9c95f"},"service":{"node":{"roles":["background_tasks","ui"]}},"ecs":{"version":"8.4.0"},"@timestamp":"2022-09-09T13:15:24.041+00:00","message":"User is requesting [/api/fleet/enrollment_api_keys/e0a0d409-b22f-4cd0-b417-c934c621ce07] endpoint","log":{"level":"INFO","logger":"plugins.security.audit.ecs"},"process":{"pid":7},"transaction":{"id":"858c45e94edb1814"}} {"event":{"action":"user_login","category":["authentication"],"outcome":"success"},"user":{"name":"elastic","roles":["superuser"]},"kibana":{"session_id":"Bv1bSOJ7dMYoppdDmlCiPfP1v8Q7JHXDpc2mOrfoxJs=","authentication_provider":"basic","authentication_type":"basic","authentication_realm":"reserved","lookup_realm":"reserved"},"trace":{"id":"5233d304-16b6-479b-9e45-a906107a5f53"},"service":{"node":{"roles":["background_tasks","ui"]}},"ecs":{"version":"8.4.0"},"@timestamp":"2022-09-09T13:16:57.990+00:00","message":"User [elastic] has logged in using basic provider [name=basic]","log":{"level":"INFO","logger":"plugins.security.audit.ecs"},"process":{"pid":7},"transaction":{"id":"2fd40f9b4f4ca767"}} {"event":{"action":"space_get","category":["database"],"type":["access"],"outcome":"success"},"kibana":{"space_id":"default","session_id":"Bv1bSOJ7dMYoppdDmlCiPfP1v8Q7JHXDpc2mOrfoxJs=","saved_object":{"type":"space","id":"default"}},"user":{"name":"elastic","roles":["superuser"]},"trace":{"id":"fbed6b3b-4e1c-4525-9597-391d5f718e89"},"service":{"node":{"roles":["background_tasks","ui"]}},"ecs":{"version":"8.4.0"},"@timestamp":"2022-09-09T13:16:58.044+00:00","message":"User has accessed space [id=default]","log":{"level":"INFO","logger":"plugins.security.audit.ecs"},"process":{"pid":7},"transaction":{"id":"256b899bfffe8b3f"}} +{"event":{"action":"bulk_get","category":["database"],"type":["access"],"outcome":"success"},"kibana":{"space_id":"default","session_id":"Bv1bSOJ7dMYoppdDmlCiPfP1v8Q7JHXDpc2mOrfoxJs=","saved_object":{"type":"fake","id":"1","name":"so_name_1"}},"user":{"name":"elastic","roles":["superuser"]},"trace":{"id":"fbed6b3b-4e1c-4525-9597-391d5f718e89"},"service":{"node":{"roles":["background_tasks","ui"]}},"ecs":{"version":"8.4.0"},"@timestamp":"2022-09-09T13:16:58.044+00:00","message":"User has accessed space [id=default]","log":{"level":"INFO","logger":"plugins.security.audit.ecs"},"process":{"pid":7},"transaction":{"id":"256b899bfffe8b3f"}} diff --git a/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log-expected.json b/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log-expected.json index 1b339b0a9f1..276627c5bc6 100644 --- a/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log-expected.json +++ b/packages/kibana/data_stream/audit/_dev/test/pipeline/test-kibana-audit-logs.log-expected.json @@ -163,6 +163,62 @@ "superuser" ] } + }, + { + "@timestamp": "2022-09-09T13:16:58.044+00:00", + "ecs": { + "version": "8.4.0" + }, + "event": { + "action": "bulk_get", + "category": [ + "database" + ], + "created": "2022-09-09T13:16:58.044+00:00", + "ingested": "2022-09-09T13:44:23.397440547Z", + "kind": "event", + "outcome": "success", + "type": [ + "access" + ] + }, + "kibana": { + "saved_object": { + "id": "1", + "type": "fake", + "name": "so_name_1" + }, + "session_id": "Bv1bSOJ7dMYoppdDmlCiPfP1v8Q7JHXDpc2mOrfoxJs=", + "space_id": "default" + }, + "log": { + "level": "INFO", + "logger": "plugins.security.audit.ecs" + }, + "message": "User has accessed space [id=default]", + "process": { + "pid": 7 + }, + "service": { + "node": { + "roles": [ + "background_tasks", + "ui" + ] + } + }, + "trace": { + "id": "fbed6b3b-4e1c-4525-9597-391d5f718e89" + }, + "transaction": { + "id": "256b899bfffe8b3f" + }, + "user": { + "name": "elastic", + "roles": [ + "superuser" + ] + } } ] } \ No newline at end of file diff --git a/packages/kibana/data_stream/audit/fields/package-fields.yml b/packages/kibana/data_stream/audit/fields/package-fields.yml index 373bfd08e46..4b885147b1c 100644 --- a/packages/kibana/data_stream/audit/fields/package-fields.yml +++ b/packages/kibana/data_stream/audit/fields/package-fields.yml @@ -13,6 +13,9 @@ - name: saved_object.id type: keyword description: The id of the saved object associated with this event. + - name: saved_object.name + type: keyword + description: The name of the saved object associated with this event. - name: add_to_spaces type: keyword description: The set of space ids that a saved object was shared to. diff --git a/packages/kibana/docs/README.md b/packages/kibana/docs/README.md index 6e2edc397f0..1a174bea646 100644 --- a/packages/kibana/docs/README.md +++ b/packages/kibana/docs/README.md @@ -47,6 +47,7 @@ UI in Kibana. To enable this usage, set `xpack.enabled: true` on the package con | kibana.delete_from_spaces | The set of space ids that a saved object was removed from. | keyword | | kibana.lookup_realm | The Elasticsearch lookup realm which fulfilled a login event. | keyword | | kibana.saved_object.id | The id of the saved object associated with this event. | keyword | +| kibana.saved_object.name | The name of the saved object associated with this event. | keyword | | kibana.saved_object.type | The type of the saved object associated with this event. | keyword | | kibana.session_id | The ID of the user session associated with this event. Each login attempt results in a unique session id. | keyword | | kibana.space_id | The id of the space associated with this event. | keyword | diff --git a/packages/kibana/manifest.yml b/packages/kibana/manifest.yml index 3ea94ce64bf..11a16bcc765 100644 --- a/packages/kibana/manifest.yml +++ b/packages/kibana/manifest.yml @@ -1,6 +1,6 @@ name: kibana title: Kibana -version: 2.5.1 +version: 2.5.2 description: Collect logs and metrics from Kibana with Elastic Agent. type: integration icons: From 008a7b7900e946c70deb2cf532c5604e521a68e2 Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Tue, 19 Mar 2024 13:23:20 -0600 Subject: [PATCH 15/33] [aws_logs] Enable secret variable for aws_logs integration (#9019) * Enable secret variable for aws_logs integration * add changelog * change kibana version back * change kibana version to 8.12.0 --- packages/aws_logs/changelog.yml | 5 +++++ packages/aws_logs/manifest.yml | 15 +++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/aws_logs/changelog.yml b/packages/aws_logs/changelog.yml index bededdcdb6f..ade9e5881fc 100644 --- a/packages/aws_logs/changelog.yml +++ b/packages/aws_logs/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.1.0" + changes: + - description: Update the package format_version to 3.0.2 and enable 'secret' for the sensitive fields + type: enhancement + link: https://github.com/elastic/integrations/pull/9019 - version: "1.0.0" changes: - description: Release package as GA. diff --git a/packages/aws_logs/manifest.yml b/packages/aws_logs/manifest.yml index d6de166d47a..2374cd4e72e 100644 --- a/packages/aws_logs/manifest.yml +++ b/packages/aws_logs/manifest.yml @@ -1,16 +1,16 @@ -format_version: "3.0.0" +format_version: "3.0.2" name: aws_logs title: Custom AWS Logs description: Collect raw logs from AWS S3 or CloudWatch with Elastic Agent. type: integration -version: "1.0.0" +version: "1.1.0" categories: - observability - custom - aws conditions: kibana: - version: ^8.0.0 + version: ^8.12.0 elastic: subscription: basic policy_templates: @@ -42,20 +42,23 @@ vars: required: false show_user: false - name: access_key_id - type: text + type: password title: Access Key ID + secret: true multi: false required: false show_user: true - name: secret_access_key - type: text + type: password title: Secret Access Key + secret: true multi: false required: false show_user: true - name: session_token - type: text + type: password title: Session Token + secret: true multi: false required: false show_user: true From d16efc6db2437879b4d4c3f95bfb1ece11e4aa0a Mon Sep 17 00:00:00 2001 From: ShourieG <105607378+ShourieG@users.noreply.github.com> Date: Wed, 20 Mar 2024 08:14:03 +0530 Subject: [PATCH 16/33] [Carbon Black Cloud] - Added support for more @timestamp formats (#9391) * added support for more timestamp formats --- packages/carbon_black_cloud/changelog.yml | 5 + .../test/pipeline/test-endpoint-event.log | 3 + .../test-endpoint-event.log-expected.json | 333 ++++++++++++++++++ .../elasticsearch/ingest_pipeline/default.yml | 3 + packages/carbon_black_cloud/manifest.yml | 2 +- 5 files changed, 345 insertions(+), 1 deletion(-) diff --git a/packages/carbon_black_cloud/changelog.yml b/packages/carbon_black_cloud/changelog.yml index b8cf80fc571..7a808030881 100644 --- a/packages/carbon_black_cloud/changelog.yml +++ b/packages/carbon_black_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.3" + changes: + - description: Added support for more device_timestamp formats. + type: bugfix + link: https://github.com/elastic/integrations/pull/9391 - version: "1.21.2" changes: - description: Fixed handling of @timestamp in endpoint event data stream. diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log index e7c87863b8e..bf0fba5f89b 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log @@ -15,3 +15,6 @@ {"type":"endpoint.event.netconn","process_guid":"XXXXXXXX-00442a47-00002328-00000000-1d81e73a30955e7","parent_guid":"XXXXXXXX-00442a47-000002d0-00000000-1d807560b2edfc4","backend_timestamp":"2022-02-10 11:49:36 +0000 UTC","org_key":"XXXXXXXX","device_id":"14","device_name":"DESKTOP-014","device_external_ip":"67.43.156.12","device_os":"WINDOWS","device_group":"","action":"ACTION_CONNECTION_LISTEN","schema":1,"device_timestamp":"2022-02-10 11:45:02.8882089 +0000 UTC","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":9000,"parent_pid":720,"process_publisher":[{"name":"Stellar Cyber Inc","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED"}],"process_path":"c:\\program files\\aella\\aella_conf_win_srv\\aella_conf_win_srv.exe","parent_path":"c:\\windows\\system32\\services.exe","process_hash":["6174da1a2dd7594456bbb3ae50ac5587","2ad7d1a17ee2dd897a5a45515e5ae46f8b6b61d3f67c90c1fa0c7910f06d0515"],"parent_hash":["d8e577bf078c45954f4531885478d5a9","dfbea9e8c316d9bc118b454b0c722cd674c30d0a256340200e2c3a7480cba674"],"process_cmdline":"\"C:\\Program Files\\Aella\\aella_conf_win_srv\\aella_conf_win_srv.exe\"","parent_cmdline":"C:\\WINDOWS\\system32\\services.exe","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","remote_port":9001,"remote_ip":"67.43.156.14","local_port":9716,"local_ip":"127.0.0.1","netconn_domain":"","netconn_inbound":true,"netconn_protocol":"PROTO_TCP"} {"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff32","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"15","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.2725926 +0000 UTC","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} {"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"16","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.2725926 +0000 UTC","create_time": "2022-02-10T08:03:29.540Z","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} +{"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"16","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.272 +0000 UTC","create_time": "2022-02-10T08:03:29.540Z","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} +{"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"16","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05.2 +0000 UTC","create_time": "2022-02-10T08:03:29.540Z","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} +{"type":"endpoint.event.scriptload","process_guid":"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33","parent_guid":"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49","backend_timestamp":"2022-02-10 11:48:51 +0000 UTC","org_key":"XXXXXXXX","device_id":"16","device_name":"DESKTOP-015","device_external_ip":"89.160.20.156","device_os":"WINDOWS","device_group":"","action":"ACTION_LOAD_SCRIPT","schema":1,"device_timestamp":"2022-02-10 11:48:05 +0000 UTC","create_time": "2022-02-10T08:03:29.540Z","process_terminated":false,"process_reputation":"REP_RESOLVING","parent_reputation":"REP_RESOLVING","process_pid":4600,"parent_pid":6728,"process_publisher":[{"name":"Microsoft Windows","state":"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED"}],"process_path":"c:\\windows\\system32\\cscript.exe","parent_path":"c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe","process_hash":["24590bf74bbbbfd7d7ac070f4e3c44fd","ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03"],"parent_hash":["2d287989c6f60fa434a345b79b919755","f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89"],"process_cmdline":"\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"","parent_cmdline":"\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding","process_username":"NT AUTHORITY\\SYSTEM","sensor_action":"ACTION_ALLOW","event_origin":"EDR","scriptload_count":1,"scriptload_reputation":"REP_RESOLVING","scriptload_effective_reputation":"REP_NOT_LISTED","scriptload_publisher":[{"state":"FILE_SIGNATURE_STATE_NOT_SIGNED"}]} diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json index 1fd0df06999..47e19456f48 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/_dev/test/pipeline/test-endpoint-event.log-expected.json @@ -1893,6 +1893,339 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2022-02-10T11:48:05.272Z", + "carbon_black_cloud": { + "endpoint_event": { + "backend": { + "timestamp": "2022-02-10 11:48:51 +0000 UTC" + }, + "create_time": "2022-02-10T08:03:29.540Z", + "device": { + "external_ip": "89.160.20.156", + "os": "WINDOWS", + "timestamp": "2022-02-10 11:48:05.272 +0000 UTC" + }, + "event_origin": "EDR", + "organization_key": "XXXXXXXX", + "process": { + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": false, + "username": "NT AUTHORITY\\SYSTEM" + }, + "schema": 1, + "scriptload": { + "count": 1, + "effective_reputation": "REP_NOT_LISTED", + "publisher": [ + { + "state": [ + "FILE_SIGNATURE_STATE_NOT_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING" + }, + "sensor_action": "ACTION_ALLOW", + "type": "endpoint.event.scriptload" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "ACTION_LOAD_SCRIPT", + "original": "{\"type\":\"endpoint.event.scriptload\",\"process_guid\":\"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33\",\"parent_guid\":\"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49\",\"backend_timestamp\":\"2022-02-10 11:48:51 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"16\",\"device_name\":\"DESKTOP-015\",\"device_external_ip\":\"89.160.20.156\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_LOAD_SCRIPT\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:48:05.272 +0000 UTC\",\"create_time\": \"2022-02-10T08:03:29.540Z\",\"process_terminated\":false,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4600,\"parent_pid\":6728,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\cscript.exe\",\"parent_path\":\"c:\\\\program files\\\\microsoft monitoring agent\\\\agent\\\\monitoringhost.exe\",\"process_hash\":[\"24590bf74bbbbfd7d7ac070f4e3c44fd\",\"ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03\"],\"parent_hash\":[\"2d287989c6f60fa434a345b79b919755\",\"f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89\"],\"process_cmdline\":\"\\\"C:\\\\WINDOWS\\\\system32\\\\cscript.exe\\\" /nologo \\\"MonitorKnowledgeDiscovery.vbs\\\"\",\"parent_cmdline\":\"\\\"C:\\\\Program Files\\\\Microsoft Monitoring Agent\\\\Agent\\\\MonitoringHost.exe\\\" -Embedding\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"scriptload_count\":1,\"scriptload_reputation\":\"REP_RESOLVING\",\"scriptload_effective_reputation\":\"REP_NOT_LISTED\",\"scriptload_publisher\":[{\"state\":\"FILE_SIGNATURE_STATE_NOT_SIGNED\"}]}" + }, + "host": { + "hostname": "DESKTOP-015", + "id": "16", + "ip": [ + "89.160.20.156" + ], + "name": "DESKTOP-015", + "os": { + "type": "windows" + } + }, + "process": { + "command_line": "\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"", + "entity_id": "XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33", + "executable": "c:\\windows\\system32\\cscript.exe", + "hash": { + "md5": "24590bf74bbbbfd7d7ac070f4e3c44fd", + "sha256": "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03" + }, + "parent": { + "command_line": "\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding", + "entity_id": "XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49", + "executable": "c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe", + "hash": { + "md5": "2d287989c6f60fa434a345b79b919755", + "sha256": "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + }, + "pid": 6728 + }, + "pid": 4600 + }, + "related": { + "hash": [ + "24590bf74bbbbfd7d7ac070f4e3c44fd", + "2d287989c6f60fa434a345b79b919755", + "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03", + "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + ], + "hosts": [ + "DESKTOP-015" + ], + "ip": [ + "89.160.20.156" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2022-02-10T11:48:05.200Z", + "carbon_black_cloud": { + "endpoint_event": { + "backend": { + "timestamp": "2022-02-10 11:48:51 +0000 UTC" + }, + "create_time": "2022-02-10T08:03:29.540Z", + "device": { + "external_ip": "89.160.20.156", + "os": "WINDOWS", + "timestamp": "2022-02-10 11:48:05.2 +0000 UTC" + }, + "event_origin": "EDR", + "organization_key": "XXXXXXXX", + "process": { + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": false, + "username": "NT AUTHORITY\\SYSTEM" + }, + "schema": 1, + "scriptload": { + "count": 1, + "effective_reputation": "REP_NOT_LISTED", + "publisher": [ + { + "state": [ + "FILE_SIGNATURE_STATE_NOT_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING" + }, + "sensor_action": "ACTION_ALLOW", + "type": "endpoint.event.scriptload" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "ACTION_LOAD_SCRIPT", + "original": "{\"type\":\"endpoint.event.scriptload\",\"process_guid\":\"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33\",\"parent_guid\":\"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49\",\"backend_timestamp\":\"2022-02-10 11:48:51 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"16\",\"device_name\":\"DESKTOP-015\",\"device_external_ip\":\"89.160.20.156\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_LOAD_SCRIPT\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:48:05.2 +0000 UTC\",\"create_time\": \"2022-02-10T08:03:29.540Z\",\"process_terminated\":false,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4600,\"parent_pid\":6728,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\cscript.exe\",\"parent_path\":\"c:\\\\program files\\\\microsoft monitoring agent\\\\agent\\\\monitoringhost.exe\",\"process_hash\":[\"24590bf74bbbbfd7d7ac070f4e3c44fd\",\"ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03\"],\"parent_hash\":[\"2d287989c6f60fa434a345b79b919755\",\"f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89\"],\"process_cmdline\":\"\\\"C:\\\\WINDOWS\\\\system32\\\\cscript.exe\\\" /nologo \\\"MonitorKnowledgeDiscovery.vbs\\\"\",\"parent_cmdline\":\"\\\"C:\\\\Program Files\\\\Microsoft Monitoring Agent\\\\Agent\\\\MonitoringHost.exe\\\" -Embedding\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"scriptload_count\":1,\"scriptload_reputation\":\"REP_RESOLVING\",\"scriptload_effective_reputation\":\"REP_NOT_LISTED\",\"scriptload_publisher\":[{\"state\":\"FILE_SIGNATURE_STATE_NOT_SIGNED\"}]}" + }, + "host": { + "hostname": "DESKTOP-015", + "id": "16", + "ip": [ + "89.160.20.156" + ], + "name": "DESKTOP-015", + "os": { + "type": "windows" + } + }, + "process": { + "command_line": "\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"", + "entity_id": "XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33", + "executable": "c:\\windows\\system32\\cscript.exe", + "hash": { + "md5": "24590bf74bbbbfd7d7ac070f4e3c44fd", + "sha256": "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03" + }, + "parent": { + "command_line": "\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding", + "entity_id": "XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49", + "executable": "c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe", + "hash": { + "md5": "2d287989c6f60fa434a345b79b919755", + "sha256": "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + }, + "pid": 6728 + }, + "pid": 4600 + }, + "related": { + "hash": [ + "24590bf74bbbbfd7d7ac070f4e3c44fd", + "2d287989c6f60fa434a345b79b919755", + "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03", + "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + ], + "hosts": [ + "DESKTOP-015" + ], + "ip": [ + "89.160.20.156" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2022-02-10T11:48:05.000Z", + "carbon_black_cloud": { + "endpoint_event": { + "backend": { + "timestamp": "2022-02-10 11:48:51 +0000 UTC" + }, + "create_time": "2022-02-10T08:03:29.540Z", + "device": { + "external_ip": "89.160.20.156", + "os": "WINDOWS", + "timestamp": "2022-02-10 11:48:05 +0000 UTC" + }, + "event_origin": "EDR", + "organization_key": "XXXXXXXX", + "process": { + "parent": { + "reputation": "REP_RESOLVING" + }, + "publisher": [ + { + "name": "Microsoft Windows", + "state": [ + "FILE_SIGNATURE_STATE_SIGNED", + "FILE_SIGNATURE_STATE_VERIFIED", + "FILE_SIGNATURE_STATE_TRUSTED", + "FILE_SIGNATURE_STATE_OS", + "FILE_SIGNATURE_STATE_CATALOG_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING", + "terminated": false, + "username": "NT AUTHORITY\\SYSTEM" + }, + "schema": 1, + "scriptload": { + "count": 1, + "effective_reputation": "REP_NOT_LISTED", + "publisher": [ + { + "state": [ + "FILE_SIGNATURE_STATE_NOT_SIGNED" + ] + } + ], + "reputation": "REP_RESOLVING" + }, + "sensor_action": "ACTION_ALLOW", + "type": "endpoint.event.scriptload" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "ACTION_LOAD_SCRIPT", + "original": "{\"type\":\"endpoint.event.scriptload\",\"process_guid\":\"XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33\",\"parent_guid\":\"XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49\",\"backend_timestamp\":\"2022-02-10 11:48:51 +0000 UTC\",\"org_key\":\"XXXXXXXX\",\"device_id\":\"16\",\"device_name\":\"DESKTOP-015\",\"device_external_ip\":\"89.160.20.156\",\"device_os\":\"WINDOWS\",\"device_group\":\"\",\"action\":\"ACTION_LOAD_SCRIPT\",\"schema\":1,\"device_timestamp\":\"2022-02-10 11:48:05 +0000 UTC\",\"create_time\": \"2022-02-10T08:03:29.540Z\",\"process_terminated\":false,\"process_reputation\":\"REP_RESOLVING\",\"parent_reputation\":\"REP_RESOLVING\",\"process_pid\":4600,\"parent_pid\":6728,\"process_publisher\":[{\"name\":\"Microsoft Windows\",\"state\":\"FILE_SIGNATURE_STATE_SIGNED | FILE_SIGNATURE_STATE_VERIFIED | FILE_SIGNATURE_STATE_TRUSTED | FILE_SIGNATURE_STATE_OS | FILE_SIGNATURE_STATE_CATALOG_SIGNED\"}],\"process_path\":\"c:\\\\windows\\\\system32\\\\cscript.exe\",\"parent_path\":\"c:\\\\program files\\\\microsoft monitoring agent\\\\agent\\\\monitoringhost.exe\",\"process_hash\":[\"24590bf74bbbbfd7d7ac070f4e3c44fd\",\"ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03\"],\"parent_hash\":[\"2d287989c6f60fa434a345b79b919755\",\"f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89\"],\"process_cmdline\":\"\\\"C:\\\\WINDOWS\\\\system32\\\\cscript.exe\\\" /nologo \\\"MonitorKnowledgeDiscovery.vbs\\\"\",\"parent_cmdline\":\"\\\"C:\\\\Program Files\\\\Microsoft Monitoring Agent\\\\Agent\\\\MonitoringHost.exe\\\" -Embedding\",\"process_username\":\"NT AUTHORITY\\\\SYSTEM\",\"sensor_action\":\"ACTION_ALLOW\",\"event_origin\":\"EDR\",\"scriptload_count\":1,\"scriptload_reputation\":\"REP_RESOLVING\",\"scriptload_effective_reputation\":\"REP_NOT_LISTED\",\"scriptload_publisher\":[{\"state\":\"FILE_SIGNATURE_STATE_NOT_SIGNED\"}]}" + }, + "host": { + "hostname": "DESKTOP-015", + "id": "16", + "ip": [ + "89.160.20.156" + ], + "name": "DESKTOP-015", + "os": { + "type": "windows" + } + }, + "process": { + "command_line": "\"C:\\WINDOWS\\system32\\cscript.exe\" /nologo \"MonitorKnowledgeDiscovery.vbs\"", + "entity_id": "XXXXXXXX-004e050d-000011f8-00000000-1d81e740ff3ff33", + "executable": "c:\\windows\\system32\\cscript.exe", + "hash": { + "md5": "24590bf74bbbbfd7d7ac070f4e3c44fd", + "sha256": "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03" + }, + "parent": { + "command_line": "\"C:\\Program Files\\Microsoft Monitoring Agent\\Agent\\MonitoringHost.exe\" -Embedding", + "entity_id": "XXXXXXXX-004e050d-00001a48-00000000-1d81e206b2e4f49", + "executable": "c:\\program files\\microsoft monitoring agent\\agent\\monitoringhost.exe", + "hash": { + "md5": "2d287989c6f60fa434a345b79b919755", + "sha256": "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + }, + "pid": 6728 + }, + "pid": 4600 + }, + "related": { + "hash": [ + "24590bf74bbbbfd7d7ac070f4e3c44fd", + "2d287989c6f60fa434a345b79b919755", + "ae37fd1b642e797b36b9ffcec8a6e986732d011681061800c6b74426c28a9d03", + "f66196626700ae0728c0269febf2c194f9b73c49dfe7f4fa869d3b96334e5d89" + ], + "hosts": [ + "DESKTOP-015" + ], + "ip": [ + "89.160.20.156" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "tags": [ + "preserve_original_event" + ] } ] } \ No newline at end of file diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml b/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml index cacd28068bf..d9936a02334 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/elasticsearch/ingest_pipeline/default.yml @@ -27,6 +27,9 @@ processors: if: ctx.json?.device_timestamp != null && ctx.json.device_timestamp != '' formats: - ISO8601 + - 'yyyy-MM-dd HH:mm:ss Z z' + - 'yyyy-MM-dd HH:mm:ss.S Z z' + - 'yyyy-MM-dd HH:mm:ss.SS Z z' - 'yyyy-MM-dd HH:mm:ss.SSS Z z' - 'yyyy-MM-dd HH:mm:ss.SSSS Z z' - 'yyyy-MM-dd HH:mm:ss.SSSSS Z z' diff --git a/packages/carbon_black_cloud/manifest.yml b/packages/carbon_black_cloud/manifest.yml index 0c515a06f99..f4afca0b7c3 100644 --- a/packages/carbon_black_cloud/manifest.yml +++ b/packages/carbon_black_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: carbon_black_cloud title: VMware Carbon Black Cloud -version: "1.21.2" +version: "1.21.3" description: Collect logs from VMWare Carbon Black Cloud with Elastic Agent. type: integration categories: From 30daef646ed90b723de557fa2f54a9d772c7ad15 Mon Sep 17 00:00:00 2001 From: Dennis Perto Date: Wed, 20 Mar 2024 08:25:07 +0100 Subject: [PATCH 17/33] [eset_protect] Enhancing ECS fields (#9382) Add mappings for host.name, host.domain, file.drive_letter, file.name, file.path and file.directory. New tests obtained from a production environment after sanitisation. --- packages/eset_protect/changelog.yml | 5 + .../data_stream/detection/sample_event.json | 10 +- .../data_stream/device_task/sample_event.json | 12 +- .../event/_dev/test/pipeline/test-event.log | 13 + .../pipeline/test-event.log-expected.json | 1266 ++++++++++++++++- .../elasticsearch/ingest_pipeline/default.yml | 56 +- .../data_stream/event/sample_event.json | 13 +- packages/eset_protect/docs/README.md | 35 +- packages/eset_protect/manifest.yml | 2 +- 9 files changed, 1367 insertions(+), 45 deletions(-) diff --git a/packages/eset_protect/changelog.yml b/packages/eset_protect/changelog.yml index 1e699c5bd68..7f5bd9b3f41 100644 --- a/packages/eset_protect/changelog.yml +++ b/packages/eset_protect/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.3.0" + changes: + - description: Fix host and file ECS fields. + type: enhancement + link: https://github.com/elastic/integrations/pull/9382 - version: "0.2.0" changes: - description: Set sensitive values as secret, upgrade to package spec 3.0.3. diff --git a/packages/eset_protect/data_stream/detection/sample_event.json b/packages/eset_protect/data_stream/detection/sample_event.json index be272329d06..cbb3ab86f93 100644 --- a/packages/eset_protect/data_stream/detection/sample_event.json +++ b/packages/eset_protect/data_stream/detection/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2023-10-26T13:36:53.000Z", "agent": { - "ephemeral_id": "eaf0a213-9722-4532-9223-51619c3f6c91", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "96cc7ee0-ede2-46a4-9b0e-4104dead04cc", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -38,8 +38,8 @@ "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -75,7 +75,7 @@ "intrusion_detection" ], "dataset": "eset_protect.detection", - "ingested": "2024-01-04T10:08:34Z", + "ingested": "2024-03-18T21:48:09Z", "kind": "alert", "original": "{\"category\":\"DETECTION_CATEGORY_NETWORK_INTRUSION\",\"context\":{\"circumstances\":\"Eicar\",\"deviceUuid\":\"xxx-xxxx-1234-5678-xxxxxxxxxxxx\",\"process\":{\"path\":\"C:\\\\Windows\\\\chrome.exe\"},\"userName\":\"testingpc\\\\example\"},\"networkCommunication\":{\"protocolName\":\"0\",\"remoteIpAddress\":\"89.160.20.112\",\"remotePort\":443},\"objectHashSha1\":\"AAF4C61DDCC5E8A2DABEDE0F3B4820123456789D\",\"objectTypeName\":\"File\",\"objectUrl\":\"C:\\\\Temp\\\\06516f11-xxxx-xxxx-xxxx-37da66b5de99_ccf7464ba6e2e12e984514f694bfb10d03de77358d8a3afd7a2ffed150ec1df8.zip.e99\\\\ccf7464ba6e2e12e984514f694bfb10d03de77358d8a3afd7a2ffed150ec1df8\",\"occurTime\":\"2023-10-26T13:36:53Z\",\"responses\":[{}],\"severityLevel\":\"SEVERITY_LEVEL_MEDIUM\",\"typeName\":\"TCP Port scanning attack\",\"uuid\":\"xxx-xxxx-xxxx-1234-xxxxxxxxxxxx\"}", "type": [ diff --git a/packages/eset_protect/data_stream/device_task/sample_event.json b/packages/eset_protect/data_stream/device_task/sample_event.json index dd4cca3a0c5..17adc86971b 100644 --- a/packages/eset_protect/data_stream/device_task/sample_event.json +++ b/packages/eset_protect/data_stream/device_task/sample_event.json @@ -1,8 +1,8 @@ { - "@timestamp": "2024-01-04T10:09:14.915Z", + "@timestamp": "2024-03-18T21:48:50.773Z", "agent": { - "ephemeral_id": "3873a5a6-ab80-4d05-b35a-e91aa4c7f86e", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "d53e8e23-6aa6-45ba-9806-ccb21bab0098", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -16,8 +16,8 @@ "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -58,7 +58,7 @@ "action": "Shutdown computer", "agent_id_status": "verified", "dataset": "eset_protect.device_task", - "ingested": "2024-01-04T10:09:26Z", + "ingested": "2024-03-18T21:49:02Z", "kind": "event", "original": "{\"action\":{\"name\":\"Shutdown computer\",\"params\":{\"@type\":\"type.googleapis.com/Era.Common.DataDefinition.Task.ESS.OnDemandScan\",\"cleaningEnabled\":true,\"customProfileName\":\"DefaultProfile\",\"scanProfile\":\"InDepth\",\"scanTargets\":[\"eset://AllTargets\"]}},\"description\":\"Automatically created via context menu\",\"displayName\":\"Reboot Computer - via context menu\",\"targets\":{\"devicesUuids\":[\"0205321e-XXXX-XXXX-1234-feeb35010ea7\",\"0205321e-XXXX-XXXX-5678-feeb35010ea7\",\"0205321e-XXXX-1234-5678-feeb35010ea7\"]},\"triggers\":[{\"manual\":{\"expireTime\":\"2023-12-01T01:30:00Z\"}}],\"uuid\":\"c93070e0-XXXX-1234-5678-c48f0e5e0b7e\",\"versionId\":\"1511\"}", "type": [ diff --git a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log index aee5f471d23..fa1a9307c78 100644 --- a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log +++ b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log @@ -8,3 +8,16 @@ {"event_type":"Threat_Event","ipv4":"192.168.30.31","hostname":"031-mg","group_name":"All/Lost & found","os_name":"Microsoft Windows 10 Pro","group_description":"Lost & found static group","source_uuid":"xxx-xxxx-1234-xxxx-xxxxxxxxxxxx","occured":"25-Jun-2021 09:47:30","severity":"High","threat_type":"Malware","threat_name":"Trojan.Generic","scanner_id":"Real-time file system protection","scan_id":"file123.exe","engine_version":"23500 (20210622)","object_type":"File","object_uri":"file:///C:/Users/Administrator/Downloads/malicious.exe","action_taken":"Quarantined","threat_handled":true,"need_restart":false,"username":"031-MG\\Administrator","processname":"C:\\Program Files\\MalwareScanner\\Scanner.exe","circumstances":"Event occurred on a downloaded file.","firstseen":"21-Jun-2021 09:47:29","hash":"8F765A7D2B0E4D11BC0E79313A8F8E0019F317D9"} {"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"firewall-test","group_name":"All/Lost & found","os_name":"Microsoft Windows 10 Pro","group_description":"Lost & found static group","source_uuid":"xxx-xxxx-1234-xxxx-xxxxxxxxxxxx","occured":"28-Jun-2023 15:25:12","severity":"High","event":"Denial of Service Attack","source_address":"192.168.30.32","source_address_type":"IPv4","source_port":54321,"target_address":"192.168.30.31","target_address_type":"IPv4","target_port":80,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"C:\\Windows\\System32\\svchost.exe","inbound":true,"threat_name":"DoS.Generic","aggregate_count":5} {"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"firewall-test","group_name":"All/Lost & found","os_name":"Microsoft Windows 10 Pro","group_description":"Lost & found static group","source_uuid":"xxx-xxxx-1234-1234-xxxxxxxxxxxx","occured":"24-Apr-2023 15:25:12","severity":"High","event":"Denial of Service Attack","source_address":"2a02:cf40::","source_address_type":"IPv6","source_port":8080,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":80,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"C:\\Windows\\System32\\svchost.exe","inbound":true,"threat_name":"DoS.Generic","aggregate_count":5} +{"event_type":"FirewallAggregated_Event","ipv4":"1.128.0.5","hostname":"machine1.domain.com","source_uuid":"ca28cf94-2696-44e6-bb0a-1325b09c562f","occured":"15-Mar-2024 18:49:08","severity":"Fatal","event":"Suspected botnet detected","source_address":"192.168.101.2","source_address_type":"IPv4","source_port":53884,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":443,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"EK-Mozi","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine2.domain.com","source_uuid":"ff802ef4-bfd6-4fe7-bbfb-215b6beed399","occured":"14-Mar-2024 10:47:28","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":59840,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":80,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"CVE-2017-5638.Struts2","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine2.domain.com","source_uuid":"ff802ef4-bfd6-4fe7-bbfb-215b6beed399","occured":"14-Mar-2024 10:36:47","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":57313,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":8090,"protocol":"TCP","account":"NT AUTHORITY\\LOCAL SERVICE","process_name":"C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe","inbound":true,"threat_name":"HTTP/Exploit.CVE-2021-41773","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine3.domain.com","source_uuid":"8452d051-47ba-4203-97f5-258899a4161b","occured":"14-Mar-2024 10:31:03","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":56800,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":47001,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"CVE-2017-5638.Struts2","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine3.domain.com","source_uuid":"8452d051-47ba-4203-97f5-258899a4161b","occured":"14-Mar-2024 10:20:29","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":55682,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":3128,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"C:\\Program Files\\Apache HTTP Proxy\\bin\\httpd.exe","inbound":true,"threat_name":"HTTP/Exploit.CVE-2021-41773","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine2.domain.com","source_uuid":"ff802ef4-bfd6-4fe7-bbfb-215b6beed399","occured":"14-Mar-2024 10:08:15","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":51937,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":445,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"SMB.CVE-2011-1267","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine4","source_uuid":"c01a310d-b1a8-4bc6-aa2c-5359e5ecee4e","occured":"14-Mar-2024 10:00:42","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":64616,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":47001,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"CVE-2017-5638.Struts2","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine3.domain.com","source_uuid":"8452d051-47ba-4203-97f5-258899a4161b","occured":"14-Mar-2024 09:52:36","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":59912,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":445,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"SMB.CVE-2011-1267","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine2.domain.com","source_uuid":"ff802ef4-bfd6-4fe7-bbfb-215b6beed399","occured":"14-Mar-2024 09:11:13","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","target_address":"1.128.0.5","target_address_type":"IPv4","target_port":8090,"protocol":"TCP","account":"NT AUTHORITY\\LOCAL SERVICE","process_name":"C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe","inbound":true,"threat_name":"JAVA/Exploit.CVE-2021-44228","aggregate_count":4} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine3.domain.com","source_uuid":"8452d051-47ba-4203-97f5-258899a4161b","occured":"14-Mar-2024 09:34:21","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","source_port":50505,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":445,"protocol":"TCP","process_name":"System","inbound":true,"threat_name":"SMB/Exploit.DoublePulsar.B","aggregate_count":1} +{"event_type":"FirewallAggregated_Event","ipv4":"192.168.30.31","hostname":"machine2.domain.com","source_uuid":"ff802ef4-bfd6-4fe7-bbfb-215b6beed399","occured":"14-Mar-2024 09:15:30","severity":"Warning","event":"Security vulnerability exploitation attempt","source_address":"192.168.9.254","source_address_type":"IPv4","target_address":"1.128.0.5","target_address_type":"IPv4","target_port":8813,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"D:\\sw\\Environmental Manager\\EnvironmentalManagerService.exe","inbound":true,"threat_name":"JAVA/Exploit.CVE-2021-44228","aggregate_count":2} +{"event_type":"FirewallAggregated_Event","ipv4":"1.128.0.5","hostname":"machine4","source_uuid":"c539dbdf-2063-477b-81d7-8081a6f7a080","occured":"12-Mar-2024 11:00:26","severity":"Fatal","event":"Web threat","source_address":"192.168.30.32","source_address_type":"IPv4","source_port":37966,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":49677,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"C:\\Windows\\System32\\lsass.exe","inbound":true,"threat_name":"RPC/Exploit.CVE-2020-1472","aggregate_count":1} +{"event_type":"Threat_Event","ipv4":"192.168.30.31","hostname":"machine5","source_uuid":"f193d96b-cbd8-4402-94fc-6993efc30b11","occured":"11-Mar-2024 05:56:58","severity":"Warning","threat_type":"Trojan","threat_name":"LNK/Agent.BZ","scanner_id":"Real-time file system protection","scan_id":"virlog.dat","engine_version":"28873 (20240310)","object_type":"File","object_uri":"file:///E:/Removable Drive (1GB).lnk","action_taken":"Cleaned by deleting","threat_handled":true,"need_restart":false,"username":"machine5\\Administrator","processname":"C:\\Windows\\explorer.exe","circumstances":"Event occurred during an attempt to access the file.","firstseen":"28-Jul-2021 07:20:55","hash":"1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2"} \ No newline at end of file diff --git a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json index a2df25a3dad..a0afc1a4e45 100644 --- a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json +++ b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json @@ -46,6 +46,13 @@ "indicator" ] }, + "file": { + "directory": "/Users/Administrator/Downloads/xls/", + "drive_letter": "C", + "name": "YICT080714.xls", + "path": "C:/Users/Administrator/Downloads/xls/YICT080714.xls", + "type": "file" + }, "group": { "name": "All/Lost & found" }, @@ -55,6 +62,7 @@ "ip": [ "192.168.30.30" ], + "name": "030-mg", "os": { "name": "Microsoft Windows 11 Pro" } @@ -155,6 +163,7 @@ "ip": [ "192.168.30.30" ], + "name": "w16test", "os": { "name": "Microsoft Windows 11 Pro" } @@ -243,6 +252,7 @@ "ip": [ "192.168.30.181" ], + "name": "test-w10-uefi", "os": { "name": "Microsoft Windows 11 Pro" } @@ -312,6 +322,7 @@ "ip": [ "192.168.30.30" ], + "name": "030-mg", "os": { "name": "Microsoft Windows 11 Pro" } @@ -319,6 +330,7 @@ "message": "Authenticating native user 'Administrator'.", "related": { "hosts": [ + "030-mg", "030-MG", "72cdf05f-f9c8-49cc-863d-c6b3059a9e8e" ], @@ -401,6 +413,7 @@ "ip": [ "192.168.30.30" ], + "name": "win-test", "os": { "name": "Microsoft Windows 11 Pro" } @@ -482,11 +495,13 @@ "name": "All/Lost & found" }, "host": { - "hostname": "shdsolec.vddjc", + "domain": "vddjc", + "hostname": "shdsolec", "id": "csd77ad2-2453-42f4-80a4-d86dfa9d0543", "ip": [ "192.168.30.30" ], + "name": "shdsolec.vddjc", "os": { "name": "Microsoft Windows 11 Pro" } @@ -498,6 +513,7 @@ "related": { "hosts": [ "shdsolec.vddjc", + "shdsolec", "csd77ad2-2453-42f4-80a4-d86dfa9d0543" ], "ip": [ @@ -562,6 +578,7 @@ "ip": [ "175.16.199.1" ], + "name": "testingpc", "os": { "name": "Microsoft Windows 11 Pro" } @@ -633,6 +650,13 @@ "indicator" ] }, + "file": { + "directory": "/Users/Administrator/Downloads/", + "drive_letter": "C", + "name": "malicious.exe", + "path": "C:/Users/Administrator/Downloads/malicious.exe", + "type": "file" + }, "group": { "name": "All/Lost & found" }, @@ -642,6 +666,7 @@ "ip": [ "192.168.30.31" ], + "name": "031-mg", "os": { "name": "Microsoft Windows 10 Pro" } @@ -742,6 +767,7 @@ "ip": [ "192.168.30.31" ], + "name": "firewall-test", "os": { "name": "Microsoft Windows 10 Pro" } @@ -845,6 +871,7 @@ "ip": [ "192.168.30.31" ], + "name": "firewall-test", "os": { "name": "Microsoft Windows 10 Pro" } @@ -896,6 +923,1243 @@ "sightings": 5 } } + }, + { + "@timestamp": "2024-03-15T18:49:08.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 443 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine1.domain.com", + "inbound": true, + "ipv4": "1.128.0.5", + "is_handled": false, + "name": "Suspected botnet detected", + "occured": "2024-03-15T18:49:08.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Fatal", + "source_address": "192.168.101.2", + "source_address_type": "IPv4", + "source_port": 53884, + "source_uuid": "ca28cf94-2696-44e6-bb0a-1325b09c562f", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 443, + "threat_name": "EK-Mozi", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"1.128.0.5\",\"hostname\":\"machine1.domain.com\",\"source_uuid\":\"ca28cf94-2696-44e6-bb0a-1325b09c562f\",\"occured\":\"15-Mar-2024 18:49:08\",\"severity\":\"Fatal\",\"event\":\"Suspected botnet detected\",\"source_address\":\"192.168.101.2\",\"source_address_type\":\"IPv4\",\"source_port\":53884,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":443,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"EK-Mozi\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine1", + "id": "ca28cf94-2696-44e6-bb0a-1325b09c562f", + "ip": [ + "1.128.0.5" + ], + "name": "machine1.domain.com" + }, + "message": "Suspected botnet detected", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine1.domain.com", + "machine1", + "ca28cf94-2696-44e6-bb0a-1325b09c562f" + ], + "ip": [ + "1.128.0.5", + "192.168.101.2" + ] + }, + "source": { + "ip": "192.168.101.2", + "port": 53884 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "EK-Mozi", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:47:28.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 80 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine2.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:47:28.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 59840, + "source_uuid": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 80, + "threat_name": "CVE-2017-5638.Struts2", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine2.domain.com\",\"source_uuid\":\"ff802ef4-bfd6-4fe7-bbfb-215b6beed399\",\"occured\":\"14-Mar-2024 10:47:28\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":59840,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":80,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"CVE-2017-5638.Struts2\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine2", + "id": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "ip": [ + "192.168.30.31" + ], + "name": "machine2.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine2.domain.com", + "machine2", + "ff802ef4-bfd6-4fe7-bbfb-215b6beed399" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 59840 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "CVE-2017-5638.Struts2", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:36:47.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 8090 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "account": "NT AUTHORITY\\LOCAL SERVICE", + "aggregate_count": 1, + "hostname": "machine2.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:36:47.000Z", + "processname": "C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 57313, + "source_uuid": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 8090, + "threat_name": "HTTP/Exploit.CVE-2021-41773", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine2.domain.com\",\"source_uuid\":\"ff802ef4-bfd6-4fe7-bbfb-215b6beed399\",\"occured\":\"14-Mar-2024 10:36:47\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":57313,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":8090,\"protocol\":\"TCP\",\"account\":\"NT AUTHORITY\\\\LOCAL SERVICE\",\"process_name\":\"C:\\\\Program Files (x86)\\\\Schneider Electric\\\\Floating License Manager\\\\FLEXnet Publisher License Server Manager\\\\lmadmin.exe\",\"inbound\":true,\"threat_name\":\"HTTP/Exploit.CVE-2021-41773\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine2", + "id": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "ip": [ + "192.168.30.31" + ], + "name": "machine2.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe", + "name": "lmadmin.exe" + }, + "related": { + "hosts": [ + "machine2.domain.com", + "machine2", + "ff802ef4-bfd6-4fe7-bbfb-215b6beed399" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ], + "user": [ + "NT AUTHORITY\\LOCAL SERVICE" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 57313 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "HTTP/Exploit.CVE-2021-41773", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:31:03.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 47001 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine3.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:31:03.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 56800, + "source_uuid": "8452d051-47ba-4203-97f5-258899a4161b", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 47001, + "threat_name": "CVE-2017-5638.Struts2", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine3.domain.com\",\"source_uuid\":\"8452d051-47ba-4203-97f5-258899a4161b\",\"occured\":\"14-Mar-2024 10:31:03\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":56800,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":47001,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"CVE-2017-5638.Struts2\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine3", + "id": "8452d051-47ba-4203-97f5-258899a4161b", + "ip": [ + "192.168.30.31" + ], + "name": "machine3.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine3.domain.com", + "machine3", + "8452d051-47ba-4203-97f5-258899a4161b" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 56800 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "CVE-2017-5638.Struts2", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:20:29.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 3128 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "account": "NT AUTHORITY\\SYSTEM", + "aggregate_count": 1, + "hostname": "machine3.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:20:29.000Z", + "processname": "C:\\Program Files\\Apache HTTP Proxy\\bin\\httpd.exe", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 55682, + "source_uuid": "8452d051-47ba-4203-97f5-258899a4161b", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 3128, + "threat_name": "HTTP/Exploit.CVE-2021-41773", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine3.domain.com\",\"source_uuid\":\"8452d051-47ba-4203-97f5-258899a4161b\",\"occured\":\"14-Mar-2024 10:20:29\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":55682,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":3128,\"protocol\":\"TCP\",\"account\":\"NT AUTHORITY\\\\SYSTEM\",\"process_name\":\"C:\\\\Program Files\\\\Apache HTTP Proxy\\\\bin\\\\httpd.exe\",\"inbound\":true,\"threat_name\":\"HTTP/Exploit.CVE-2021-41773\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine3", + "id": "8452d051-47ba-4203-97f5-258899a4161b", + "ip": [ + "192.168.30.31" + ], + "name": "machine3.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "C:\\Program Files\\Apache HTTP Proxy\\bin\\httpd.exe", + "name": "httpd.exe" + }, + "related": { + "hosts": [ + "machine3.domain.com", + "machine3", + "8452d051-47ba-4203-97f5-258899a4161b" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 55682 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "HTTP/Exploit.CVE-2021-41773", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:08:15.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 445 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine2.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:08:15.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 51937, + "source_uuid": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 445, + "threat_name": "SMB.CVE-2011-1267", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine2.domain.com\",\"source_uuid\":\"ff802ef4-bfd6-4fe7-bbfb-215b6beed399\",\"occured\":\"14-Mar-2024 10:08:15\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":51937,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":445,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"SMB.CVE-2011-1267\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine2", + "id": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "ip": [ + "192.168.30.31" + ], + "name": "machine2.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine2.domain.com", + "machine2", + "ff802ef4-bfd6-4fe7-bbfb-215b6beed399" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 51937 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "SMB.CVE-2011-1267", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T10:00:42.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 47001 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine4", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T10:00:42.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 64616, + "source_uuid": "c01a310d-b1a8-4bc6-aa2c-5359e5ecee4e", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 47001, + "threat_name": "CVE-2017-5638.Struts2", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine4\",\"source_uuid\":\"c01a310d-b1a8-4bc6-aa2c-5359e5ecee4e\",\"occured\":\"14-Mar-2024 10:00:42\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":64616,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":47001,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"CVE-2017-5638.Struts2\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "hostname": "machine4", + "id": "c01a310d-b1a8-4bc6-aa2c-5359e5ecee4e", + "ip": [ + "192.168.30.31" + ], + "name": "machine4" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine4", + "c01a310d-b1a8-4bc6-aa2c-5359e5ecee4e" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 64616 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "CVE-2017-5638.Struts2", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T09:52:36.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 445 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine3.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T09:52:36.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 59912, + "source_uuid": "8452d051-47ba-4203-97f5-258899a4161b", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 445, + "threat_name": "SMB.CVE-2011-1267", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine3.domain.com\",\"source_uuid\":\"8452d051-47ba-4203-97f5-258899a4161b\",\"occured\":\"14-Mar-2024 09:52:36\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":59912,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":445,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"SMB.CVE-2011-1267\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine3", + "id": "8452d051-47ba-4203-97f5-258899a4161b", + "ip": [ + "192.168.30.31" + ], + "name": "machine3.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine3.domain.com", + "machine3", + "8452d051-47ba-4203-97f5-258899a4161b" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 59912 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "SMB.CVE-2011-1267", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T09:11:13.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 8090 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "account": "NT AUTHORITY\\LOCAL SERVICE", + "aggregate_count": 4, + "hostname": "machine2.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T09:11:13.000Z", + "processname": "C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_uuid": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 8090, + "threat_name": "JAVA/Exploit.CVE-2021-44228", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine2.domain.com\",\"source_uuid\":\"ff802ef4-bfd6-4fe7-bbfb-215b6beed399\",\"occured\":\"14-Mar-2024 09:11:13\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":8090,\"protocol\":\"TCP\",\"account\":\"NT AUTHORITY\\\\LOCAL SERVICE\",\"process_name\":\"C:\\\\Program Files (x86)\\\\Schneider Electric\\\\Floating License Manager\\\\FLEXnet Publisher License Server Manager\\\\lmadmin.exe\",\"inbound\":true,\"threat_name\":\"JAVA/Exploit.CVE-2021-44228\",\"aggregate_count\":4}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine2", + "id": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "ip": [ + "192.168.30.31" + ], + "name": "machine2.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "C:\\Program Files (x86)\\Schneider Electric\\Floating License Manager\\FLEXnet Publisher License Server Manager\\lmadmin.exe", + "name": "lmadmin.exe" + }, + "related": { + "hosts": [ + "machine2.domain.com", + "machine2", + "ff802ef4-bfd6-4fe7-bbfb-215b6beed399" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ], + "user": [ + "NT AUTHORITY\\LOCAL SERVICE" + ] + }, + "source": { + "ip": "192.168.9.254" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "JAVA/Exploit.CVE-2021-44228", + "provider": "ESET PROTECT", + "sightings": 4 + } + } + }, + { + "@timestamp": "2024-03-14T09:34:21.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 445 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "aggregate_count": 1, + "hostname": "machine3.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T09:34:21.000Z", + "processname": "System", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_port": 50505, + "source_uuid": "8452d051-47ba-4203-97f5-258899a4161b", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 445, + "threat_name": "SMB/Exploit.DoublePulsar.B", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine3.domain.com\",\"source_uuid\":\"8452d051-47ba-4203-97f5-258899a4161b\",\"occured\":\"14-Mar-2024 09:34:21\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"source_port\":50505,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":445,\"protocol\":\"TCP\",\"process_name\":\"System\",\"inbound\":true,\"threat_name\":\"SMB/Exploit.DoublePulsar.B\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine3", + "id": "8452d051-47ba-4203-97f5-258899a4161b", + "ip": [ + "192.168.30.31" + ], + "name": "machine3.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "System", + "name": "System" + }, + "related": { + "hosts": [ + "machine3.domain.com", + "machine3", + "8452d051-47ba-4203-97f5-258899a4161b" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ] + }, + "source": { + "ip": "192.168.9.254", + "port": 50505 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "SMB/Exploit.DoublePulsar.B", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-14T09:15:30.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 8813 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "account": "NT AUTHORITY\\SYSTEM", + "aggregate_count": 2, + "hostname": "machine2.domain.com", + "inbound": true, + "ipv4": "192.168.30.31", + "is_handled": false, + "name": "Security vulnerability exploitation attempt", + "occured": "2024-03-14T09:15:30.000Z", + "processname": "D:\\sw\\Environmental Manager\\EnvironmentalManagerService.exe", + "protocol": "TCP", + "severity": "Warning", + "source_address": "192.168.9.254", + "source_address_type": "IPv4", + "source_uuid": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 8813, + "threat_name": "JAVA/Exploit.CVE-2021-44228", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine2.domain.com\",\"source_uuid\":\"ff802ef4-bfd6-4fe7-bbfb-215b6beed399\",\"occured\":\"14-Mar-2024 09:15:30\",\"severity\":\"Warning\",\"event\":\"Security vulnerability exploitation attempt\",\"source_address\":\"192.168.9.254\",\"source_address_type\":\"IPv4\",\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":8813,\"protocol\":\"TCP\",\"account\":\"NT AUTHORITY\\\\SYSTEM\",\"process_name\":\"D:\\\\sw\\\\Environmental Manager\\\\EnvironmentalManagerService.exe\",\"inbound\":true,\"threat_name\":\"JAVA/Exploit.CVE-2021-44228\",\"aggregate_count\":2}", + "type": [ + "info" + ] + }, + "host": { + "domain": "domain.com", + "hostname": "machine2", + "id": "ff802ef4-bfd6-4fe7-bbfb-215b6beed399", + "ip": [ + "192.168.30.31" + ], + "name": "machine2.domain.com" + }, + "message": "Security vulnerability exploitation attempt", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "D:\\sw\\Environmental Manager\\EnvironmentalManagerService.exe", + "name": "EnvironmentalManagerService.exe" + }, + "related": { + "hosts": [ + "machine2.domain.com", + "machine2", + "ff802ef4-bfd6-4fe7-bbfb-215b6beed399" + ], + "ip": [ + "192.168.30.31", + "192.168.9.254", + "1.128.0.5" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "source": { + "ip": "192.168.9.254" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "JAVA/Exploit.CVE-2021-44228", + "provider": "ESET PROTECT", + "sightings": 2 + } + } + }, + { + "@timestamp": "2024-03-12T11:00:26.000Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "ip": "1.128.0.5", + "port": 49677 + }, + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "account": "NT AUTHORITY\\SYSTEM", + "aggregate_count": 1, + "hostname": "machine4", + "inbound": true, + "ipv4": "1.128.0.5", + "is_handled": false, + "name": "Web threat", + "occured": "2024-03-12T11:00:26.000Z", + "processname": "C:\\Windows\\System32\\lsass.exe", + "protocol": "TCP", + "severity": "Fatal", + "source_address": "192.168.30.32", + "source_address_type": "IPv4", + "source_port": 37966, + "source_uuid": "c539dbdf-2063-477b-81d7-8081a6f7a080", + "target_address": "1.128.0.5", + "target_address_type": "IPv4", + "target_port": 49677, + "threat_name": "RPC/Exploit.CVE-2020-1472", + "type": "FirewallAggregated_Event" + } + }, + "event": { + "category": [ + "intrusion_detection" + ], + "kind": "alert", + "original": "{\"event_type\":\"FirewallAggregated_Event\",\"ipv4\":\"1.128.0.5\",\"hostname\":\"machine4\",\"source_uuid\":\"c539dbdf-2063-477b-81d7-8081a6f7a080\",\"occured\":\"12-Mar-2024 11:00:26\",\"severity\":\"Fatal\",\"event\":\"Web threat\",\"source_address\":\"192.168.30.32\",\"source_address_type\":\"IPv4\",\"source_port\":37966,\"target_address\":\"1.128.0.5\",\"target_address_type\":\"IPv4\",\"target_port\":49677,\"protocol\":\"TCP\",\"account\":\"NT AUTHORITY\\\\SYSTEM\",\"process_name\":\"C:\\\\Windows\\\\System32\\\\lsass.exe\",\"inbound\":true,\"threat_name\":\"RPC/Exploit.CVE-2020-1472\",\"aggregate_count\":1}", + "type": [ + "info" + ] + }, + "host": { + "hostname": "machine4", + "id": "c539dbdf-2063-477b-81d7-8081a6f7a080", + "ip": [ + "1.128.0.5" + ], + "name": "machine4" + }, + "message": "Web threat", + "network": { + "direction": "inbound", + "protocol": "tcp" + }, + "process": { + "executable": "C:\\Windows\\System32\\lsass.exe", + "name": "lsass.exe" + }, + "related": { + "hosts": [ + "machine4", + "c539dbdf-2063-477b-81d7-8081a6f7a080" + ], + "ip": [ + "1.128.0.5", + "192.168.30.32" + ], + "user": [ + "NT AUTHORITY\\SYSTEM" + ] + }, + "source": { + "ip": "192.168.30.32", + "port": 37966 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "name": "RPC/Exploit.CVE-2020-1472", + "provider": "ESET PROTECT", + "sightings": 1 + } + } + }, + { + "@timestamp": "2024-03-11T05:56:58.000Z", + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "action_taken": "Cleaned by deleting", + "circumstances": "Event occurred during an attempt to access the file.", + "engine_version": "28873 (20240310)", + "firstseen": "2021-07-28T07:20:55.000Z", + "hash": "1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2", + "hostname": "machine5", + "ipv4": "192.168.30.31", + "is_handled": false, + "need_restart": false, + "object_type": "File", + "object_uri": "file:///E:/Removable Drive (1GB).lnk", + "occured": "2024-03-11T05:56:58.000Z", + "processname": "C:\\Windows\\explorer.exe", + "scan_id": "virlog.dat", + "scanner_id": "Real-time file system protection", + "severity": "Warning", + "source_uuid": "f193d96b-cbd8-4402-94fc-6993efc30b11", + "threat_handled": true, + "threat_name": "LNK/Agent.BZ", + "threat_type": "Trojan", + "type": "Threat_Event", + "username": "machine5\\Administrator" + } + }, + "event": { + "action": "cleaned-by-deleting", + "category": [ + "threat" + ], + "kind": "alert", + "original": "{\"event_type\":\"Threat_Event\",\"ipv4\":\"192.168.30.31\",\"hostname\":\"machine5\",\"source_uuid\":\"f193d96b-cbd8-4402-94fc-6993efc30b11\",\"occured\":\"11-Mar-2024 05:56:58\",\"severity\":\"Warning\",\"threat_type\":\"Trojan\",\"threat_name\":\"LNK/Agent.BZ\",\"scanner_id\":\"Real-time file system protection\",\"scan_id\":\"virlog.dat\",\"engine_version\":\"28873 (20240310)\",\"object_type\":\"File\",\"object_uri\":\"file:///E:/Removable Drive (1GB).lnk\",\"action_taken\":\"Cleaned by deleting\",\"threat_handled\":true,\"need_restart\":false,\"username\":\"machine5\\\\Administrator\",\"processname\":\"C:\\\\Windows\\\\explorer.exe\",\"circumstances\":\"Event occurred during an attempt to access the file.\",\"firstseen\":\"28-Jul-2021 07:20:55\",\"hash\":\"1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2\"}", + "reason": "Event occurred during an attempt to access the file.", + "type": [ + "indicator" + ] + }, + "file": { + "directory": "/", + "drive_letter": "E", + "name": "Removable Drive (1GB).lnk", + "path": "E:/Removable Drive (1GB).lnk", + "type": "file" + }, + "host": { + "hostname": "machine5", + "id": "f193d96b-cbd8-4402-94fc-6993efc30b11", + "ip": [ + "192.168.30.31" + ], + "name": "machine5" + }, + "process": { + "executable": "C:\\Windows\\explorer.exe", + "name": "explorer.exe" + }, + "related": { + "hash": [ + "1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2" + ], + "hosts": [ + "machine5", + "f193d96b-cbd8-4402-94fc-6993efc30b11" + ], + "ip": [ + "192.168.30.31" + ], + "user": [ + "Administrator" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "file": { + "hash": { + "sha1": "1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2" + } + }, + "first_seen": "2021-07-28T07:20:55.000Z", + "name": "LNK/Agent.BZ", + "provider": "ESET PROTECT", + "type": "file" + } + }, + "user": { + "domain": "machine5", + "name": "Administrator" + } } ] } \ No newline at end of file diff --git a/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml b/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml index 89d56984ec3..d14438e2b06 100644 --- a/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml +++ b/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml @@ -80,16 +80,37 @@ processors: target_field: eset_protect.event.hostname ignore_missing: true - set: - field: host.hostname - tag: set_host_hostname_from_event_hostname + field: host.name + tag: set_host_name_from_event_hostname copy_from: eset_protect.event.hostname - ignore_empty_value: true + if: ctx.eset_protect?.event?.hostname?.contains('.') == true + - grok: + field: eset_protect.event.hostname + tag: grok_host_hostname_and_domain_from_event_hostname + patterns: + - '(%{DATA:host.hostname}\.%{GREEDYDATA:host.domain}|%{GREEDYDATA:host.hostname})' + if: ctx.eset_protect?.event?.hostname != null + - set: + field: host.name + tag: set_host_name_from_host_hostname + copy_from: host.hostname + if: ctx.host?.hostname != null && ctx.host.name == null + - lowercase: + field: host.name + tag: lowercase_host_name + ignore_missing: true + - append: + field: related.hosts + tag: append_host_name_into_related_hosts + value: "{{{host.name}}}" + allow_duplicates: false + if: ctx.host?.name != null - append: field: related.hosts tag: append_hostname_into_related_hosts - value: "{{{eset_protect.event.hostname}}}" + value: "{{{host.hostname}}}" allow_duplicates: false - if: ctx.eset_protect?.event?.hostname != null + if: ctx.host?.hostname != null - convert: field: json.ipv4 tag: convert_ipv4_to_ip @@ -449,11 +470,28 @@ processors: tag: rename_object_type target_field: eset_protect.event.object_type ignore_missing: true + - set: + field: file.type + value: file + tag: set_file_type_file + if: ctx.eset_protect?.event?.object_type?.toLowerCase() == 'file' - rename: field: json.object_uri tag: rename_object_uri target_field: eset_protect.event.object_uri ignore_missing: true + - set: + field: file.path + if: "ctx.eset_protect?.event?.object_uri != null && ctx.eset_protect?.event?.object_type?.toLowerCase() == 'file'" + copy_from: eset_protect.event.object_uri + - grok: + field: file.path + patterns: + - '^(file:///)?%{FILEPATH:file.path}$' + - '.*/(?.+\.(?.+))$' + pattern_definitions: + FILEPATH: '(?\w):(?/.*/|/)?(?.+(\.(?.+))?)?' + if: ctx.file?.path != null - rename: field: json.operation tag: rename_operation @@ -480,8 +518,8 @@ processors: ignore_missing: true patterns: - '^%{GREEDYDATA:json._temp}\\%{DATA:process.name}$' - - "^%{GREEDYDATA:json._temp}/%{DATA:process.name}$" - - "^%{DATA:process.name}$" + - '^%{GREEDYDATA:json._temp}/%{DATA:process.name}$' + - '^%{DATA:process.name}$' if: ctx.eset_protect?.event?.processname != '' on_failure: - append: @@ -752,8 +790,8 @@ processors: patterns: - '^%{HOSTNAME:user.domain}\\%{USERNAME:user.name}$' - '^%{HOSTNAME:user.domain}\\\\%{USERNAME:user.name}$' - - "^%{USERNAME:user.name}@%{HOSTNAME:user.domain}$" - - "^%{GREEDYDATA:user.name}$" + - '^%{USERNAME:user.name}@%{HOSTNAME:user.domain}$' + - '^%{GREEDYDATA:user.name}$' if: ctx.eset_protect?.event?.username != '' on_failure: - append: diff --git a/packages/eset_protect/data_stream/event/sample_event.json b/packages/eset_protect/data_stream/event/sample_event.json index 4cb659360c7..6d33a074b33 100644 --- a/packages/eset_protect/data_stream/event/sample_event.json +++ b/packages/eset_protect/data_stream/event/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2021-06-21T03:56:20.000Z", "agent": { - "ephemeral_id": "677639c3-b8cb-4791-bd2d-a6f2c144f964", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "fc18dc4a-49f4-460b-a78c-e47e315c9f05", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -37,8 +37,8 @@ "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -72,7 +72,7 @@ "web" ], "dataset": "eset_protect.event", - "ingested": "2024-01-04T10:10:20Z", + "ingested": "2024-03-18T21:50:00Z", "kind": "alert", "original": "{\"event_type\":\"FilteredWebsites_Event\",\"ipv4\":\"192.168.30.30\",\"hostname\":\"win-test\",\"group_name\":\"All/Lost & found\",\"os_name\":\"Microsoft Windows 11 Pro\",\"group_description\":\"Lost & found static group\",\"source_uuid\":\"d9477661-8fa4-4144-b8d4-e37b983bcd69\",\"occured\":\"21-Jun-2021 03:56:20\",\"severity\":\"Warning\",\"event\":\"An attempt to connect to URL\",\"target_address\":\"89.160.20.128\",\"target_address_type\":\"IPv4\",\"scanner_id\":\"HTTP filter\",\"action_taken\":\"blocked\",\"object_uri\":\"https://test.com\",\"hash\":\"ABCDAA625E6961037B8904E113FD0C232A7D0EDC\",\"username\":\"WIN-TEST\\\\Administrator\",\"processname\":\"C:\\\\Program Files\\\\Web browser\\\\brwser.exe\",\"rule_id\":\"Blocked by PUA blacklist\"}", "type": [ @@ -88,6 +88,7 @@ "ip": [ "192.168.30.30" ], + "name": "win-test", "os": { "name": "Microsoft Windows 11 Pro" } @@ -97,7 +98,7 @@ }, "log": { "source": { - "address": "192.168.64.8:46716" + "address": "192.168.16.8:46210" }, "syslog": { "appname": "ERAServer", diff --git a/packages/eset_protect/docs/README.md b/packages/eset_protect/docs/README.md index 861c8cd3507..16209657692 100644 --- a/packages/eset_protect/docs/README.md +++ b/packages/eset_protect/docs/README.md @@ -77,8 +77,8 @@ An example event for `detection` looks as following: { "@timestamp": "2023-10-26T13:36:53.000Z", "agent": { - "ephemeral_id": "eaf0a213-9722-4532-9223-51619c3f6c91", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "96cc7ee0-ede2-46a4-9b0e-4104dead04cc", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -114,8 +114,8 @@ An example event for `detection` looks as following: "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -151,7 +151,7 @@ An example event for `detection` looks as following: "intrusion_detection" ], "dataset": "eset_protect.detection", - "ingested": "2024-01-04T10:08:34Z", + "ingested": "2024-03-18T21:48:09Z", "kind": "alert", "original": "{\"category\":\"DETECTION_CATEGORY_NETWORK_INTRUSION\",\"context\":{\"circumstances\":\"Eicar\",\"deviceUuid\":\"xxx-xxxx-1234-5678-xxxxxxxxxxxx\",\"process\":{\"path\":\"C:\\\\Windows\\\\chrome.exe\"},\"userName\":\"testingpc\\\\example\"},\"networkCommunication\":{\"protocolName\":\"0\",\"remoteIpAddress\":\"89.160.20.112\",\"remotePort\":443},\"objectHashSha1\":\"AAF4C61DDCC5E8A2DABEDE0F3B4820123456789D\",\"objectTypeName\":\"File\",\"objectUrl\":\"C:\\\\Temp\\\\06516f11-xxxx-xxxx-xxxx-37da66b5de99_ccf7464ba6e2e12e984514f694bfb10d03de77358d8a3afd7a2ffed150ec1df8.zip.e99\\\\ccf7464ba6e2e12e984514f694bfb10d03de77358d8a3afd7a2ffed150ec1df8\",\"occurTime\":\"2023-10-26T13:36:53Z\",\"responses\":[{}],\"severityLevel\":\"SEVERITY_LEVEL_MEDIUM\",\"typeName\":\"TCP Port scanning attack\",\"uuid\":\"xxx-xxxx-xxxx-1234-xxxxxxxxxxxx\"}", "type": [ @@ -265,10 +265,10 @@ An example event for `device_task` looks as following: ```json { - "@timestamp": "2024-01-04T10:09:14.915Z", + "@timestamp": "2024-03-18T21:48:50.773Z", "agent": { - "ephemeral_id": "3873a5a6-ab80-4d05-b35a-e91aa4c7f86e", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "d53e8e23-6aa6-45ba-9806-ccb21bab0098", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -282,8 +282,8 @@ An example event for `device_task` looks as following: "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -324,7 +324,7 @@ An example event for `device_task` looks as following: "action": "Shutdown computer", "agent_id_status": "verified", "dataset": "eset_protect.device_task", - "ingested": "2024-01-04T10:09:26Z", + "ingested": "2024-03-18T21:49:02Z", "kind": "event", "original": "{\"action\":{\"name\":\"Shutdown computer\",\"params\":{\"@type\":\"type.googleapis.com/Era.Common.DataDefinition.Task.ESS.OnDemandScan\",\"cleaningEnabled\":true,\"customProfileName\":\"DefaultProfile\",\"scanProfile\":\"InDepth\",\"scanTargets\":[\"eset://AllTargets\"]}},\"description\":\"Automatically created via context menu\",\"displayName\":\"Reboot Computer - via context menu\",\"targets\":{\"devicesUuids\":[\"0205321e-XXXX-XXXX-1234-feeb35010ea7\",\"0205321e-XXXX-XXXX-5678-feeb35010ea7\",\"0205321e-XXXX-1234-5678-feeb35010ea7\"]},\"triggers\":[{\"manual\":{\"expireTime\":\"2023-12-01T01:30:00Z\"}}],\"uuid\":\"c93070e0-XXXX-1234-5678-c48f0e5e0b7e\",\"versionId\":\"1511\"}", "type": [ @@ -401,8 +401,8 @@ An example event for `event` looks as following: { "@timestamp": "2021-06-21T03:56:20.000Z", "agent": { - "ephemeral_id": "677639c3-b8cb-4791-bd2d-a6f2c144f964", - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", + "ephemeral_id": "fc18dc4a-49f4-460b-a78c-e47e315c9f05", + "id": "78166295-0693-4726-a27f-cd8722896c22", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.12.0" @@ -437,8 +437,8 @@ An example event for `event` looks as following: "version": "8.11.0" }, "elastic_agent": { - "id": "7e7335eb-8b8a-400b-9634-4d8caf719b70", - "snapshot": true, + "id": "78166295-0693-4726-a27f-cd8722896c22", + "snapshot": false, "version": "8.12.0" }, "eset_protect": { @@ -472,7 +472,7 @@ An example event for `event` looks as following: "web" ], "dataset": "eset_protect.event", - "ingested": "2024-01-04T10:10:20Z", + "ingested": "2024-03-18T21:50:00Z", "kind": "alert", "original": "{\"event_type\":\"FilteredWebsites_Event\",\"ipv4\":\"192.168.30.30\",\"hostname\":\"win-test\",\"group_name\":\"All/Lost & found\",\"os_name\":\"Microsoft Windows 11 Pro\",\"group_description\":\"Lost & found static group\",\"source_uuid\":\"d9477661-8fa4-4144-b8d4-e37b983bcd69\",\"occured\":\"21-Jun-2021 03:56:20\",\"severity\":\"Warning\",\"event\":\"An attempt to connect to URL\",\"target_address\":\"89.160.20.128\",\"target_address_type\":\"IPv4\",\"scanner_id\":\"HTTP filter\",\"action_taken\":\"blocked\",\"object_uri\":\"https://test.com\",\"hash\":\"ABCDAA625E6961037B8904E113FD0C232A7D0EDC\",\"username\":\"WIN-TEST\\\\Administrator\",\"processname\":\"C:\\\\Program Files\\\\Web browser\\\\brwser.exe\",\"rule_id\":\"Blocked by PUA blacklist\"}", "type": [ @@ -488,6 +488,7 @@ An example event for `event` looks as following: "ip": [ "192.168.30.30" ], + "name": "win-test", "os": { "name": "Microsoft Windows 11 Pro" } @@ -497,7 +498,7 @@ An example event for `event` looks as following: }, "log": { "source": { - "address": "192.168.64.8:46716" + "address": "192.168.16.8:46210" }, "syslog": { "appname": "ERAServer", diff --git a/packages/eset_protect/manifest.yml b/packages/eset_protect/manifest.yml index 248236c9db2..1f19422504c 100644 --- a/packages/eset_protect/manifest.yml +++ b/packages/eset_protect/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: eset_protect title: ESET PROTECT -version: 0.2.0 +version: 0.3.0 description: Collect logs from ESET PROTECT with Elastic Agent. type: integration categories: From a7867fafb67ed74d0115b0d41239a7a3650f2eb7 Mon Sep 17 00:00:00 2001 From: Kfir Peled <61654899+kfirpeled@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:02:46 +0200 Subject: [PATCH 18/33] Pipeline scripts - backport branch - fixing versions surrounded by qoutes (#9387) --- .buildkite/scripts/backport_branch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/scripts/backport_branch.sh b/.buildkite/scripts/backport_branch.sh index 20fd31c3d2c..971c5ad7da2 100755 --- a/.buildkite/scripts/backport_branch.sh +++ b/.buildkite/scripts/backport_branch.sh @@ -172,7 +172,7 @@ if [[ "${version}" != "${PACKAGE_VERSION}" ]]; then fi echo "Check that this changeset is the one creating the version $PACKAGE_NAME" -if ! git show -p ${BASE_COMMIT} packages/${PACKAGE_NAME}/manifest.yml | grep -E "^\+version: ${PACKAGE_VERSION}" ; then +if ! git show -p ${BASE_COMMIT} packages/${PACKAGE_NAME}/manifest.yml | grep -E "^\+version: \"{0,1}${PACKAGE_VERSION}" ; then buildkite-agent annotate "This changeset does not creates the version ${PACKAGE_VERSION}" --style "error" exit 1 fi From 2e06485d786b270b1d864675b24c30085ccad560 Mon Sep 17 00:00:00 2001 From: Mario Rodriguez Molins Date: Wed, 20 Mar 2024 20:47:52 +0100 Subject: [PATCH 19/33] Check version from BASE_COMMIT changeset to create backport branches (#9397) --- .buildkite/scripts/backport_branch.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/scripts/backport_branch.sh b/.buildkite/scripts/backport_branch.sh index 971c5ad7da2..ef3ebc96c29 100755 --- a/.buildkite/scripts/backport_branch.sh +++ b/.buildkite/scripts/backport_branch.sh @@ -164,8 +164,8 @@ if branchExist "$BACKPORT_BRANCH_NAME"; then fi # backport branch does not exist, running checks and create branch -echo "Check the entered version and PACKAGE_VERSION are equal" -version="$(cat packages/${PACKAGE_NAME}/manifest.yml | yq -r .version)" +version="$(git show "${BASE_COMMIT}":"packages/${PACKAGE_NAME}/manifest.yml" | yq -r .version)" +echo "Check if version from ${BASE_COMMIT} (${version}) matches with version from input step ${PACKAGE_VERSION}" if [[ "${version}" != "${PACKAGE_VERSION}" ]]; then buildkite-agent annotate "Unexpected version found in packages/${PACKAGE_NAME}/manifest.yml" --style "error" exit 1 From 2efacb30e3c32d092d55158ff397a49bf2ac4948 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Thu, 21 Mar 2024 14:13:26 +0100 Subject: [PATCH 20/33] Document field limit (#9393) * document field limit * Update docs/generic_guidelines.md Co-authored-by: Mario Rodriguez Molins --------- Co-authored-by: Mario Rodriguez Molins --- docs/generic_guidelines.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/generic_guidelines.md b/docs/generic_guidelines.md index 2f3d60e4646..ae2119a56ea 100644 --- a/docs/generic_guidelines.md +++ b/docs/generic_guidelines.md @@ -18,6 +18,21 @@ Starting with ECS 1.6, ECS is going to start using Basic types for some fields. All fields produced by an integration must be mapped by `fields.yml`. This guarantees that their index mapping is correct, and Kibana has enough info to deal with all fields. +##### Field limits + +By default, data streams will have a `total_fields.limit` setting of 1000. Besides defined custom fields, this also includes dynamically generated ECS fields. If your data stream is expected to eventually house more than 1000 fields, set an explicit limit in the `manifest.yml` of the data stream: +```yaml +elasticsearch: + index_template: + settings: + index: + mapping: + total_fields: + limit: 5000 +``` + +Note: For backwards compatibility, the limit is automatically bumped to 10000 fields if there are more than 500 fields explicitly defined for a data stream, however newly created integrations should not rely on this behavior but instead assume a fixed limit of 1000 fields. + ##### Specify metric types and units As part of the field definition, there are two settings that add metadata which will help Kibana graphing it: From 0d706dd441b1e8fe5012e3d8a159c0af57a67ae1 Mon Sep 17 00:00:00 2001 From: Mohit Jha <138874484+mohitjha-elastic@users.noreply.github.com> Date: Thu, 21 Mar 2024 18:57:04 +0530 Subject: [PATCH 21/33] [trendmicro] Add ECS Categorization for Anti-malware Events (#9407) * Add ECS categorization for anti-malware events. --- packages/trendmicro/changelog.yml | 5 + .../_dev/test/pipeline/test-trendmicro.json | 68 +++++++++ .../test-trendmicro.json-expected.json | 142 ++++++++++++++++++ .../ingest_pipeline/malware-event.yml | 16 ++ .../deep_security/sample_event.json | 10 +- packages/trendmicro/docs/README.md | 10 +- packages/trendmicro/manifest.yml | 2 +- 7 files changed, 242 insertions(+), 11 deletions(-) diff --git a/packages/trendmicro/changelog.yml b/packages/trendmicro/changelog.yml index d657b146340..5dad01043b1 100644 --- a/packages/trendmicro/changelog.yml +++ b/packages/trendmicro/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Add ECS categorizations for anti-malware events. + type: enhancement + link: https://github.com/elastic/integrations/pull/9407 - version: "2.1.0" changes: - description: Use CEF name as `event.action` if no action is specified. diff --git a/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json b/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json index ddbe46971c6..b879727d579 100644 --- a/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json +++ b/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json @@ -183,6 +183,74 @@ "port": 65535, "mac": "11-AA-00-00-AA-00" } + }, + { + "@timestamp": "2024-01-22T10:19:47.482Z", + "event": { + "code": "4000000", + "severity": 6, + "action": "Reset", + "original": "<190>Jan 19 13:36:47 2K19-va CEF:0|Trend Micro|Deep Security Agent|20.0.1.690|1001251|Disallow Web Proxy Autodiscovery Protocol|6|cn1=4 cn1Label=Host ID dvchost=2K19-va.test.local TrendMicroDsTenant=814726098539 TrendMicroDsTenantId=16005 dmac=11-AA-00-00-AA-00 smac=00-BB-00-00-BB-00 TrendMicroDsFrameType=IP src=216.160.83.56 dst=81.2.69.144 in=150 proto=UDP spt=53 dpt=65535 cnt=1 act=Reset cn3=16 cn3Label=DPI Packet Position cs5=16 cs5Label=DPI Stream Position cs1=CVE-2007-5355 cs1Label=DPI Note cs6=8 cs6Label=DPI Flags TrendMicroDsPacketData=PUaBgwABAAAAAQAABHdwYWQEdGVzdAVsb2NhbAAAAQABAAAGAAEAAVF5AEABYQxyb290LXNlcnZlcnMDbmV0AAVuc3RsZAx2ZXJpc2lnbi1ncnMDY29tAHij+HwAAAcIAAADhAAJOoAAAVGA" + }, + "source": { + "port": 53, + "mac": "00-BB-00-00-BB-00", + "ip": "216.160.83.56", + "bytes": 150 + }, + "message": "Disallow Web Proxy Autodiscovery Protocol", + "cef": { + "name": "Disallow Web Proxy Autodiscovery Protocol", + "severity": "6", + "extensions": { + "deviceCustomString6": "8", + "sourceMacAddress": "00-BB-00-00-BB-00", + "deviceCustomString1Label": "DPI Note", + "destinationPort": 65535, + "deviceCustomString5Label": "DPI Stream Position", + "deviceCustomNumber3": 16, + "transportProtocol": "UDP", + "sourcePort": 53, + "deviceCustomNumber1": 4, + "TrendMicroDsFrameType": "IP", + "destinationMacAddress": "11-AA-00-00-AA-00", + "TrendMicroDsTenant": "814726098539", + "TrendMicroDsPacketData": "PUaBgwAAAAAQAABHdwYWQEdGVzdAVsb2NhbAAAAQABAAAGAAEAAVF5AEABYQxyb290LXNlcnZlcnMDbmV0AAVuc3RsZAx2ZXJpc2lnbi1ncnMDY29tAHij+HwAAAcIAAADhAAJOoAAAVGA", + "deviceAction": "Reset", + "destinationAddress": "81.2.69.144", + "deviceCustomString1": "CVE-2007-5355", + "sourceAddress": "216.160.83.56", + "deviceCustomString6Label": "DPI Flags", + "deviceHostName": "2K19-va.test.local", + "deviceCustomString5": "16", + "deviceCustomNumber1Label": "Host ID", + "deviceCustomNumber3Label": "DPI Packet Position", + "baseEventCount": 1, + "bytesIn": 150, + "TrendMicroDsTenantId": "16005" + }, + "version": "0", + "device": { + "vendor": "Trend Micro", + "product": "Deep Security Agent", + "version": "20.0.1.690", + "event_class_id": "4000001" + } + }, + "network": { + "transport": "udp" + }, + "observer": { + "product": "Deep Security Agent", + "version": "20.0.1.690", + "hostname": "2K19-va.test.local", + "vendor": "Trend Micro" + }, + "destination": { + "ip": "81.2.69.144", + "port": 65535, + "mac": "11-AA-00-00-AA-00" + } } ] } \ No newline at end of file diff --git a/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json-expected.json b/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json-expected.json index 902768d3b53..ac8cbd19a75 100644 --- a/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json-expected.json +++ b/packages/trendmicro/data_stream/deep_security/_dev/test/pipeline/test-trendmicro.json-expected.json @@ -345,6 +345,148 @@ "version": "0" } } + }, + { + "@timestamp": "2024-01-19T13:36:47.000Z", + "destination": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144", + "mac": "11-AA-00-00-AA-00", + "port": 65535 + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "reset", + "category": [ + "malware" + ], + "code": "4000001", + "kind": "alert", + "original": "<190>Jan 19 13:36:47 2K19-va CEF:0|Trend Micro|Deep Security Agent|20.0.1.690|1001251|Disallow Web Proxy Autodiscovery Protocol|6|cn1=4 cn1Label=Host ID dvchost=2K19-va.test.local TrendMicroDsTenant=814726098539 TrendMicroDsTenantId=16005 dmac=11-AA-00-00-AA-00 smac=00-BB-00-00-BB-00 TrendMicroDsFrameType=IP src=216.160.83.56 dst=81.2.69.144 in=150 proto=UDP spt=53 dpt=65535 cnt=1 act=Reset cn3=16 cn3Label=DPI Packet Position cs5=16 cs5Label=DPI Stream Position cs1=CVE-2007-5355 cs1Label=DPI Note cs6=8 cs6Label=DPI Flags TrendMicroDsPacketData=PUaBgwABAAAAAQAABHdwYWQEdGVzdAVsb2NhbAAAAQABAAAGAAEAAVF5AEABYQxyb290LXNlcnZlcnMDbmV0AAVuc3RsZAx2ZXJpc2lnbi1ncnMDY29tAHij+HwAAAcIAAADhAAJOoAAAVGA", + "severity": 6, + "type": [ + "info" + ] + }, + "host": { + "id": "4" + }, + "log": { + "syslog": { + "priority": 190 + } + }, + "message": "Disallow Web Proxy Autodiscovery Protocol", + "network": { + "community_id": "1:TJGLD3dNqhqQdTNdSwivLmyc8vs=", + "transport": "udp" + }, + "observer": { + "hostname": "2K19-va.test.local", + "product": "Deep Security Agent", + "vendor": "Trend Micro", + "version": "20.0.1.690" + }, + "related": { + "hosts": [ + "4" + ], + "ip": [ + "81.2.69.144", + "216.160.83.56" + ] + }, + "source": { + "bytes": 150, + "geo": { + "city_name": "Milton", + "continent_name": "North America", + "country_iso_code": "US", + "country_name": "United States", + "location": { + "lat": 47.2513, + "lon": -122.3149 + }, + "region_iso_code": "US-WA", + "region_name": "Washington" + }, + "ip": "216.160.83.56", + "mac": "00-BB-00-00-BB-00", + "port": 53 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "trendmicro": { + "deep_security": { + "action": "Reset", + "base_event_count": 1, + "bytes_in": 150, + "destination": { + "address": "81.2.69.144", + "mac_address": "11-AA-00-00-AA-00", + "port": 65535 + }, + "device": { + "custom_number1": { + "label": "Host ID", + "value": "4" + }, + "custom_number3": { + "label": "DPI Packet Position", + "value": 16 + }, + "custom_string1": { + "label": "DPI Note", + "value": "CVE-2007-5355" + }, + "custom_string5": { + "label": "DPI Stream Position", + "value": "16" + }, + "custom_string6": { + "label": "DPI Flags", + "value": "8" + }, + "product": "Deep Security Agent", + "vendor": "Trend Micro", + "version": "20.0.1.690" + }, + "deviceHostName": "2K19-va.test.local", + "event_category": "anti-malware-event", + "event_class_id": "4000001", + "name": "Disallow Web Proxy Autodiscovery Protocol", + "severity": 6, + "signature_id": 4000001, + "source": { + "address": "216.160.83.56", + "mac_address": "00-BB-00-00-BB-00", + "port": 53 + }, + "transport_protocol": "UDP", + "trendmicro": { + "ds_frame_type": "IP", + "ds_packet_data": "PUaBgwAAAAAQAABHdwYWQEdGVzdAVsb2NhbAAAAQABAAAGAAEAAVF5AEABYQxyb290LXNlcnZlcnMDbmV0AAVuc3RsZAx2ZXJpc2lnbi1ncnMDY29tAHij+HwAAAcIAAADhAAJOoAAAVGA", + "ds_tenant": "814726098539", + "ds_tenant_id": "16005" + }, + "version": "0" + } + } } ] } \ No newline at end of file diff --git a/packages/trendmicro/data_stream/deep_security/elasticsearch/ingest_pipeline/malware-event.yml b/packages/trendmicro/data_stream/deep_security/elasticsearch/ingest_pipeline/malware-event.yml index 8cac9e9553a..0297d9ac601 100644 --- a/packages/trendmicro/data_stream/deep_security/elasticsearch/ingest_pipeline/malware-event.yml +++ b/packages/trendmicro/data_stream/deep_security/elasticsearch/ingest_pipeline/malware-event.yml @@ -5,6 +5,22 @@ processors: field: trendmicro.deep_security.event_category tag: set_deep_security_event_category value: anti-malware-event + - script: + lang: painless + tag: script_to_set_ecs_categorization_in_malware_pipeline + description: Script to set ECS categorizations. + if: ctx.trendmicro?.deep_security?.signature_id != null + source: >- + def signatureIds = [4000000L, 4000001L, 4000002L, 4000003L, 4000010L, 4000011L, 4000012L, 4000013L, 4000020L, 4000030L]; + if (signatureIds.contains(ctx.trendmicro.deep_security.signature_id)) { + ctx.event.category = ["malware"]; + ctx.event.kind = "alert"; + ctx.event.type = ["info"]; + } + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' on_failure: - append: field: error.message diff --git a/packages/trendmicro/data_stream/deep_security/sample_event.json b/packages/trendmicro/data_stream/deep_security/sample_event.json index 2b772c484df..4190ede3dd5 100644 --- a/packages/trendmicro/data_stream/deep_security/sample_event.json +++ b/packages/trendmicro/data_stream/deep_security/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2020-09-21T07:21:11.000Z", "agent": { - "ephemeral_id": "28288d1c-681d-44d2-814c-bbd501a8aedb", - "id": "2e2f0b52-c190-4fb3-b530-9ea2bb568091", + "ephemeral_id": "2ea89e49-a391-4415-a8c4-c0ad743e691b", + "id": "e87ecfdf-7336-4275-96c5-a4ab24a8facc", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.11.0" @@ -16,7 +16,7 @@ "version": "8.11.0" }, "elastic_agent": { - "id": "2e2f0b52-c190-4fb3-b530-9ea2bb568091", + "id": "e87ecfdf-7336-4275-96c5-a4ab24a8facc", "snapshot": false, "version": "8.11.0" }, @@ -27,7 +27,7 @@ ], "code": "5000000", "dataset": "trendmicro.deep_security", - "ingested": "2024-02-21T05:54:09Z", + "ingested": "2024-03-20T09:48:02Z", "kind": "event", "original": "194 <86>2020-09-21T13:51:11+06:30 DeepSec Logs CEF:0|Trend Micro|Deep Security Agent|10.2.229|5000000|WebReputation|5|cn1=1 cn1Label=Host ID dvchost=hostname request=example.com msg=Blocked By Admin", "severity": 5, @@ -44,7 +44,7 @@ }, "log": { "source": { - "address": "192.168.32.7:58355" + "address": "192.168.224.7:54066" }, "syslog": { "priority": 86 diff --git a/packages/trendmicro/docs/README.md b/packages/trendmicro/docs/README.md index 790af4d5ae2..f3744df5c9a 100644 --- a/packages/trendmicro/docs/README.md +++ b/packages/trendmicro/docs/README.md @@ -59,8 +59,8 @@ An example event for `deep_security` looks as following: { "@timestamp": "2020-09-21T07:21:11.000Z", "agent": { - "ephemeral_id": "28288d1c-681d-44d2-814c-bbd501a8aedb", - "id": "2e2f0b52-c190-4fb3-b530-9ea2bb568091", + "ephemeral_id": "2ea89e49-a391-4415-a8c4-c0ad743e691b", + "id": "e87ecfdf-7336-4275-96c5-a4ab24a8facc", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.11.0" @@ -74,7 +74,7 @@ An example event for `deep_security` looks as following: "version": "8.11.0" }, "elastic_agent": { - "id": "2e2f0b52-c190-4fb3-b530-9ea2bb568091", + "id": "e87ecfdf-7336-4275-96c5-a4ab24a8facc", "snapshot": false, "version": "8.11.0" }, @@ -85,7 +85,7 @@ An example event for `deep_security` looks as following: ], "code": "5000000", "dataset": "trendmicro.deep_security", - "ingested": "2024-02-21T05:54:09Z", + "ingested": "2024-03-20T09:48:02Z", "kind": "event", "original": "194 <86>2020-09-21T13:51:11+06:30 DeepSec Logs CEF:0|Trend Micro|Deep Security Agent|10.2.229|5000000|WebReputation|5|cn1=1 cn1Label=Host ID dvchost=hostname request=example.com msg=Blocked By Admin", "severity": 5, @@ -102,7 +102,7 @@ An example event for `deep_security` looks as following: }, "log": { "source": { - "address": "192.168.32.7:58355" + "address": "192.168.224.7:54066" }, "syslog": { "priority": 86 diff --git a/packages/trendmicro/manifest.yml b/packages/trendmicro/manifest.yml index 7d877d9d873..7ee4aef99cc 100644 --- a/packages/trendmicro/manifest.yml +++ b/packages/trendmicro/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.0" name: trendmicro title: Trend Micro Deep Security -version: "2.1.0" +version: "2.2.0" description: Collect logs from Trend Micro Deep Security with Elastic Agent. type: integration categories: From 9c2cbdce154d25c680a602d405b0ecebbeefda7e Mon Sep 17 00:00:00 2001 From: Marc Guasch Date: Thu, 21 Mar 2024 17:48:01 +0100 Subject: [PATCH 22/33] [fortinet_fortigate] Add more sanitization for unwanted characters. (#9384) * [fortinet_fortigate] Add more sanitization for unwanted characters. * Add missing control character to regexp --- packages/fortinet_fortigate/changelog.yml | 5 + .../pipeline/test-fortinet-unsanitized.log | Bin 0 -> 1638 bytes ...est-fortinet-unsanitized.log-expected.json | 214 ++++++++++++++++++ .../elasticsearch/ingest_pipeline/default.yml | 6 +- packages/fortinet_fortigate/manifest.yml | 2 +- 5 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log create mode 100644 packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log-expected.json diff --git a/packages/fortinet_fortigate/changelog.yml b/packages/fortinet_fortigate/changelog.yml index 9990312d818..86dd290f650 100644 --- a/packages/fortinet_fortigate/changelog.yml +++ b/packages/fortinet_fortigate/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.25.0" + changes: + - description: Add more sanitization for unwanted characters. + type: enhancement + link: https://github.com/elastic/integrations/pull/9384 - version: "1.24.0" changes: - description: Update package spec to 3.0.3. diff --git a/packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log b/packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log new file mode 100644 index 0000000000000000000000000000000000000000..93ddb4826ff5d457b34586954bb39c7da153a33b GIT binary patch literal 1638 zcmdT@!H&}~5G@iX#Fe{cacwnr5~qpq1;G`e1wO!a9EeEm$Z=A2{|)g;`~u@7o3cHu zRsw{G5@%-Kcx*qf%@a7Mzdq+7@VC~4j2I0=@AC6t77hb4nob=_!6`r$A~YUfYNS2zc& zw~|^H8f_>UalUshV5-+mCmHP6jsfh1h>_0uAaUghwV{@@_amE=(eU4hgdgmydq`E58hHGR7u?1Y{|YYVc~>G%r#t zXT#x)4a68iUXRtqi&*y+FD9FS#Z+CVRgiSBy;jyn?vT+hC+w!mc}ZWZ+o{jybKkfj z7;Ltq>hX_>N2ReB>#~M2j&;dR3HelGg{C+=M0A0sTk;af(;wfz;kzN5H_u;fHk+6D zy)bj|3EFZtag5&TTp7=*dzulmW*C%Alo>YEBQ+zSNLi8Yv2%fO{tq;h6=|OR2dWW8 z#`lj=4g3Yw@ZVF-%<-xkwug&qa&gfN+N)wNf+2rSFOV*hxz-Dm*U*D{xv!D8t2Q1~ F%uj(3H=Y0h literal 0 HcmV?d00001 diff --git a/packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log-expected.json b/packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log-expected.json new file mode 100644 index 00000000000..7c9e00f6cf7 --- /dev/null +++ b/packages/fortinet_fortigate/data_stream/log/_dev/test/pipeline/test-fortinet-unsanitized.log-expected.json @@ -0,0 +1,214 @@ +{ + "expected": [ + { + "@timestamp": "2024-03-15T22:12:57.000-07:00", + "destination": { + "bytes": 1140, + "ip": "172.16.200.99", + "packets": 15, + "port": 123 + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "accept", + "category": [ + "network" + ], + "code": "0000000013", + "duration": 294000000000, + "kind": "event", + "original": "date=2024-03-15 time=22:12:57 devname=\"foo\" devid=\"bar\" eventtime=1710565976971231921 tz=\"-0700\" logid=\"0000000013\" type=\"traffic\" subtype=\"forward\" level=\"notice\" vd=\"root\" srcip=10.1.100.66 srcport=123 srcintf=\"srv1\" srcintfrole=\"lan\" dstip=172.16.200.99 dstport=123 dstintf=\"port13\" dstintfrole=\"wan\" srccountry=\"Reserved\" dstcountry=\"United States\" sessionid=40433307 proto=17 action=\"accept\" policyid=26 policytype=\"policy\" poluuid=\"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\" policyname=\"pol1\" service=\"NTP\" trandisp=\"snat\" transip=10.1.100.11 transport=60540 duration=294 sentbyte=1140 rcvdbyte=1140 sentpkt=15 rcvdpkt=15 appcat=\"unscanned\" srchwvendor=\"Baz\" devtype=\"Router\" mastersrcmac=\"ff:f0:ff:ff:2e:07\" srcmac=\"ff:ff:ff:1b:ff:07\" srcserver=0 \u0004��\u0000 \u0000D\f<\u0000\u0000\u0000$\u0000\u0000\u0000\u0015e��\u0001\u0000\u0000\u0000=���\u0001\u0000\u0000\u0000��������", + "outcome": "success", + "start": "2024-03-15T22:12:56.971-07:00", + "timezone": "-0700", + "type": [ + "connection", + "end", + "allowed" + ] + }, + "fortinet": { + "firewall": { + "action": "accept", + "devtype": "Router", + "dstcountry": "United States", + "dstintfrole": "wan", + "mastersrcmac": "ff:f0:ff:ff:2e:07", + "sessionid": "40433307", + "srccountry": "Reserved", + "srchwvendor": "Baz", + "srcintfrole": "lan", + "srcserver": "0", + "subtype": "forward", + "trandisp": "snat", + "transip": "10.1.100.11", + "type": "traffic", + "vd": "root" + } + }, + "log": { + "level": "notice" + }, + "network": { + "bytes": 2280, + "direction": "internal", + "iana_number": "17", + "packets": 30, + "protocol": "ntp", + "transport": "udp" + }, + "observer": { + "egress": { + "interface": { + "name": "port13" + } + }, + "ingress": { + "interface": { + "name": "srv1" + } + }, + "name": "foo", + "product": "Fortigate", + "serial_number": "bar", + "type": "firewall", + "vendor": "Fortinet" + }, + "related": { + "ip": [ + "10.1.100.66", + "172.16.200.99", + "10.1.100.11" + ] + }, + "rule": { + "category": "unscanned", + "id": "26", + "name": "pol1", + "ruleset": "policy", + "uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "source": { + "bytes": 1140, + "ip": "10.1.100.66", + "mac": "FF-FF-FF-1B-FF-07", + "nat": { + "ip": "10.1.100.11", + "port": 60540 + }, + "packets": 15, + "port": 123 + }, + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2024-03-16T10:16:59.000-07:00", + "destination": { + "bytes": 76, + "ip": "172.16.200.99", + "packets": 1, + "port": 123 + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "accept", + "category": [ + "network" + ], + "code": "0000000013", + "duration": 180000000000, + "kind": "event", + "original": "date=2024-03-16 time=10:16:59 devname=\"foo\" devid=\"bar\" eventtime=1710609419481230122 tz=\"-0700\" logid=\"0000000013\" type=\"traffic\" subtype=\"forward\" level=\"notice\" vd=\"root\" srcip=10.1.100.66 srcport=59475 srcintf=\"srv1\" srcintfrole=\"lan\" dstip=172.16.200.99 dstport=123 dstintf=\"port13\" dstintfrole=\"wan\" srccountry=\"Reserved\" dstcountry=\"United States\" sessionid=40469528 proto=17 action=\"accept\" policyid=20 policytype=\"policy\" poluuid=\"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\" policyname=\"pol2\" service=\"NTP\" trandisp=\"snat\" transip=10.1.100.11 transport=59475 duration=180 sentbyte=76 rcvdbyte=76 sentpkt=1 rcvdpkt=1 appcat=\"unscanned\" srchwvendor=\"Baz\" devtype=\"Router\" mastersrcmac=\"ff:f0:04:ff:ff:07\" srcmac=\"ff:f0:04:ff:ff:07\" srcserver=0 \u0004��\u0000 \u0000D\f<\u0000\u0000\u0000$\u0000\u0000\u0000=���\u0001\u0000\u0000\u0000E���\u0001\u0000\u0000\u0000��������", + "outcome": "success", + "start": "2024-03-16T10:16:59.481-07:00", + "timezone": "-0700", + "type": [ + "connection", + "end", + "allowed" + ] + }, + "fortinet": { + "firewall": { + "action": "accept", + "devtype": "Router", + "dstcountry": "United States", + "dstintfrole": "wan", + "mastersrcmac": "ff:f0:04:ff:ff:07", + "sessionid": "40469528", + "srccountry": "Reserved", + "srchwvendor": "Baz", + "srcintfrole": "lan", + "srcserver": "0", + "subtype": "forward", + "trandisp": "snat", + "transip": "10.1.100.11", + "type": "traffic", + "vd": "root" + } + }, + "log": { + "level": "notice" + }, + "network": { + "bytes": 152, + "direction": "internal", + "iana_number": "17", + "packets": 2, + "protocol": "ntp", + "transport": "udp" + }, + "observer": { + "egress": { + "interface": { + "name": "port13" + } + }, + "ingress": { + "interface": { + "name": "srv1" + } + }, + "name": "foo", + "product": "Fortigate", + "serial_number": "bar", + "type": "firewall", + "vendor": "Fortinet" + }, + "related": { + "ip": [ + "10.1.100.66", + "172.16.200.99", + "10.1.100.11" + ] + }, + "rule": { + "category": "unscanned", + "id": "20", + "name": "pol2", + "ruleset": "policy", + "uuid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "source": { + "bytes": 76, + "ip": "10.1.100.66", + "mac": "FF-F0-04-FF-FF-07", + "nat": { + "ip": "10.1.100.11", + "port": 59475 + }, + "packets": 1, + "port": 59475 + }, + "tags": [ + "preserve_original_event" + ] + } + ] +} \ No newline at end of file diff --git a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/default.yml index 0f4aff06dcd..e88a2aa80a7 100644 --- a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -28,7 +28,7 @@ processors: } - gsub: field: syslog5424_sd - pattern: "\u0000" + pattern: "[\u0000-\u001F\u007F]" replacement: "" - script: lang: painless @@ -80,7 +80,9 @@ processors: source: | def fw = ctx.fortinet?.firewall; if (fw != null) { - fw.entrySet().removeIf(entry -> entry.getValue() == "N/A"); + // We will remove any keys that are non-words to avoid polluting documents + def pat = /\W+/; + fw.entrySet().removeIf(entry -> entry.getValue() == "N/A" || pat.matcher(entry.getKey()).find()); } - set: field: observer.vendor diff --git a/packages/fortinet_fortigate/manifest.yml b/packages/fortinet_fortigate/manifest.yml index d93d0b80546..db1db2a16d4 100644 --- a/packages/fortinet_fortigate/manifest.yml +++ b/packages/fortinet_fortigate/manifest.yml @@ -1,6 +1,6 @@ name: fortinet_fortigate title: Fortinet FortiGate Firewall Logs -version: "1.24.0" +version: "1.25.0" description: Collect logs from Fortinet FortiGate firewalls with Elastic Agent. type: integration format_version: "3.0.3" From 821ef6a05a41a1382848e6d65ba20ce2f03bbd0f Mon Sep 17 00:00:00 2001 From: shashank-elastic <91139415+shashank-elastic@users.noreply.github.com> Date: Thu, 21 Mar 2024 22:18:59 +0530 Subject: [PATCH 23/33] [Security Rules] Update security rules package to v8.13.2-beta.1 (#9412) Co-authored-by: protectionsmachine <72879786+protectionsmachine@users.noreply.github.com> --- .../security_detection_engine/changelog.yml | 5 + ...40285-b827-4aee-aa09-8113f58a08f3_111.json | 141 ++++++++++++ ...6b315-b566-482f-866c-1d8e2477ba16_105.json | 90 ++++++++ ...ff9ea-85e7-42e3-99d2-bbb7069e02eb_105.json | 91 ++++++++ ...4576a-7480-4284-9327-548a806b5e48_208.json | 93 ++++++++ ...a4563-ec10-4974-b7de-12e65aa4f9b3_106.json | 86 +++++++ ...24bd9-d23f-4ec1-8674-3cf1a21e130b_105.json | 89 ++++++++ ...889c4-2686-4583-a7df-67f89c292f2c_108.json | 106 +++++++++ ...35a6f21-4092-471d-9cda-9e379f459b1e_2.json | 88 ++++++++ ...369e8a6-0fa7-4e7a-961a-53180a4c966e_2.json | 94 ++++++++ ...3c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3.json | 105 +++++++++ ...5f22a-2336-45fa-ba07-618a5942e22c_109.json | 152 +++++++++++++ ...a0387-f3b5-4ba5-8245-8002cca2bd08_109.json | 106 +++++++++ ...4fb9d-90b9-4234-a411-82a546dc1343_109.json | 99 +++++++++ ...358de-aa6d-4f6c-89e6-78f74018b43b_109.json | 128 +++++++++++ ...5cad2fb-200c-407f-b472-02ea8c9e5e4a_4.json | 99 +++++++++ ...5a668-7b51-4a67-93ab-e9af405c9ef3_108.json | 85 +++++++ ...5c542-1b96-4335-9b47-126582d2c19a_111.json | 104 +++++++++ ...678bc9c-b71a-433b-87e6-2f664b6b3131_3.json | 61 +++++ ...ceabf-adca-48af-ac79-ffdf4c3b1e9a_109.json | 104 +++++++++ ...464f9-f30d-4029-8c03-0ed237fffec7_109.json | 104 +++++++++ ...787daa6-f8c5-453b-a4ec-048037f6c1cd_7.json | 109 +++++++++ ...7b1ef73-1fde-4a49-a34a-5dd40011b076_7.json | 113 ++++++++++ ...bc66a-5d56-4d1f-8071-817671716db9_106.json | 107 +++++++++ ...e3f8c-6f80-485c-91eb-5b112cb79b28_106.json | 99 +++++++++ ...fa162-e790-4d85-9aeb-4fea04188adb_106.json | 117 ++++++++++ ...859355c-0f08-4b43-8ff5-7d2a4789fc08_3.json | 116 ++++++++++ ...b068f-84ac-485d-8a55-7dd9e006715f_107.json | 105 +++++++++ ...9bc6c90-7501-494d-b015-5d988dc3f233_4.json | 108 +++++++++ ...ab319ef-92b8-4c7f-989b-5de93c852e93_4.json | 80 +++++++ ...abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6.json | 121 ++++++++++ ...f3da5-b5ec-47d1-908b-6ebb74814289_109.json | 106 +++++++++ ...b803267-74c5-444d-ae29-32b5db2d562a_5.json | 120 ++++++++++ ...c093569-dff9-42b6-87b1-0242d9f7d9b4_2.json | 91 ++++++++ ...c41e478-5263-4c69-8f9e-7dfd2c22da64_6.json | 142 ++++++++++++ ...ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108.json | 93 ++++++++ ...6487d-8069-4888-9ddd-61b52490cebc_105.json | 98 ++++++++ ...9150b-96f8-467c-a86d-a67a3378ce77_108.json | 92 ++++++++ ...ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109.json | 126 +++++++++++ ...2157a-8e96-4a95-a6e3-5faae5081a74_105.json | 83 +++++++ ...9980b-4250-4a50-a509-69294c14e84b_108.json | 101 +++++++++ ...d35e4-925e-4959-ab24-911be207ee6f_110.json | 109 +++++++++ ...f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3.json | 99 +++++++++ ...3cb9a-1931-48c2-8cd0-f173fd3e5283_208.json | 101 +++++++++ ...84c42-873d-41a2-a4ed-08d74d352d01_106.json | 93 ++++++++ ...500bb-a28f-418e-ba29-ca4c8d1a9f2f_106.json | 94 ++++++++ ...0dcdb-0a0a-4a79-91d8-9b84616edebd_109.json | 104 +++++++++ ...8ae09-5aff-460a-9f2f-455cd0ac4d8e_110.json | 138 ++++++++++++ ...dd9713-0ec6-4110-9707-32daae1ee68c_11.json | 124 +++++++++++ ...a6bec-ebde-4d71-a8e9-784948f8e3e9_111.json | 112 ++++++++++ ...224da6c-0326-4b4f-8454-68cdc5ae542b_3.json | 66 ++++++ ...468bf-cab1-4637-99ea-fdf3780a4609_107.json | 103 +++++++++ ...07955-1674-44f7-86b5-c35da0a6f41a_110.json | 107 +++++++++ ...7384f-00f3-44d5-9a8c-2373ba071e92_107.json | 101 +++++++++ ...3e908b9-7bf0-4235-abc9-b5deb500d0ad_3.json | 91 ++++++++ ...d1aa9-ebfd-4cf9-a463-0ac59ec55204_108.json | 119 ++++++++++ ...8ba77-1c13-4274-88fe-6bd14133861e_110.json | 142 ++++++++++++ ...0b7a7-9c34-4869-b25b-fa6518414899_111.json | 100 +++++++++ ...acaa0-5b90-466b-acab-63435a59701a_107.json | 87 ++++++++ ...66727ab-6768-4e26-b80c-948b228ffc06_5.json | 99 +++++++++ ...04215-2c95-4ac8-bf5c-12354e047192_106.json | 110 +++++++++ ...52c14-7883-47af-8745-9357803f0d4c_111.json | 149 +++++++++++++ ...ac1a1-21ee-4ca6-b720-458e3855d046_109.json | 120 ++++++++++ ...7b0a495-4d9f-414c-8ad0-92f018b8e001_9.json | 130 +++++++++++ ...7f6a5-5bc9-4e1f-92bf-13632d24384d_108.json | 94 ++++++++ ...8a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3.json | 61 +++++ ...93549e8-bb9e-466a-a7f9-7e783f5cb5a6_4.json | 97 ++++++++ ...9e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3.json | 61 +++++ ...075b0-7479-450e-8fe7-b8b8438ac570_108.json | 107 +++++++++ ...9181a-492b-4c01-8b16-fa0735786b2b_108.json | 100 +++++++++ ...1abcc-4d9f-4b08-a7f5-316f5f94b973_107.json | 87 ++++++++ ...27fa22-7727-4dd3-81c0-de6da5555feb_10.json | 99 +++++++++ ...a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109.json | 122 ++++++++++ ...4dd64-7e6c-4bad-ac73-a5014ee37042_113.json | 171 ++++++++++++++ ...01db9-be24-4bef-8e7c-e923f0ff78ab_107.json | 122 ++++++++++ ...76579-3380-4095-ad38-e596a01bc64f_109.json | 137 ++++++++++++ ...d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6.json | 87 ++++++++ ...c51f6-ba26-49e7-9ef4-2655abb2361e_108.json | 143 ++++++++++++ ...fdd62-cd8d-426e-a246-81a37751bb2b_107.json | 128 +++++++++++ ...df1152b-610a-4f48-9d7a-504f6ee5d9da_3.json | 80 +++++++ ...e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6.json | 193 ++++++++++++++++ ...f0a69c0-3392-4adf-b7d5-6012fd292da8_8.json | 106 +++++++++ ...3b299-fbb5-4657-a937-1d746f2c711a_110.json | 118 ++++++++++ ...200f1-a99b-43fb-88ed-f65a45c4972c_109.json | 116 ++++++++++ ...02829f6-0271-4e88-b882-11a655c590d4_2.json | 99 +++++++++ ...ab79b-239b-4aa5-8e54-fc50623ee8e4_109.json | 102 +++++++++ ...57e4f-d1de-4b92-ae69-142e27a4342a_107.json | 97 ++++++++ ...dbe77-01ed-4954-8d44-1e5751cb20de_110.json | 109 +++++++++ ...138bb70-5a5e-42fd-be5e-b38edf6a6777_2.json | 126 +++++++++++ ...20be143-5c67-4fdb-b6ce-dd6826d024fd_6.json | 117 ++++++++++ ...5b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205.json | 125 +++++++++++ ...9f03c-f53f-40fa-834b-40c5983fc41f_109.json | 98 ++++++++ ...377946d-0f01-4957-8812-6878985f515d_2.json | 79 +++++++ ...3bcd283-2bc0-4db2-81d4-273fc051e5c0_1.json | 93 ++++++++ ...24a80-5a4a-4b8a-991e-6ab390465c4f_107.json | 123 +++++++++++ ...59be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4.json | 111 ++++++++++ ...5d917c4-aa3c-4111-974c-286c0312ff95_3.json | 117 ++++++++++ ...605aa59-29ac-4662-afad-8d86257c7c91_5.json | 104 +++++++++ ...db8f5-fc73-4d0d-b434-6483b56372e2_110.json | 129 +++++++++++ ...68dba-ce29-497b-8e13-b4fde1db5a2d_106.json | 97 ++++++++ ...7071ea3-e806-4697-8abc-e22c92aa4293_5.json | 103 +++++++++ ...724808c-ba5d-48b2-86d2-0002103df753_4.json | 110 +++++++++ ...a6484-2663-46db-a532-ef734bf9a796_105.json | 91 ++++++++ ...2264c-6fb9-4d9d-9014-b416eed21254_108.json | 143 ++++++++++++ ...7c15a-91f8-4c3d-8b9e-1f99cc030a51_105.json | 94 ++++++++ ...0c9c2-bcd7-4d6e-9eba-faf3891ba450_111.json | 131 +++++++++++ ...6446a-34e6-435b-9fb5-f8f040bfa7ed_110.json | 124 +++++++++++ ...8738f9f-7427-4d23-bc69-756708b5f624_8.json | 101 +++++++++ ...8bc620d-b2f7-4132-b372-f77953881d05_2.json | 152 +++++++++++++ ...8d39238-0c01-420a-b77a-24e5a7378663_5.json | 102 +++++++++ ...aca65-e94d-403b-ba0f-62f320e63f51_111.json | 132 +++++++++++ ...7d495-59bd-4250-b395-c29409b76086_110.json | 166 ++++++++++++++ ...a0de9-937a-4189-94c0-3e847c8b13e4_211.json | 117 ++++++++++ ...9f0cf93-d17c-4b12-b4f3-a433800539fa_3.json | 100 +++++++++ ...a692072-d78d-42f3-a48a-775677d79c4e_6.json | 101 +++++++++ ...b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6.json | 94 ++++++++ ...78aa2-9c56-48de-b139-f169bf99cf86_110.json | 103 +++++++++ ...7e5d7-08b9-43b2-b58a-0270d65ac85b_109.json | 134 +++++++++++ ...c29a4-f170-42f8-a3d8-2ceebc18eb6a_108.json | 104 +++++++++ ...043ed-5bda-4caf-801c-c1feb7410504_209.json | 103 +++++++++ ...480be-1263-4d9c-8672-172928f6789a_211.json | 105 +++++++++ ...ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3.json | 113 ++++++++++ ...10e77-c144-4e69-afb7-344e7127abd0_106.json | 88 ++++++++ ...e835d-01e5-48ca-b9fc-7a61f7f11902_109.json | 95 ++++++++ ...9e96a-b67c-455a-afe4-de6183431d0d_110.json | 134 +++++++++++ ...c8076-291e-41e9-81e4-e3fcbc97ae5e_109.json | 89 ++++++++ ...f4939-0b34-40c2-a0a3-844eb7889f43_110.json | 110 +++++++++ ...a1226-5720-437d-9c20-e0029deb6194_109.json | 87 ++++++++ ...f95540c-923e-4f57-9dae-de30169c68b9_2.json | 90 ++++++++ ...a1f1e-b6db-47fa-994b-1512743847eb_110.json | 113 ++++++++++ ...0bfddd7-2954-4c9d-bbc6-19a99ca47e23_8.json | 101 +++++++++ ...0e1e9f2-eb9c-439f-aff6-1e3068e99384_2.json | 98 ++++++++ ...4c719-f2b4-41f6-a9bd-fce93c2eaf62_111.json | 122 ++++++++++ ...2300431-c2d5-432d-8ec8-0e03f9924756_1.json | 134 +++++++++++ ...5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108.json | 88 ++++++++ ...4675e-6c49-4ace-80f9-97c9259dca2e_110.json | 143 ++++++++++++ ...3a6752b-da5e-45f8-b13a-5f094c09522f_6.json | 94 ++++++++ ...30ba2-c859-4c98-8b7f-c19159ea0e58_106.json | 98 ++++++++ ...5c8bb-3bd5-40f4-ae32-b7cd589d5372_109.json | 97 ++++++++ ...5a3b253-eea8-46f0-abd3-68bdd47e6e3d_3.json | 60 +++++ ...f0dd8-092d-4a83-88c1-5151a804f31b_110.json | 103 +++++++++ ...8577a-d196-11ec-90b0-f661ea17fbce_109.json | 97 ++++++++ ...8e048-d888-4f61-a8b9-0f9e2e40f317_106.json | 98 ++++++++ ...6c48a0c-c63a-4cbc-aee1-8cac87db31a9_3.json | 61 +++++ ...638ea-909d-4f94-9248-edd21e4a9906_106.json | 88 ++++++++ ...8e0e3-1850-4850-a411-2e8c5ba40ba8_110.json | 85 +++++++ ...48d29-3d5d-42e3-8aec-be832aaaf8eb_107.json | 88 ++++++++ ...945f3-d39a-4e6f-8bcb-9656c2031438_106.json | 88 ++++++++ ...a6001a0-0939-4bbe-86f4-47d8faeb7b97_7.json | 93 ++++++++ ...7900d-e793-49e8-968f-c90dc3526aa1_109.json | 91 ++++++++ ...6deaa-fbd4-433a-ae21-3e892f95624f_111.json | 120 ++++++++++ ...d3aa8f9-12af-441f-9344-9f31053e316d_5.json | 114 ++++++++++ ...e0561b5-3fac-4461-84cc-19163b9aaa61_3.json | 61 +++++ ...d15c6-1509-479a-b125-21718372157e_106.json | 87 ++++++++ ...bdc9e-e4f2-43fa-8cca-63802125e582_109.json | 102 +++++++++ ...032b2-45d8-4406-bc79-7ad1eabb2c72_208.json | 113 ++++++++++ ...ee4f0-182a-40a8-a835-102c68a4175d_106.json | 87 ++++++++ ...f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5.json | 111 ++++++++++ ...f9fe2-d095-11ec-95dc-f661ea17fbce_110.json | 98 ++++++++ ...f4d7734-2151-4481-b394-09d7c6c91f75_3.json | 94 ++++++++ ...f4e2dba-828a-452a-af35-fe29c5e78969_3.json | 61 +++++ ...0155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3.json | 66 ++++++ ...ef0d3-8259-40c9-a5b6-d48354712e49_107.json | 113 ++++++++++ ...dbcc8-6561-44d9-afc8-eefdbfe0cccd_107.json | 90 ++++++++ ...1284ba3-ed1a-4598-bfba-a97f75d9aba2_2.json | 92 ++++++++ ...697ae-e468-4093-a93d-59661fa619ec_110.json | 101 +++++++++ ...638a1-8ab6-4f8e-86d9-466317ef2db5_106.json | 92 ++++++++ ...2eeee3d-947f-46d3-a14d-7036b962c266_9.json | 121 ++++++++++ ...3d6ec12-2b1c-47b5-8f35-e9de65551d3b_6.json | 100 +++++++++ ...e2db4-bc7f-4c96-a068-65b78da59bde_109.json | 103 +++++++++ ...fc462c-1159-4fa8-b1b7-9b6296ab4f96_10.json | 107 +++++++++ ...273fb-1dca-457d-9855-bcb302180c21_110.json | 117 ++++++++++ ...2fd2c-cfae-47ed-a543-9bed37657aa6_108.json | 113 ++++++++++ ...74fd20e-14cc-49c5-8160-d9ab4ba16c8b_9.json | 102 +++++++++ ...22836-4a16-4b35-beee-98f6c4ee9bf2_110.json | 123 +++++++++++ ...76567-d58a-4fed-b32b-21f571e28910_106.json | 113 ++++++++++ ...c4daf-b0c6-49e0-adf3-0bfa93231d6b_108.json | 115 ++++++++++ ...8819484-9826-4083-9eba-1da74cd0eaf2_4.json | 94 ++++++++ ...8b3d2e3-f4e8-41e6-95e6-9b2091228db3_8.json | 131 +++++++++++ ...8b6edfc-079d-4907-b43c-baffa243270d_9.json | 116 ++++++++++ ...7f54d-c29e-4430-93a9-9db6b5892270_107.json | 84 +++++++ ...c9452-e1fd-4513-a376-10a1a26d2c83_106.json | 89 ++++++++ ...94ebba4-ecb7-4be4-8c6f-654c686549ad_6.json | 100 +++++++++ ...a99ac6f-9a54-4ba5-a64f-6eb65695841b_5.json | 117 ++++++++++ ...38734-3793-4fda-bd42-ceeada0be8f9_109.json | 99 +++++++++ ...b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4.json | 89 ++++++++ ...b95ecea-7225-4690-9938-2a2c0bad9c99_3.json | 60 +++++ ...1c1af-79d4-4d37-9efa-6e0240640242_108.json | 93 ++++++++ ...c59cff1-b78a-41b8-a9f1-4231984d1fb6_9.json | 129 +++++++++++ ...d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6.json | 142 ++++++++++++ ...13d6e-904f-4636-81d8-6ab14b4e6ae9_106.json | 81 +++++++ ...76544-f0e5-486a-8f84-eae0b6063cdc_111.json | 127 +++++++++++ ...85dc8a-3e41-40d8-bc28-91af7ac6cf60_10.json | 123 +++++++++++ ...ec47004-b34a-42e6-8003-376a123ea447_8.json | 104 +++++++++ ...493fc-d637-4a36-80ff-ac84937e5461_110.json | 134 +++++++++++ ...678a9-3a4f-41fb-9fea-f85a6e0a0dff_107.json | 99 +++++++++ ...9d835-40e1-452d-8230-17c147cafad8_108.json | 91 ++++++++ ...124e65f-df97-4471-8dcb-8e3953b3ea97_2.json | 86 +++++++ ...f0ffd-b317-4b9c-9494-92ce861f22c7_107.json | 106 +++++++++ ...121ce-c7b6-474a-8237-68ff71672379_105.json | 93 ++++++++ ...e96fb-9e52-4dad-b0ba-99b54440fc9a_107.json | 155 +++++++++++++ ...21fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7.json | 99 +++++++++ ...76a86-ee86-4967-97ae-1a05f55816f0_112.json | 138 ++++++++++++ ...aab7b-b51c-441a-89ce-4387b3aea886_108.json | 133 +++++++++++ ...178da-92ea-43ce-94c2-8877a826783d_106.json | 93 ++++++++ ...3617418-17b4-4e9c-8a2c-8deb8086ca4b_8.json | 109 +++++++++ ...397080f-34e5-449b-8e9c-4c8083d7ccc6_4.json | 85 +++++++ ...26770-9cbd-40c5-8b57-61d01a325e14_109.json | 111 ++++++++++ ...02e45-3467-49a4-8abc-529f2c8cfb80_106.json | 127 +++++++++++ ...4a81f68-5f2a-421e-8eed-f888278bb712_8.json | 109 +++++++++ ...3d186-0461-4dc3-9b33-2dc5c7473936_108.json | 104 +++++++++ ...2bf58-2a39-4c58-a384-c8b1978153c2_108.json | 94 ++++++++ ...551c6-333b-4665-ab7e-5d14a59715ce_108.json | 137 ++++++++++++ ...6004189-4e69-4a39-b4a9-195329d226e9_3.json | 66 ++++++ ...57cde-d923-4b88-adee-c61b3f3b5dc3_104.json | 79 +++++++ ...c2b44-7a21-4818-955f-8d4737967d2e_106.json | 92 ++++++++ ...d6ca5-75ba-4c82-9b13-add25353471c_107.json | 82 +++++++ ...2e9b5-4803-4e44-a0a4-a52dc79d57fe_110.json | 104 +++++++++ ...ec21e-56fe-4065-91d8-45eb8224fe77_108.json | 117 ++++++++++ ...add16-df76-42bb-af8e-c979bfb39a59_110.json | 102 +++++++++ ...a72ca-d968-4f34-b9f7-bea51d75eb50_110.json | 116 ++++++++++ ...c2aa5-6718-427c-a845-5f3ac5af00ba_103.json | 77 +++++++ ...6d58b-a0d3-412d-b3b8-0981a9400607_110.json | 98 ++++++++ ...0658c-2107-4afc-91af-e0e55b7f7184_105.json | 95 ++++++++ ...4d01d-7ac8-4545-914c-b687c2cf66b3_108.json | 137 ++++++++++++ ...a3d5447-31c9-409a-aed1-72f9921594fd_8.json | 131 +++++++++++ ...ae02ebc-a5de-4eac-afe6-c88de696477d_2.json | 105 +++++++++ ...4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106.json | 99 +++++++++ ...e924b-6ceb-4633-980e-1bde8cdb40c5_108.json | 105 +++++++++ ...3c9fb-9945-4d2f-9568-fd690fee3fba_108.json | 88 ++++++++ ...b06a27f-ad72-4499-91db-0c69667bffa5_5.json | 129 +++++++++++ ...b18eef4-842c-4b47-970f-f08d24004bde_5.json | 93 ++++++++ ...4a95d-5a08-48eb-80db-4c3a63ec78a8_107.json | 96 ++++++++ ...c351f54-4187-4ad8-abc8-29b0cfbef8b1_2.json | 94 ++++++++ ...c602cba-ae00-4488-845d-24de2b6d8055_1.json | 104 +++++++++ ...6f4c58-b381-452a-8976-f1b1c6aa0def_10.json | 124 +++++++++++ ...c895b4f-9133-4e68-9e23-59902175355c_6.json | 115 ++++++++++ ...c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7.json | 82 +++++++ ...55388-a19c-47c7-8ec4-f41656c2fded_106.json | 137 ++++++++++++ ...8e1f7-0050-4afc-b2df-904e40b2f5ae_109.json | 85 +++++++ ...cf6397e-eb91-4f31-8951-9f0eaa755a31_8.json | 120 ++++++++++ ...265bf-dea9-41a9-92ad-48a8dcd05080_107.json | 81 +++++++ ...d6907-0747-4d5d-9b24-e4a18853dc0a_107.json | 141 ++++++++++++ ...f8cfc-0d03-443e-a167-2b0597ce0965_106.json | 79 +++++++ ...52599-ddec-4e14-bad1-28aa42404388_105.json | 94 ++++++++ ...3adec-1df9-4104-9c75-b97d9f078b25_105.json | 90 ++++++++ ...949a1-312f-4e04-bb55-3a79b8c95267_107.json | 84 +++++++ ...1766ef9-48a5-4247-ad74-3349de7eb2ad_3.json | 107 +++++++++ ...c3638-40a3-44b2-855a-985636ca985e_113.json | 160 ++++++++++++++ ...29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110.json | 102 +++++++++ ...ecb68-fa81-4601-90b5-f8cd661e4520_106.json | 149 +++++++++++++ ...2b68eb2-1e47-4da7-85b6-8f478db5b272_4.json | 112 ++++++++++ ...65ec3-43b1-45b0-8f2d-45b34291dc44_107.json | 92 ++++++++ ...2255d-f468-45ea-a5b3-d3a7de1331ae_106.json | 92 ++++++++ ...4cfca9e-0f6f-4048-8251-9ec56a055e9e_5.json | 118 ++++++++++ ...545b4-1a90-4f45-85ce-2ebd7c6a15d0_107.json | 98 ++++++++ ...641a5af-fb7e-487a-adc4-9e6503365318_6.json | 82 +++++++ ...e7a4f-c58e-4fc6-bc83-87a7572670ac_105.json | 77 +++++++ ...6712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7.json | 104 +++++++++ ...6c058f3-99f4-4d18-952b-43348f2577a0_3.json | 101 +++++++++ ...a12b1-ac83-40eb-814c-07ed1d82b7b9_106.json | 92 ++++++++ ...70b3b5a-35e5-42db-bd36-6c5b9b4b7313_9.json | 94 ++++++++ ...239ea-c1bc-4467-a6d3-b9e2cc7f676d_105.json | 91 ++++++++ ...8443a-4ff3-4a70-916d-3cfa3ae9f02b_112.json | 101 +++++++++ ...9c821-011d-43bd-bd5b-acff00257226_106.json | 101 +++++++++ ...554fc-0777-47ce-8c9b-3d01f198d7f8_105.json | 97 ++++++++ ...21d85-d0dc-48b3-865f-43291ca2c4f2_109.json | 138 ++++++++++++ ...b9d57-e4d5-4357-ad17-9c334609d79a_106.json | 143 ++++++++++++ ...56fdc-7ffa-4419-8e95-81641bd6f845_108.json | 144 ++++++++++++ ...251fb-a5d6-4035-b5ec-40438bd829ff_108.json | 93 ++++++++ ...ab9cc-4023-4d17-b5df-1a3e16882ce7_109.json | 134 +++++++++++ ...ce640-e631-4870-ba8e-5fdda09325db_110.json | 134 +++++++++++ ...ace94ba-f02c-4d55-9f53-87d99b6f9af4_7.json | 95 ++++++++ ...4d470-9036-4cc0-a27c-6d90bbfe81ab_208.json | 124 +++++++++++ ...1779c-560f-4b68-a8f1-11009b27fe63_107.json | 123 +++++++++++ ...d8685a1-94fa-4ef7-83de-59302e7c4ca8_4.json | 95 ++++++++ ...b351e-a531-4bdc-b73e-7034d6eed7ff_107.json | 101 +++++++++ ...41894-66c3-4df7-ad6b-2c5074eb3df8_107.json | 124 +++++++++++ ...55c81-e2ba-42f2-a134-bccf857ba922_110.json | 116 ++++++++++ ...ee947e9-de7e-4281-a55d-09289bdf947e_6.json | 99 +++++++++ ...12c9c-0dbd-4a1a-bc44-1467502c9cf6_107.json | 117 ++++++++++ ...a1af4-27fd-4f26-bd03-50b6af6b9e24_106.json | 111 ++++++++++ ...f82c2-7741-4f9b-85b8-d06aeb853f4f_209.json | 106 +++++++++ ...ccb61-e19b-452f-b104-79a60e546a95_113.json | 98 ++++++++ ...5cb27-eca5-4151-bb47-64bc3f883270_108.json | 106 +++++++++ ...1d6a53d-abbd-40df-afee-c21fff6aafb0_3.json | 117 ++++++++++ ...999d0-7ab2-44bf-b328-6e63367b9b29_105.json | 90 ++++++++ ...5ddf1-6c8e-41ce-818f-48bea6bcaed8_110.json | 130 +++++++++++ ...3e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106.json | 97 ++++++++ ...2c127-89fb-4209-a8f6-f9944dfd7e02_107.json | 90 ++++++++ ...4c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10.json | 129 +++++++++++ ...d3f91-3f12-448c-b65f-20123e9e9e8c_110.json | 93 ++++++++ ...db638-abf7-42d5-be22-4a70b0bf7241_106.json | 78 +++++++ ...6e4d92b-61c1-4a95-ab61-5fd94179a1ee_9.json | 131 +++++++++++ ...d43b7-3480-4dd9-8ad7-8bd36bfad92f_109.json | 109 +++++++++ ...e0c4d-b998-41e5-a62e-c7901fd7f470_110.json | 142 ++++++++++++ ...787362c-90ff-4b1a-b313-8808b1020e64_2.json | 131 +++++++++++ ...9124edf-30a8-4d48-95c4-11522cad94b1_3.json | 157 +++++++++++++ ...97b31-480e-4e63-a7f4-ede42bf2c6de_108.json | 100 +++++++++ ...acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5.json | 96 ++++++++ ...bfc26-81d2-435e-965c-d722ee397ef1_110.json | 120 ++++++++++ ...58110-ae13-439b-8192-357b0fcfa9d7_208.json | 98 ++++++++ ...bb3ac-e533-41ad-a612-d6c3bf666aba_105.json | 94 ++++++++ ...dfaaa17-425c-4fe7-bd36-83705fde7c2b_2.json | 102 +++++++++ ...70d54-c0eb-4270-ac5a-9a6020585dc6_108.json | 133 +++++++++++ ...fb500fa-8e24-4bd1-9480-2a819352602c_9.json | 108 +++++++++ ...84fa9-8677-4453-8680-b891d3c0c778_106.json | 93 ++++++++ ...14d96c7-2068-42aa-ba8e-fe0ddd565e2e_3.json | 61 +++++ ...e23e6-2094-4f0e-8c01-22d30f3506c6_108.json | 102 +++++++++ ...e9dc6-a2d7-4192-a2d8-eed98afc766a_111.json | 115 ++++++++++ ...f8d8f-4117-4ae4-b551-f56d54b9da6b_107.json | 96 ++++++++ ...35c0622-114e-40b5-a346-f843ea5d01f1_6.json | 103 +++++++++ ...3e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7.json | 96 ++++++++ ...46fe13f-6772-4c83-bd39-9d16d4ad1a81_4.json | 110 +++++++++ ...4d1f8db-207f-45ab-a578-921d91c23eb2_3.json | 96 ++++++++ ...d901a-2a3c-46c6-8b22-55398a01aad8_110.json | 121 ++++++++++ ...6c3157c-a951-4a4f-989b-2f0d0f1f9518_1.json | 151 ------------- ...aecc0-cea4-4110-af3f-e02e9b373655_109.json | 111 ++++++++++ ...ea072-1b71-4def-b016-6278b505138d_111.json | 136 ++++++++++++ ...84e87cc-c67b-4c90-a4ed-e1e24a940c82_4.json | 98 ++++++++ ...71231-6626-4e1b-abb7-6e361a171fbb_105.json | 88 ++++++++ ...17a33-60d3-411f-ba79-7c905d865b2a_107.json | 85 +++++++ ...dcb8c-60e5-46ee-9206-2663adf1b1ce_105.json | 116 ++++++++++ ...cb88e-441a-4c3e-be2d-120d99fe7b0d_107.json | 99 +++++++++ ...dc6b5-b39f-432a-8d75-d3730d50c782_109.json | 107 +++++++++ ...9a4b0-9f8f-4ee0-8823-c4751a6d6696_107.json | 115 ++++++++++ ...a6cb7-6b53-4de2-b604-648488841ab8_106.json | 80 +++++++ ...a024633-c444-45c0-a4fe-78128d8c1ab6_5.json | 127 +++++++++++ ...a0fbd26-867f-11ee-947c-f661ea17fbcd_3.json | 82 +++++++ ...d4831-3ce6-4859-9891-28931fa6101d_107.json | 143 ++++++++++++ ...b7614-1d92-4359-bfcf-478b6d9de150_208.json | 106 +++++++++ ...af5b42f-8d74-48c8-a8d0-6d14b4197288_4.json | 95 ++++++++ ...b3a62-a598-4293-bc14-3d5fa22bb98f_107.json | 125 +++++++++++ ...f0816-6a65-4630-86a6-c21c179c0d09_108.json | 98 ++++++++ ...7dc0e-e3ac-4c97-8aa0-cf6a9122de45_109.json | 98 ++++++++ ...b84371-d053-4f4f-bce0-c74990e28f28_10.json | 99 +++++++++ ...41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108.json | 96 ++++++++ ...19d4b-a5af-47ca-a594-6be59cd924a4_106.json | 132 +++++++++++ ...69566-2260-4824-b8e4-8615c3b4ed52_108.json | 92 ++++++++ ...2cd6c-650f-4fa3-8a8a-28256c7489c9_107.json | 110 +++++++++ ...2984446-aefb-4d5e-ad12-598042ca80ba_8.json | 116 ++++++++++ ...2d3a04e-6487-4b62-892d-70e640a590dc_2.json | 96 ++++++++ ...22c0a-06a0-4131-b830-b10d5e166ff4_109.json | 118 ++++++++++ ...1ce76-494c-4f01-8167-35edfb52f7b1_106.json | 75 +++++++ ...47827c6-9ed6-4dec-903e-c856c86e72f3_3.json | 93 ++++++++ ...4a401ba-4fa2-455c-b7ae-b6e037afc0b7_7.json | 91 ++++++++ ...ee7c8-5437-49ae-b2d6-2960883898e9_107.json | 131 +++++++++++ ...a7353-1129-4aa7-9084-30746b256a70_108.json | 105 +++++++++ ...ccab9-da51-4a87-9ce2-d3c9782fd759_111.json | 103 +++++++++ ...6d11d31-9a79-480f-8401-da28b194608f_9.json | 95 ++++++++ ...90768-c3b7-4df6-b5d9-6237f8bc36a8_107.json | 93 ++++++++ ...7020e61-e591-4191-8a3b-2861a2b887cd_7.json | 96 ++++++++ ...14185-2568-4561-ae81-f3e480e5e695_105.json | 90 ++++++++ ...ba1ef-6034-4bd3-8c1a-1e0996b27afa_109.json | 108 +++++++++ ...7db8b42-69d8-4bf3-9fd4-c69a1d895d68_6.json | 87 ++++++++ ...95807-5b09-4e37-8a54-5cae5dc932d7_105.json | 90 ++++++++ ...39e7d-b0d4-46e3-8609-acafcf99f68c_106.json | 129 +++++++++++ ...94e40aa-8c85-43de-825e-15f665375ee8_3.json | 100 +++++++++ ...0432d-9b26-409f-972b-839a959e79e2_209.json | 110 +++++++++ ...a3689-8ed1-4cdb-83fb-9506db54c61f_208.json | 121 ++++++++++ ...b4e31-6cde-4295-9ff7-6be1b8567e1b_108.json | 157 +++++++++++++ ...0e1f6-52ce-42e1-abb3-09657cee2698_108.json | 114 ++++++++++ ...813a1-daf1-457e-b0e6-0bb4e55b8a4c_110.json | 121 ++++++++++ ...b80cb26-9966-44b5-abbf-764fbdbc3586_2.json | 113 ++++++++++ ...60313-c811-4ec8-ab89-8f6530e0246c_108.json | 110 +++++++++ ...f3ce0-0057-440a-91f5-870c6ad39093_109.json | 150 +++++++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208.json | 142 ++++++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109.json | 106 +++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111.json | 111 ++++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109.json | 154 +++++++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210.json | 124 +++++++++++ ...10cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106.json | 102 +++++++++ ...9ece6-c20e-481a-90c5-ccca596537de_106.json | 92 ++++++++ ...c4ca3-44b5-481d-ba42-32dc215a2769_110.json | 80 +++++++ ...62927-1a4f-45f3-a57b-287f2c7029c1_113.json | 129 +++++++++++ ...a2a82-93a8-4b1a-8778-1780895626d4_210.json | 96 ++++++++ ...681e3-9ed6-447c-ab2c-be648821c622_309.json | 105 +++++++++ ...0ddb77b-0318-41f0-91e4-8c1b5528834f_3.json | 108 +++++++++ ...167f1-eec2-4015-9631-1fee60406dcf_106.json | 94 ++++++++ ...29140-8de3-4445-9f87-908fb6d824f4_109.json | 91 ++++++++ ...612dd-b30e-4d41-86a0-ebe70974ec00_106.json | 90 ++++++++ ...1699af0-8e1e-4ed0-8ec1-89783538a061_6.json | 86 +++++++ ...198fbbd-9413-45ec-a269-47ae4ccf59ce_3.json | 53 +++++ ...0375f-22c2-48c0-81a4-7c2d11cc6856_108.json | 101 +++++++++ ...1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4.json | 85 +++++++ ...a09c2-2162-4df0-a356-9aacbeb56a04_108.json | 95 ++++++++ ...2d04374-187c-4fd9-b513-3ad4e7fdd67a_7.json | 118 ++++++++++ ...a12f3-0d4e-4667-8b44-4230c63f3c75_107.json | 85 +++++++ ...577e524-c2ee-47bd-9c5b-e917d01d3276_2.json | 99 +++++++++ ...5eb21b7-13cc-4b94-9fe2-29bb2914e037_6.json | 138 ++++++++++++ ...61809f3-fb5b-465c-8bff-23a8a068ac60_6.json | 127 +++++++++++ ...4863f-a70d-417f-a7d2-7a404638d47f_111.json | 151 +++++++++++++ ...f4dd4-743e-4da8-8c03-3ebd753a6c90_107.json | 83 +++++++ ...74c60cb-70ee-4629-a127-608ead14ebf1_3.json | 61 +++++ ...cae7b-9d2c-44b2-a061-98e5946971fa_110.json | 100 +++++++++ ...7bfa3-088e-4f13-b29e-3986e0e756b8_109.json | 113 ++++++++++ ...8d35ca0-ad8d-48a9-9f6c-553622dca61a_3.json | 61 +++++ ...9fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105.json | 90 ++++++++ ...05c3b-b304-4bf9-970d-acdfaef2944c_107.json | 119 ++++++++++ ...95aea-b69c-4411-b110-8d7599634b30_110.json | 90 ++++++++ ...a274d-6b53-424d-ac5e-cb8ca4251650_110.json | 137 ++++++++++++ ...aab30ec-b004-4191-95e1-4a14387ef6a6_1.json | 118 ++++++++++ ...ab184d3-72b3-4639-b242-6597c99d8bca_7.json | 209 ++++++++++++++++++ ...12404-57a5-476f-858f-4e8fbb4f48d8_107.json | 101 +++++++++ ...012b8-8da8-440b-aaaf-aedafdea2dff_111.json | 145 ++++++++++++ ...c8805f6-1e08-406c-962e-3937057fa86f_6.json | 111 ++++++++++ ...6ceb8-4399-4191-af1d-4feeac1f1f46_108.json | 87 ++++++++ ...611f3-2b93-47b3-a0a3-7723bcc46f6d_105.json | 130 +++++++++++ ...1e989-a541-44df-93a8-a8b0591b63c0_108.json | 91 ++++++++ ...738b5-b5b2-4acc-bad9-1e18ee234f40_108.json | 81 +++++++ ...d2742-9a49-11ec-8d6b-acde48001122_108.json | 97 ++++++++ ...4d445-b1ce-4377-82d9-7c633f28bf9a_110.json | 106 +++++++++ ...8231f-e2ab-491c-8fc6-64746da26cfe_106.json | 98 ++++++++ ...d959eeb-2b7b-4722-ba08-a45f6622f005_2.json | 139 ++++++++++++ ...961e0-cb74-42a0-af9e-29fc41f88f5f_110.json | 102 +++++++++ ...e343298-97bc-47bc-9ea2-5f2ad831c16e_3.json | 89 ++++++++ ...e8a142c-6a1d-4918-bea7-0b617e99ecfa_4.json | 134 +++++++++++ ...ebaa51f-2a91-4f6a-850b-b601db2293f4_7.json | 101 +++++++++ ...fa135c0-a365-43ab-aa35-fd86df314a47_4.json | 101 +++++++++ ...ce5ad-65de-4ed2-8516-5e093d3ac99a_106.json | 126 +++++++++++ ...fd04601-12fc-4149-9b78-9c3f8fe45d39_6.json | 109 +++++++++ ...fe6b0eb-dd9d-4922-b08a-1910124d524d_5.json | 107 +++++++++ ...46934-486e-462f-9487-0d4cf9e429c6_106.json | 92 ++++++++ ...bcd89-000c-4425-b94c-716ef67762f6_106.json | 86 +++++++ ...a7df2-120a-4db2-bd3f-3e4b86b24bee_110.json | 98 ++++++++ ...51150-658f-4a60-832f-a00d1e6c6745_105.json | 90 ++++++++ ...ee2be-bf99-446c-ab1a-2dc0183394b8_107.json | 126 +++++++++++ ...a13c6-ba45-4bab-a534-df53d0cfed6a_110.json | 98 ++++++++ ...49455-f986-4b5a-82ed-e36b129331f7_106.json | 91 ++++++++ ...51dbc92-84e2-4af1-ba47-65183fcd0c57_5.json | 101 +++++++++ ...77334-677f-4fb9-86d5-a9721274223b_110.json | 132 +++++++++++ ...a4bfe-a1b2-421f-9d47-22a75a6f2921_110.json | 97 ++++++++ ...7cd12-dac4-11ec-9582-f661ea17fbcd_106.json | 86 +++++++ ...b183e-1a76-422d-9179-7b389513e74d_108.json | 159 +++++++++++++ ...661f86d-1c23-4ce7-a59e-2edbdba28247_1.json | 125 +++++++++++ ...7c05aaf-78c2-4558-b069-87fa25973489_2.json | 85 +++++++ ...81bd314-db5b-4d97-82e8-88e3e5fc9de5_3.json | 88 ++++++++ ...8386923-b02c-4b94-986a-d223d9b01f88_5.json | 131 +++++++++++ ...a7e96-2eb3-4edf-8346-427b6858d3bd_107.json | 98 ++++++++ ...afe07-0d98-4738-b15d-8d7465f95ff5_105.json | 90 ++++++++ ...8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4.json | 79 +++++++ ...cdde7-7e0d-4359-8bf0-2c112ce2008a_108.json | 152 +++++++++++++ ...0f25a-2d44-47f2-a873-aabdc0d355e6_111.json | 101 +++++++++ ...92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2.json | 93 ++++++++ ...54892-5e0e-424b-83a0-5aef95aa43bf_109.json | 91 ++++++++ ...66521-4742-49ce-9ddc-b8e84c35acae_110.json | 107 +++++++++ ...60fef-82c6-4816-befa-44745030e917_108.json | 124 +++++++++++ ...a81c182-4287-489d-af4d-8ae834b06040_3.json | 100 +++++++++ ...5d22c-5e1c-4f33-bfc9-efa73bb53022_108.json | 131 +++++++++++ ...1b212-b85c-41c6-9b28-be0e5cdfc9b1_105.json | 83 +++++++ ...1a775-8267-41fa-9232-20e5582596ac_106.json | 93 ++++++++ ...c0fc359-68db-421e-a435-348ced7a7f92_2.json | 101 +++++++++ ...eeacf-2972-434f-b782-3a532b100d67_106.json | 100 +++++++++ ...caa15ce-2d41-44d7-a322-918f9db77766_3.json | 90 ++++++++ ...c86a0-8b61-4457-ab38-96943984e889_112.json | 118 ++++++++++ ...eefee-f671-494e-98df-f01daf9e5f17_105.json | 85 +++++++ ...db04043-f0e3-4efa-bdee-7d9d13fa9edc_7.json | 99 +++++++++ ...f646b-08d4-492c-870a-6c04e3700034_108.json | 115 ++++++++++ ...dfebe11-e169-42e3-b344-c5d2015533d3_3.json | 64 ++++++ ...e4c5aed-90f5-4221-8bd5-7ab3a4334751_3.json | 61 +++++ ...afaed-4bcd-4e0a-b5f9-5562003dde81_108.json | 108 +++++++++ ...f8c007c-7dee-4842-8e9a-ee534c09d205_3.json | 88 ++++++++ ...fba5158-1fd6-4937-a205-77d96213b341_3.json | 64 ++++++ ...af89b-a2a7-48a3-817f-e41829dc61ee_110.json | 179 +++++++++++++++ ...c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107.json | 101 +++++++++ ...29aa8-9974-42da-bfb6-53a0a515a145_108.json | 116 ++++++++++ ...125e48f-6783-41f0-b100-c3bf1b114d16_6.json | 87 ++++++++ ...e9c87-95e1-4368-bfab-9fd34cf867ec_109.json | 100 +++++++++ ...2fa52-4115-408a-b897-e14f684b3cb7_106.json | 110 +++++++++ ...296f888-eac6-4543-8da5-b6abb0d3304f_2.json | 113 ++++++++++ ...90150-0133-451c-a783-533e736c12d7_106.json | 104 +++++++++ ...915e0-22f3-4bf7-991d-b643513c722f_106.json | 97 ++++++++ ...10e1c-64f2-4f48-b67e-b5a8ffe3aa14_108.json | 153 +++++++++++++ ...18812-d44f-47be-aaef-4cfb2f9cc799_106.json | 93 ++++++++ ...f8579-e2a5-4804-847f-f2732edc5156_108.json | 117 ++++++++++ ...9f591-d111-4cf8-baec-c26a39bc31ef_108.json | 136 ++++++++++++ ...e48a6-7f57-4ee8-9313-3d0024caee10_107.json | 90 ++++++++ ...c3223-13a2-44a2-946c-e9dc0aa0449c_109.json | 111 ++++++++++ ...53e73-90eb-4fe7-a98c-cde7bbfc504a_111.json | 101 +++++++++ ...94234-7814-44c2-92a9-f7d851ea246a_106.json | 102 +++++++++ ...e36c0-32ff-4f9a-bfc2-dcb242bf99f9_109.json | 103 +++++++++ ...cefcb-82b9-4408-a533-3c3df549e62d_106.json | 85 +++++++ ...eb82c-d2c8-485c-a36f-534f914b7663_105.json | 90 ++++++++ ...8935a8b-634a-4449-98f7-bb24d3b2c0af_8.json | 106 +++++++++ ...150f0-0164-475b-a75e-74b47800a9ff_109.json | 100 +++++++++ ...ccb06-faf2-4cd5-886e-2c9636cfcb87_109.json | 129 +++++++++++ ...9768e-40e1-4e45-a097-0e5fbc876ac2_105.json | 90 ++++++++ ...a98c7cf-a56e-4057-a4e8-39603f7f0389_7.json | 121 ++++++++++ ...91072-d165-11ec-a764-f661ea17fbce_213.json | 122 ++++++++++ ...1aa62-55c8-42f0-b0dd-afb0bb0b1f51_106.json | 90 ++++++++ ...fd2d0-ba3a-4939-b87f-2901764ed036_106.json | 92 ++++++++ ...c653d77-ddd2-45b1-9197-c75ad19df66c_3.json | 64 ++++++ ...6a5af-e34b-4bb0-8931-57d0a043f2ef_109.json | 124 +++++++++++ ...e1bafa-9f01-4f43-a872-605b678968b0_10.json | 95 ++++++++ ...4d965-6cb0-466d-b74f-8d2c76f47f05_108.json | 123 +++++++++++ ...f6995ec-32a9-4b2d-9340-f8e61acf3f4e_2.json | 96 ++++++++ ...92c41-2225-4763-b4ce-6f71e5bda5e6_111.json | 127 +++++++++++ ...00f33e7-b57d-4023-9952-2db91b1767c4_9.json | 99 +++++++++ ...159cf-73e9-40d1-a9ed-077e3158a855_109.json | 106 +++++++++ ...7cbb4-7d56-41b4-b999-bdf8c25648a0_110.json | 120 ++++++++++ ...a85c6-d2ad-4cc4-bf7b-54787473669a_106.json | 82 +++++++ ...f183a-e5b1-451b-8534-ba62bca0b404_109.json | 139 ++++++++++++ ...1bbe2-6db4-4941-80a5-8270db72eb61_111.json | 109 +++++++++ ...1fac0-43e8-49e2-85ea-3a58fe120b4f_106.json | 95 ++++++++ ...4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6.json | 95 ++++++++ ...55436a8-719c-445f-92c4-c113ff2f9ba5_5.json | 99 +++++++++ ...55abdfb-5384-402b-add4-6c401501b0c3_3.json | 118 ++++++++++ ...3aaba-2e72-462b-8658-3e5ea22db3a6_105.json | 85 +++++++ ...cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106.json | 141 ++++++++++++ ...68e95ad-1c82-4074-a12a-125fe10ac8ba_9.json | 120 ++++++++++ ...eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105.json | 90 ++++++++ ...3a5af-d5b0-43bd-8ddb-7a5d500b7da5_108.json | 111 ++++++++++ ...e33fc-6e91-42ff-ac8b-e573268c5a87_110.json | 132 +++++++++++ ...3ff2a-203e-4a46-a3e3-40512cfe8fbb_105.json | 89 ++++++++ ...74d6506-427a-4790-b170-0c2a6ddac799_2.json | 88 ++++++++ ...991f2-b989-419d-b797-ac1e54ec2d61_106.json | 87 ++++++++ ...b02ef-fc95-4001-9297-01cb7412232f_110.json | 111 ++++++++++ ...62693-aab9-4f66-a21a-3d79ecdd603d_104.json | 93 ++++++++ ...a037b-c8e2-47a5-97b9-170d076827c4_110.json | 121 ++++++++++ ...a7733b1-fe08-487e-b536-0a04c6d8b0cd_8.json | 104 +++++++++ ...a7f5803-1cd4-42fd-a890-0173ae80ac69_3.json | 85 +++++++ ...c0b7782-0df0-47ff-8337-db0d678bdb66_5.json | 119 ++++++++++ ...c71c186-9fe4-4437-a4d0-85ebb32b8204_8.json | 94 ++++++++ ...c1f74-dac3-48e3-b47f-eb79db358f57_109.json | 109 +++++++++ ...b1f5f-7089-44f5-9fda-de5b11322e77_107.json | 107 +++++++++ ...bd7e0-49e9-4e92-a64d-53ade2e66af1_109.json | 86 +++++++ ...ff20a-46bc-4a4d-bae5-5cdd14222795_110.json | 99 +++++++++ ...f62d9-caab-4b88-affa-044f4395a1e0_108.json | 103 +++++++++ ...2c845-48d0-4f46-8a13-7d0aba05df82_107.json | 98 ++++++++ ...0cc3807-e108-483c-bf66-5a4fbe0d7e89_4.json | 83 +++++++ ...c0318-99b1-44f2-830c-3a38a43207ca_206.json | 84 +++++++ ...e64ee-130e-4c07-961f-8a339f0b8362_107.json | 87 ++++++++ ...1db8899-97c1-4851-8993-3a3265353601_3.json | 64 ++++++ ...2258f48-ba75-4248-951b-7c885edf18c2_6.json | 86 +++++++ ...f042e-c590-4e82-8e05-41e81bd822ad_112.json | 133 +++++++++++ ...28b8093-833b-4eda-b877-0873d134cf3c_2.json | 104 +++++++++ ...2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3.json | 84 +++++++ ...9fdf5-8076-45ad-9427-41e0e03dc9c2_110.json | 118 ++++++++++ ...43ab9-4245-4715-b344-e11c56b0a47f_109.json | 120 ++++++++++ ...f38fa-d5b8-46cc-87f9-4a7513e4281d_106.json | 89 ++++++++ ...904b3-0a8e-4e68-86a8-977a163e21d3_110.json | 91 ++++++++ ...4d8cd-ed15-4011-84e2-d15147e059f1_110.json | 132 +++++++++++ ...98d38-633d-4b3e-9387-42112cd5ac10_106.json | 98 ++++++++ ...8912f-283f-4d0d-8442-e0dcaf49944b_107.json | 102 +++++++++ ...25cea-9fe1-42a5-9a05-b0792cf86f5a_106.json | 111 ++++++++++ ...f87d0-a70e-4f8d-8443-a6407bc34643_106.json | 88 ++++++++ ...7cb3cfd-aaa3-4d7b-af18-23b89955062c_8.json | 94 ++++++++ ...d5982-17c8-4959-874c-633acde7d426_206.json | 88 ++++++++ ...da94d-e54b-4fb5-b96c-cecff87e8787_107.json | 104 +++++++++ ...88d1fe9-b2f4-48d4-bace-a026dc745d4b_6.json | 97 ++++++++ ...01ee6-2d00-4d2f-849e-b8b1fb05234c_105.json | 107 +++++++++ ...92c99b6-c547-4bb6-b244-2f27394bc849_3.json | 60 +++++ ...262f2-c1e9-4d3f-a907-aeab16712e1a_110.json | 104 +++++++++ ...9b0902b-c515-413b-b80b-a8dcebc81a66_3.json | 61 +++++ ...a09ff26-3902-4c53-bb8e-24b7a5d029dd_3.json | 66 ++++++ ...aef8a35-12e0-4ac0-bc14-81c72b6bd27c_2.json | 126 +++++++++++ ...b44611f-62a8-4036-a5ef-587098be6c43_4.json | 98 ++++++++ ...10e70-f9e6-4949-82b9-f1c5bcd37c39_111.json | 118 ++++++++++ ...eb8ba-a983-41d9-9c93-a1c05112ca5e_110.json | 98 ++++++++ ...200e8-adf0-43f8-a0bb-4ee5b5d852c6_108.json | 86 +++++++ ...1adea-ccf2-4943-8b96-7ab11ca173a5_109.json | 110 +++++++++ ...e1448-7fac-4d59-acea-181bd89b1f7f_109.json | 94 ++++++++ ...efb0c-604d-42fa-ac46-ed1cfbc38f78_105.json | 116 ++++++++++ ...499b8-a073-4e35-9733-22ec71f57f3a_110.json | 139 ++++++++++++ ...8ee23-5ea7-4123-ba19-56b41e424ae3_111.json | 102 +++++++++ ...dfd5ca9-9d6c-44d9-b615-1e56b920219c_4.json | 85 +++++++ ...300a7-7e31-4a72-a258-250abb8b3aa1_107.json | 115 ++++++++++ ...82229-b002-470e-a9e1-00be38b14d32_107.json | 94 ++++++++ ...4a476-07ec-48fc-8f3d-5e1742de76d3_108.json | 96 ++++++++ ...f100a2e-ecd4-4f72-9d1e-2f779ff3c311_7.json | 103 +++++++++ ...62985-3f13-4262-a686-5f357bbb9bc2_110.json | 120 ++++++++++ ...f8cc01c-fc49-4954-a175-98569c646740_3.json | 64 ++++++ ...6953a-4615-4707-a1ca-dc53bf69dcd5_107.json | 111 ++++++++++ ...93cb4-9b15-43a9-9359-68c23a7f2cf3_106.json | 140 ++++++++++++ ...48bbc-549e-4bcf-8ee0-a7a72586c6a7_107.json | 98 ++++++++ ...b70e9-71e9-40cd-813f-bf8e8c812cb1_106.json | 114 ++++++++++ ...16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7.json | 122 ++++++++++ ...bcae1-8980-4b30-b5dd-f851b055c9e7_108.json | 115 ++++++++++ ...e2be4-6eca-4349-bdd9-381573730c22_109.json | 113 ++++++++++ ...7b914-eda3-40c2-96ac-d23ef91776ca_106.json | 90 ++++++++ ...46686-6f3c-4724-bd7d-24e31c70f98f_108.json | 106 +++++++++ ...3403393-1fd9-4686-8f6e-596c58bc00b4_3.json | 90 ++++++++ ...75224-b179-4f78-8877-c2bd64c26b88_109.json | 147 ++++++++++++ ...3818c85-2207-4b51-8a28-d70fb156ee87_2.json | 128 +++++++++++ ...3e22c8b-ea47-45d1-b502-b57b6de950b3_6.json | 137 ++++++++++++ ...41296b4-9975-44d6-9486-514c6f635b2d_5.json | 103 +++++++++ ...fa4b6-524c-4e87-8d9e-a32599e4fb7c_107.json | 96 ++++++++ ...4c678-3c33-43aa-b169-bb3d5198c41d_110.json | 104 +++++++++ ...530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6.json | 100 +++++++++ ...5ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110.json | 128 +++++++++++ ...580bf0a-2d23-43bb-b8e1-17548bb947ec_2.json | 107 +++++++++ ...5861570-e39a-4b8a-9259-abd39f84cb97_3.json | 92 ++++++++ ...5c005d3-4e17-48b0-9cd7-444d48857f97_5.json | 106 +++++++++ ...5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3.json | 66 ++++++ ...5fb4598-4f10-11ed-bdc3-0242ac120002_6.json | 89 ++++++++ ...638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3.json | 118 ++++++++++ ...c8e3c-d396-404f-b2ea-0379d3942d73_109.json | 131 +++++++++++ ...3dcdf-a018-4801-b066-193d4ae6c8e5_106.json | 95 ++++++++ ...75f65cf-ed04-48df-a7ff-b02a8bfe636e_3.json | 89 ++++++++ ...4dc5a-a58d-491d-9f14-9b66507121c0_110.json | 110 +++++++++ ...7c70f2e-4616-439c-85ac-5b98415042fe_2.json | 103 +++++++++ ...ee52c-297e-46d9-9205-07e66931df26_108.json | 129 +++++++++++ ...ce03f-d8a8-4c83-acdc-5c8cd0592be7_106.json | 94 ++++++++ ...4315d-5188-4b4a-8521-d1c73093a7e4_109.json | 104 +++++++++ ...9790abf-bd0c-45f9-8b5f-d0b74015e029_9.json | 108 +++++++++ ...1341d-6662-426b-9d0c-6d81e33c8a9d_108.json | 93 ++++++++ ...a210b61-b627-4e5e-86f4-17e8270656ab_6.json | 99 +++++++++ ...a3a59dc-33c3-43bf-80a9-e8437a922c7f_7.json | 126 +++++++++++ ...a488440-04cc-41d7-9279-539387bf2a17_8.json | 109 +++++++++ ...ac52c69-2646-4e79-89c0-fd7653461010_6.json | 98 ++++++++ ...2b8d3-71ee-4af1-bacd-215d23f17efa_107.json | 142 ++++++++++++ ...c0fa4-8f03-4b3e-8336-c5feab0be022_108.json | 147 ++++++++++++ ...a992d-6130-4802-9ff8-829b89ae801f_109.json | 119 ++++++++++ ...a6052-58fa-4397-93c3-4795249ccfa2_210.json | 106 +++++++++ ...da1d332-5e08-4f27-8a9b-8c802e3292a6_7.json | 113 ++++++++++ ...ddff193-48a3-484d-8d35-90bb3d323a56_4.json | 104 +++++++++ ...e25d5bc-01fa-494a-95ff-535c29cc4c96_5.json | 104 +++++++++ ...94edd-487f-4a90-b285-3ee54f2af2d3_109.json | 104 +++++++++ ...ed87c-5e95-4339-aef1-47fd79bcfbe3_107.json | 109 +++++++++ ...f0d807d-869b-4a0d-a493-52bc46d2f1b1_3.json | 64 ++++++ ...f10d4d8-fea7-422d-afb1-e5a2702369a9_9.json | 157 +++++++++++++ ...dd44a-0ac6-44c4-8609-3f81bc820f02_105.json | 90 ++++++++ ...f9bc8b9-f03b-4283-be58-ee0a16f5a11b_5.json | 118 ++++++++++ .../security_detection_engine/manifest.yml | 2 +- 624 files changed, 65587 insertions(+), 152 deletions(-) create mode 100644 packages/security_detection_engine/kibana/security_rule/00140285-b827-4aee-aa09-8113f58a08f3_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0136b315-b566-482f-866c-1d8e2477ba16_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/027ff9ea-85e7-42e3-99d2-bbb7069e02eb_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/02a4576a-7480-4284-9327-548a806b5e48_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/02ea4563-ec10-4974-b7de-12e65aa4f9b3_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/03024bd9-d23f-4ec1-8674-3cf1a21e130b_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/035889c4-2686-4583-a7df-67f89c292f2c_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/035a6f21-4092-471d-9cda-9e379f459b1e_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0369e8a6-0fa7-4e7a-961a-53180a4c966e_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/03c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0415f22a-2336-45fa-ba07-618a5942e22c_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/053a0387-f3b5-4ba5-8245-8002cca2bd08_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0564fb9d-90b9-4234-a411-82a546dc1343_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/05b358de-aa6d-4f6c-89e6-78f74018b43b_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/05cad2fb-200c-407f-b472-02ea8c9e5e4a_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/05e5a668-7b51-4a67-93ab-e9af405c9ef3_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0635c542-1b96-4335-9b47-126582d2c19a_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0678bc9c-b71a-433b-87e6-2f664b6b3131_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/06dceabf-adca-48af-ac79-ffdf4c3b1e9a_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/074464f9-f30d-4029-8c03-0ed237fffec7_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0787daa6-f8c5-453b-a4ec-048037f6c1cd_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/07b1ef73-1fde-4a49-a34a-5dd40011b076_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/080bc66a-5d56-4d1f-8071-817671716db9_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/082e3f8c-6f80-485c-91eb-5b112cb79b28_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/083fa162-e790-4d85-9aeb-4fea04188adb_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0859355c-0f08-4b43-8ff5-7d2a4789fc08_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/092b068f-84ac-485d-8a55-7dd9e006715f_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/09bc6c90-7501-494d-b015-5d988dc3f233_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0ab319ef-92b8-4c7f-989b-5de93c852e93_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0b2f3da5-b5ec-47d1-908b-6ebb74814289_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0b803267-74c5-444d-ae29-32b5db2d562a_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0c093569-dff9-42b6-87b1-0242d9f7d9b4_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0c41e478-5263-4c69-8f9e-7dfd2c22da64_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0ce6487d-8069-4888-9ddd-61b52490cebc_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0d69150b-96f8-467c-a86d-a67a3378ce77_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0e52157a-8e96-4a95-a6e3-5faae5081a74_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0e79980b-4250-4a50-a509-69294c14e84b_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0f4d35e4-925e-4959-ab24-911be207ee6f_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0f93cb9a-1931-48c2-8cd0-f173fd3e5283_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/0ff84c42-873d-41a2-a4ed-08d74d352d01_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/10a500bb-a28f-418e-ba29-ca4c8d1a9f2f_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1160dcdb-0a0a-4a79-91d8-9b84616edebd_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1178ae09-5aff-460a-9f2f-455cd0ac4d8e_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/11dd9713-0ec6-4110-9707-32daae1ee68c_11.json create mode 100644 packages/security_detection_engine/kibana/security_rule/11ea6bec-ebde-4d71-a8e9-784948f8e3e9_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1224da6c-0326-4b4f-8454-68cdc5ae542b_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/128468bf-cab1-4637-99ea-fdf3780a4609_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/12f07955-1674-44f7-86b5-c35da0a6f41a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1327384f-00f3-44d5-9a8c-2373ba071e92_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/13e908b9-7bf0-4235-abc9-b5deb500d0ad_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/14ed1aa9-ebfd-4cf9-a463-0ac59ec55204_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/15a8ba77-1c13-4274-88fe-6bd14133861e_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/15c0b7a7-9c34-4869-b25b-fa6518414899_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/15dacaa0-5b90-466b-acab-63435a59701a_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/166727ab-6768-4e26-b80c-948b228ffc06_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/16904215-2c95-4ac8-bf5c-12354e047192_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/16a52c14-7883-47af-8745-9357803f0d4c_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/16fac1a1-21ee-4ca6-b720-458e3855d046_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/17b0a495-4d9f-414c-8ad0-92f018b8e001_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/17c7f6a5-5bc9-4e1f-92bf-13632d24384d_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/18a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/193549e8-bb9e-466a-a7f9-7e783f5cb5a6_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/19e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1a6075b0-7479-450e-8fe7-b8b8438ac570_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1aa9181a-492b-4c01-8b16-fa0735786b2b_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1b21abcc-4d9f-4b08-a7f5-316f5f94b973_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1c27fa22-7727-4dd3-81c0-de6da5555feb_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1c84dd64-7e6c-4bad-ac73-a5014ee37042_113.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1cd01db9-be24-4bef-8e7c-e923f0ff78ab_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1d276579-3380-4095-ad38-e596a01bc64f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1dcc51f6-ba26-49e7-9ef4-2655abb2361e_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1defdd62-cd8d-426e-a246-81a37751bb2b_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1df1152b-610a-4f48-9d7a-504f6ee5d9da_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1f0a69c0-3392-4adf-b7d5-6012fd292da8_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/1fe3b299-fbb5-4657-a937-1d746f2c711a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/201200f1-a99b-43fb-88ed-f65a45c4972c_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/202829f6-0271-4e88-b882-11a655c590d4_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/203ab79b-239b-4aa5-8e54-fc50623ee8e4_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/20457e4f-d1de-4b92-ae69-142e27a4342a_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/208dbe77-01ed-4954-8d44-1e5751cb20de_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2138bb70-5a5e-42fd-be5e-b38edf6a6777_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/220be143-5c67-4fdb-b6ce-dd6826d024fd_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2339f03c-f53f-40fa-834b-40c5983fc41f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2377946d-0f01-4957-8812-6878985f515d_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/23bcd283-2bc0-4db2-81d4-273fc051e5c0_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/25224a80-5a4a-4b8a-991e-6ab390465c4f_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2605aa59-29ac-4662-afad-8d86257c7c91_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/265db8f5-fc73-4d0d-b434-6483b56372e2_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/26f68dba-ce29-497b-8e13-b4fde1db5a2d_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/27071ea3-e806-4697-8abc-e22c92aa4293_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2724808c-ba5d-48b2-86d2-0002103df753_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/272a6484-2663-46db-a532-ef734bf9a796_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2772264c-6fb9-4d9d-9014-b416eed21254_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/27f7c15a-91f8-4c3d-8b9e-1f99cc030a51_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2820c9c2-bcd7-4d6e-9eba-faf3891ba450_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2856446a-34e6-435b-9fb5-f8f040bfa7ed_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/28738f9f-7427-4d23-bc69-756708b5f624_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/28bc620d-b2f7-4132-b372-f77953881d05_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/28d39238-0c01-420a-b77a-24e5a7378663_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/290aca65-e94d-403b-ba0f-62f320e63f51_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2917d495-59bd-4250-b395-c29409b76086_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/291a0de9-937a-4189-94c0-3e847c8b13e4_211.json create mode 100644 packages/security_detection_engine/kibana/security_rule/29f0cf93-d17c-4b12-b4f3-a433800539fa_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2a692072-d78d-42f3-a48a-775677d79c4e_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2bf78aa2-9c56-48de-b139-f169bf99cf86_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2c17e5d7-08b9-43b2-b58a-0270d65ac85b_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2d8043ed-5bda-4caf-801c-c1feb7410504_209.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2dd480be-1263-4d9c-8672-172928f6789a_211.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2de10e77-c144-4e69-afb7-344e7127abd0_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2e1e835d-01e5-48ca-b9fc-7a61f7f11902_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2e29e96a-b67c-455a-afe4-de6183431d0d_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2edc8076-291e-41e9-81e4-e3fcbc97ae5e_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2f2f4939-0b34-40c2-a0a3-844eb7889f43_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2f8a1226-5720-437d-9c20-e0029deb6194_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2f95540c-923e-4f57-9dae-de30169c68b9_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/2ffa1f1e-b6db-47fa-994b-1512743847eb_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/30bfddd7-2954-4c9d-bbc6-19a99ca47e23_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/30e1e9f2-eb9c-439f-aff6-1e3068e99384_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/31b4c719-f2b4-41f6-a9bd-fce93c2eaf62_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/32300431-c2d5-432d-8ec8-0e03f9924756_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/32f4675e-6c49-4ace-80f9-97c9259dca2e_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/33a6752b-da5e-45f8-b13a-5f094c09522f_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/35330ba2-c859-4c98-8b7f-c19159ea0e58_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3535c8bb-3bd5-40f4-ae32-b7cd589d5372_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/35a3b253-eea8-46f0-abd3-68bdd47e6e3d_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/35df0dd8-092d-4a83-88c1-5151a804f31b_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3688577a-d196-11ec-90b0-f661ea17fbce_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/36a8e048-d888-4f61-a8b9-0f9e2e40f317_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/36c48a0c-c63a-4cbc-aee1-8cac87db31a9_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/37f638ea-909d-4f94-9248-edd21e4a9906_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3838e0e3-1850-4850-a411-2e8c5ba40ba8_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/38948d29-3d5d-42e3-8aec-be832aaaf8eb_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/397945f3-d39a-4e6f-8bcb-9656c2031438_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3a6001a0-0939-4bbe-86f4-47d8faeb7b97_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3b47900d-e793-49e8-968f-c90dc3526aa1_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3bc6deaa-fbd4-433a-ae21-3e892f95624f_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3d3aa8f9-12af-441f-9344-9f31053e316d_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3e0561b5-3fac-4461-84cc-19163b9aaa61_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3e3d15c6-1509-479a-b125-21718372157e_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3ecbdc9e-e4f2-43fa-8cca-63802125e582_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3ed032b2-45d8-4406-bc79-7ad1eabb2c72_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3efee4f0-182a-40a8-a835-102c68a4175d_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3f3f9fe2-d095-11ec-95dc-f661ea17fbce_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3f4d7734-2151-4481-b394-09d7c6c91f75_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/3f4e2dba-828a-452a-af35-fe29c5e78969_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/40155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/403ef0d3-8259-40c9-a5b6-d48354712e49_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/40ddbcc8-6561-44d9-afc8-eefdbfe0cccd_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/41284ba3-ed1a-4598-bfba-a97f75d9aba2_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/416697ae-e468-4093-a93d-59661fa619ec_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/41b638a1-8ab6-4f8e-86d9-466317ef2db5_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/42eeee3d-947f-46d3-a14d-7036b962c266_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/43d6ec12-2b1c-47b5-8f35-e9de65551d3b_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/440e2db4-bc7f-4c96-a068-65b78da59bde_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/44fc462c-1159-4fa8-b1b7-9b6296ab4f96_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/45d273fb-1dca-457d-9855-bcb302180c21_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4682fd2c-cfae-47ed-a543-9bed37657aa6_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/474fd20e-14cc-49c5-8160-d9ab4ba16c8b_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/47e22836-4a16-4b35-beee-98f6c4ee9bf2_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/47f76567-d58a-4fed-b32b-21f571e28910_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/483c4daf-b0c6-49e0-adf3-0bfa93231d6b_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/48819484-9826-4083-9eba-1da74cd0eaf2_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/48b3d2e3-f4e8-41e6-95e6-9b2091228db3_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/48b6edfc-079d-4907-b43c-baffa243270d_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/48d7f54d-c29e-4430-93a9-9db6b5892270_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/48ec9452-e1fd-4513-a376-10a1a26d2c83_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/494ebba4-ecb7-4be4-8c6f-654c686549ad_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4a99ac6f-9a54-4ba5-a64f-6eb65695841b_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4b438734-3793-4fda-bd42-ceeada0be8f9_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4b95ecea-7225-4690-9938-2a2c0bad9c99_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4bd1c1af-79d4-4d37-9efa-6e0240640242_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4c59cff1-b78a-41b8-a9f1-4231984d1fb6_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4da13d6e-904f-4636-81d8-6ab14b4e6ae9_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4de76544-f0e5-486a-8f84-eae0b6063cdc_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4e85dc8a-3e41-40d8-bc28-91af7ac6cf60_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4ec47004-b34a-42e6-8003-376a123ea447_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4ed493fc-d637-4a36-80ff-ac84937e5461_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/4fe9d835-40e1-452d-8230-17c147cafad8_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5124e65f-df97-4471-8dcb-8e3953b3ea97_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/513f0ffd-b317-4b9c-9494-92ce861f22c7_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/514121ce-c7b6-474a-8237-68ff71672379_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/51ce96fb-9e52-4dad-b0ba-99b54440fc9a_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/521fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/52376a86-ee86-4967-97ae-1a05f55816f0_112.json create mode 100644 packages/security_detection_engine/kibana/security_rule/52aaab7b-b51c-441a-89ce-4387b3aea886_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/530178da-92ea-43ce-94c2-8877a826783d_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/53617418-17b4-4e9c-8a2c-8deb8086ca4b_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5397080f-34e5-449b-8e9c-4c8083d7ccc6_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/53a26770-9cbd-40c5-8b57-61d01a325e14_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/54902e45-3467-49a4-8abc-529f2c8cfb80_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/54a81f68-5f2a-421e-8eed-f888278bb712_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/54c3d186-0461-4dc3-9b33-2dc5c7473936_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/55c2bf58-2a39-4c58-a384-c8b1978153c2_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/55d551c6-333b-4665-ab7e-5d14a59715ce_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/56004189-4e69-4a39-b4a9-195329d226e9_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/56557cde-d923-4b88-adee-c61b3f3b5dc3_104.json create mode 100644 packages/security_detection_engine/kibana/security_rule/565c2b44-7a21-4818-955f-8d4737967d2e_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/565d6ca5-75ba-4c82-9b13-add25353471c_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/56f2e9b5-4803-4e44-a0a4-a52dc79d57fe_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/577ec21e-56fe-4065-91d8-45eb8224fe77_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/581add16-df76-42bb-af8e-c979bfb39a59_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/58aa72ca-d968-4f34-b9f7-bea51d75eb50_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/58ac2aa5-6718-427c-a845-5f3ac5af00ba_103.json create mode 100644 packages/security_detection_engine/kibana/security_rule/58c6d58b-a0d3-412d-b3b8-0981a9400607_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5930658c-2107-4afc-91af-e0e55b7f7184_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5a14d01d-7ac8-4545-914c-b687c2cf66b3_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5a3d5447-31c9-409a-aed1-72f9921594fd_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5ae02ebc-a5de-4eac-afe6-c88de696477d_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5aee924b-6ceb-4633-980e-1bde8cdb40c5_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5b03c9fb-9945-4d2f-9568-fd690fee3fba_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5b06a27f-ad72-4499-91db-0c69667bffa5_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5b18eef4-842c-4b47-970f-f08d24004bde_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5bb4a95d-5a08-48eb-80db-4c3a63ec78a8_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5c351f54-4187-4ad8-abc8-29b0cfbef8b1_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5c602cba-ae00-4488-845d-24de2b6d8055_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5c6f4c58-b381-452a-8976-f1b1c6aa0def_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5c895b4f-9133-4e68-9e23-59902175355c_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5cd55388-a19c-47c7-8ec4-f41656c2fded_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5cd8e1f7-0050-4afc-b2df-904e40b2f5ae_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5cf6397e-eb91-4f31-8951-9f0eaa755a31_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5d0265bf-dea9-41a9-92ad-48a8dcd05080_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5d1d6907-0747-4d5d-9b24-e4a18853dc0a_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5d9f8cfc-0d03-443e-a167-2b0597ce0965_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/5e552599-ddec-4e14-bad1-28aa42404388_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/60f3adec-1df9-4104-9c75-b97d9f078b25_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/610949a1-312f-4e04-bb55-3a79b8c95267_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/61766ef9-48a5-4247-ad74-3349de7eb2ad_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/61ac3638-40a3-44b2-855a-985636ca985e_113.json create mode 100644 packages/security_detection_engine/kibana/security_rule/61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/622ecb68-fa81-4601-90b5-f8cd661e4520_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/62b68eb2-1e47-4da7-85b6-8f478db5b272_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/63e65ec3-43b1-45b0-8f2d-45b34291dc44_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6482255d-f468-45ea-a5b3-d3a7de1331ae_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/64cfca9e-0f6f-4048-8251-9ec56a055e9e_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/661545b4-1a90-4f45-85ce-2ebd7c6a15d0_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6641a5af-fb7e-487a-adc4-9e6503365318_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/665e7a4f-c58e-4fc6-bc83-87a7572670ac_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/66712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/66c058f3-99f4-4d18-952b-43348f2577a0_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/66da12b1-ac83-40eb-814c-07ed1d82b7b9_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/670b3b5a-35e5-42db-bd36-6c5b9b4b7313_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/675239ea-c1bc-4467-a6d3-b9e2cc7f676d_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/67f8443a-4ff3-4a70-916d-3cfa3ae9f02b_112.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6839c821-011d-43bd-bd5b-acff00257226_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/684554fc-0777-47ce-8c9b-3d01f198d7f8_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/68921d85-d0dc-48b3-865f-43291ca2c4f2_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/689b9d57-e4d5-4357-ad17-9c334609d79a_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/68d56fdc-7ffa-4419-8e95-81641bd6f845_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/69c251fb-a5d6-4035-b5ec-40438bd829ff_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6a8ab9cc-4023-4d17-b5df-1a3e16882ce7_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6aace640-e631-4870-ba8e-5fdda09325db_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6ace94ba-f02c-4d55-9f53-87d99b6f9af4_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6b84d470-9036-4cc0-a27c-6d90bbfe81ab_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6cd1779c-560f-4b68-a8f1-11009b27fe63_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6d8685a1-94fa-4ef7-83de-59302e7c4ca8_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6e9b351e-a531-4bdc-b73e-7034d6eed7ff_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6ea41894-66c3-4df7-ad6b-2c5074eb3df8_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6ea55c81-e2ba-42f2-a134-bccf857ba922_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/70d12c9c-0dbd-4a1a-bc44-1467502c9cf6_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/70fa1af4-27fd-4f26-bd03-50b6af6b9e24_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/717f82c2-7741-4f9b-85b8-d06aeb853f4f_209.json create mode 100644 packages/security_detection_engine/kibana/security_rule/71bccb61-e19b-452f-b104-79a60e546a95_113.json create mode 100644 packages/security_detection_engine/kibana/security_rule/71c5cb27-eca5-4151-bb47-64bc3f883270_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/71d6a53d-abbd-40df-afee-c21fff6aafb0_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/721999d0-7ab2-44bf-b328-6e63367b9b29_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7405ddf1-6c8e-41ce-818f-48bea6bcaed8_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7592c127-89fb-4209-a8f6-f9944dfd7e02_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/766d3f91-3f12-448c-b65f-20123e9e9e8c_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/76ddb638-abf7-42d5-be22-4a70b0bf7241_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/76e4d92b-61c1-4a95-ab61-5fd94179a1ee_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/76fd43b7-3480-4dd9-8ad7-8bd36bfad92f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/770e0c4d-b998-41e5-a62e-c7901fd7f470_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7787362c-90ff-4b1a-b313-8808b1020e64_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/79124edf-30a8-4d48-95c4-11522cad94b1_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/79f97b31-480e-4e63-a7f4-ede42bf2c6de_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7b8bfc26-81d2-435e-965c-d722ee397ef1_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7ba58110-ae13-439b-8192-357b0fcfa9d7_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7bcbb3ac-e533-41ad-a612-d6c3bf666aba_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7dfaaa17-425c-4fe7-bd36-83705fde7c2b_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7f370d54-c0eb-4270-ac5a-9a6020585dc6_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/7fb500fa-8e24-4bd1-9480-2a819352602c_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/80084fa9-8677-4453-8680-b891d3c0c778_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/814d96c7-2068-42aa-ba8e-fe0ddd565e2e_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/818e23e6-2094-4f0e-8c01-22d30f3506c6_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/81fe9dc6-a2d7-4192-a2d8-eed98afc766a_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/827f8d8f-4117-4ae4-b551-f56d54b9da6b_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/835c0622-114e-40b5-a346-f843ea5d01f1_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/846fe13f-6772-4c83-bd39-9d16d4ad1a81_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/84d1f8db-207f-45ab-a578-921d91c23eb2_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/850d901a-2a3c-46c6-8b22-55398a01aad8_110.json delete mode 100644 packages/security_detection_engine/kibana/security_rule/86c3157c-a951-4a4f-989b-2f0d0f1f9518_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/870aecc0-cea4-4110-af3f-e02e9b373655_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/871ea072-1b71-4def-b016-6278b505138d_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/884e87cc-c67b-4c90-a4ed-e1e24a940c82_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/88671231-6626-4e1b-abb7-6e361a171fbb_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/88817a33-60d3-411f-ba79-7c905d865b2a_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/88fdcb8c-60e5-46ee-9206-2663adf1b1ce_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/891cb88e-441a-4c3e-be2d-120d99fe7b0d_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/897dc6b5-b39f-432a-8d75-d3730d50c782_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/89f9a4b0-9f8f-4ee0-8823-c4751a6d6696_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/89fa6cb7-6b53-4de2-b604-648488841ab8_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8a024633-c444-45c0-a4fe-78128d8c1ab6_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8a0fbd26-867f-11ee-947c-f661ea17fbcd_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8a1d4831-3ce6-4859-9891-28931fa6101d_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8acb7614-1d92-4359-bfcf-478b6d9de150_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8af5b42f-8d74-48c8-a8d0-6d14b4197288_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8b2b3a62-a598-4293-bc14-3d5fa22bb98f_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8b4f0816-6a65-4630-86a6-c21c179c0d09_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8cb84371-d053-4f4f-bce0-c74990e28f28_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/8f919d4b-a5af-47ca-a594-6be59cd924a4_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/90169566-2260-4824-b8e4-8615c3b4ed52_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9092cd6c-650f-4fa3-8a8a-28256c7489c9_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/92984446-aefb-4d5e-ad12-598042ca80ba_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/92d3a04e-6487-4b62-892d-70e640a590dc_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/93b22c0a-06a0-4131-b830-b10d5e166ff4_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/93c1ce76-494c-4f01-8167-35edfb52f7b1_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/947827c6-9ed6-4dec-903e-c856c86e72f3_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/94a401ba-4fa2-455c-b7ae-b6e037afc0b7_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/954ee7c8-5437-49ae-b2d6-2960883898e9_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/959a7353-1129-4aa7-9084-30746b256a70_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/968ccab9-da51-4a87-9ce2-d3c9782fd759_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/96d11d31-9a79-480f-8401-da28b194608f_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/96e90768-c3b7-4df6-b5d9-6237f8bc36a8_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/97020e61-e591-4191-8a3b-2861a2b887cd_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/97314185-2568-4561-ae81-f3e480e5e695_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/97aba1ef-6034-4bd3-8c1a-1e0996b27afa_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/97db8b42-69d8-4bf3-9fd4-c69a1d895d68_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/98995807-5b09-4e37-8a54-5cae5dc932d7_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/99239e7d-b0d4-46e3-8609-acafcf99f68c_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/994e40aa-8c85-43de-825e-15f665375ee8_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9960432d-9b26-409f-972b-839a959e79e2_209.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9a3a3689-8ed1-4cdb-83fb-9506db54c61f_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9a5b4e31-6cde-4295-9ff7-6be1b8567e1b_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9aa0e1f6-52ce-42e1-abb3-09657cee2698_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9b80cb26-9966-44b5-abbf-764fbdbc3586_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9c260313-c811-4ec8-ab89-8f6530e0246c_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9ccf3ce0-0057-440a-91f5-870c6ad39093_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9d19ece6-c20e-481a-90c5-ccca596537de_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9f1c4ca3-44b5-481d-ba42-32dc215a2769_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9f962927-1a4f-45f3-a57b-287f2c7029c1_113.json create mode 100644 packages/security_detection_engine/kibana/security_rule/9f9a2a82-93a8-4b1a-8778-1780895626d4_210.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a00681e3-9ed6-447c-ab2c-be648821c622_309.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a0ddb77b-0318-41f0-91e4-8c1b5528834f_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a13167f1-eec2-4015-9631-1fee60406dcf_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a1329140-8de3-4445-9f87-908fb6d824f4_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a16612dd-b30e-4d41-86a0-ebe70974ec00_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a1699af0-8e1e-4ed0-8ec1-89783538a061_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a198fbbd-9413-45ec-a269-47ae4ccf59ce_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a1a0375f-22c2-48c0-81a4-7c2d11cc6856_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a22a09c2-2162-4df0-a356-9aacbeb56a04_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a2d04374-187c-4fd9-b513-3ad4e7fdd67a_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a3ea12f3-0d4e-4667-8b44-4230c63f3c75_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a577e524-c2ee-47bd-9c5b-e917d01d3276_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a5eb21b7-13cc-4b94-9fe2-29bb2914e037_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a61809f3-fb5b-465c-8bff-23a8a068ac60_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a624863f-a70d-417f-a7d2-7a404638d47f_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a6bf4dd4-743e-4da8-8c03-3ebd753a6c90_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a74c60cb-70ee-4629-a127-608ead14ebf1_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a7ccae7b-9d2c-44b2-a061-98e5946971fa_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a7e7bfa3-088e-4f13-b29e-3986e0e756b8_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a8d35ca0-ad8d-48a9-9f6c-553622dca61a_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/a9b05c3b-b304-4bf9-970d-acdfaef2944c_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/aa895aea-b69c-4411-b110-8d7599634b30_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/aa9a274d-6b53-424d-ac5e-cb8ca4251650_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/aaab30ec-b004-4191-95e1-4a14387ef6a6_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/aab184d3-72b3-4639-b242-6597c99d8bca_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ac412404-57a5-476f-858f-4e8fbb4f48d8_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ac5012b8-8da8-440b-aaaf-aedafdea2dff_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ac8805f6-1e08-406c-962e-3937057fa86f_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ac96ceb8-4399-4191-af1d-4feeac1f1f46_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/acd611f3-2b93-47b3-a0a3-7723bcc46f6d_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ace1e989-a541-44df-93a8-a8b0591b63c0_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/acf738b5-b5b2-4acc-bad9-1e18ee234f40_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ad0d2742-9a49-11ec-8d6b-acde48001122_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ad84d445-b1ce-4377-82d9-7c633f28bf9a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ad88231f-e2ab-491c-8fc6-64746da26cfe_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ad959eeb-2b7b-4722-ba08-a45f6622f005_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/adb961e0-cb74-42a0-af9e-29fc41f88f5f_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ae343298-97bc-47bc-9ea2-5f2ad831c16e_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ae8a142c-6a1d-4918-bea7-0b617e99ecfa_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/aebaa51f-2a91-4f6a-850b-b601db2293f4_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/afa135c0-a365-43ab-aa35-fd86df314a47_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/afcce5ad-65de-4ed2-8516-5e093d3ac99a_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/afd04601-12fc-4149-9b78-9c3f8fe45d39_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/afe6b0eb-dd9d-4922-b08a-1910124d524d_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b0046934-486e-462f-9487-0d4cf9e429c6_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b00bcd89-000c-4425-b94c-716ef67762f6_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b25a7df2-120a-4db2-bd3f-3e4b86b24bee_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b2951150-658f-4a60-832f-a00d1e6c6745_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b29ee2be-bf99-446c-ab1a-2dc0183394b8_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b41a13c6-ba45-4bab-a534-df53d0cfed6a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b4449455-f986-4b5a-82ed-e36b129331f7_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b51dbc92-84e2-4af1-ba47-65183fcd0c57_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b5877334-677f-4fb9-86d5-a9721274223b_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b5ea4bfe-a1b2-421f-9d47-22a75a6f2921_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b627cd12-dac4-11ec-9582-f661ea17fbcd_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b64b183e-1a76-422d-9179-7b389513e74d_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b661f86d-1c23-4ce7-a59e-2edbdba28247_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b7c05aaf-78c2-4558-b069-87fa25973489_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b81bd314-db5b-4d97-82e8-88e3e5fc9de5_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b8386923-b02c-4b94-986a-d223d9b01f88_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b83a7e96-2eb3-4edf-8346-427b6858d3bd_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b86afe07-0d98-4738-b15d-8d7465f95ff5_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b90cdde7-7e0d-4359-8bf0-2c112ce2008a_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b910f25a-2d44-47f2-a873-aabdc0d355e6_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b9554892-5e0e-424b-83a0-5aef95aa43bf_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b9666521-4742-49ce-9ddc-b8e84c35acae_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/b9960fef-82c6-4816-befa-44745030e917_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ba81c182-4287-489d-af4d-8ae834b06040_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/baa5d22c-5e1c-4f33-bfc9-efa73bb53022_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bba1b212-b85c-41c6-9b28-be0e5cdfc9b1_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bbd1a775-8267-41fa-9232-20e5582596ac_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bc0fc359-68db-421e-a435-348ced7a7f92_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bc1eeacf-2972-434f-b782-3a532b100d67_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bcaa15ce-2d41-44d7-a322-918f9db77766_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bd2c86a0-8b61-4457-ab38-96943984e889_112.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bd7eefee-f671-494e-98df-f01daf9e5f17_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bdb04043-f0e3-4efa-bdee-7d9d13fa9edc_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bdcf646b-08d4-492c-870a-6c04e3700034_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bdfebe11-e169-42e3-b344-c5d2015533d3_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/be4c5aed-90f5-4221-8bd5-7ab3a4334751_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/be8afaed-4bcd-4e0a-b5f9-5562003dde81_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bf8c007c-7dee-4842-8e9a-ee534c09d205_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bfba5158-1fd6-4937-a205-77d96213b341_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/bfeaf89b-a2a7-48a3-817f-e41829dc61ee_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c0429aa8-9974-42da-bfb6-53a0a515a145_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c125e48f-6783-41f0-b100-c3bf1b114d16_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c25e9c87-95e1-4368-bfab-9fd34cf867ec_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c292fa52-4115-408a-b897-e14f684b3cb7_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c296f888-eac6-4543-8da5-b6abb0d3304f_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c2d90150-0133-451c-a783-533e736c12d7_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c3b915e0-22f3-4bf7-991d-b643513c722f_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c4818812-d44f-47be-aaef-4cfb2f9cc799_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c57f8579-e2a5-4804-847f-f2732edc5156_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c5c9f591-d111-4cf8-baec-c26a39bc31ef_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c5ce48a6-7f57-4ee8-9313-3d0024caee10_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c5dc3223-13a2-44a2-946c-e9dc0aa0449c_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c6453e73-90eb-4fe7-a98c-cde7bbfc504a_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c7894234-7814-44c2-92a9-f7d851ea246a_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c81cefcb-82b9-4408-a533-3c3df549e62d_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c85eb82c-d2c8-485c-a36f-534f914b7663_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c8935a8b-634a-4449-98f7-bb24d3b2c0af_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c8b150f0-0164-475b-a75e-74b47800a9ff_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/c8cccb06-faf2-4cd5-886e-2c9636cfcb87_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ca79768e-40e1-4e45-a097-0e5fbc876ac2_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ca98c7cf-a56e-4057-a4e8-39603f7f0389_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cac91072-d165-11ec-a764-f661ea17fbce_213.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cc2fd2d0-ba3a-4939-b87f-2901764ed036_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cc653d77-ddd2-45b1-9197-c75ad19df66c_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cd66a5af-e34b-4bb0-8931-57d0a043f2ef_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cde1bafa-9f01-4f43-a872-605b678968b0_10.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ce64d965-6cb0-466d-b74f-8d2c76f47f05_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cf6995ec-32a9-4b2d-9340-f8e61acf3f4e_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/cff92c41-2225-4763-b4ce-6f71e5bda5e6_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d00f33e7-b57d-4023-9952-2db91b1767c4_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d0e159cf-73e9-40d1-a9ed-077e3158a855_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d117cbb4-7d56-41b4-b999-bdf8c25648a0_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d22a85c6-d2ad-4cc4-bf7b-54787473669a_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d31f183a-e5b1-451b-8534-ba62bca0b404_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d331bbe2-6db4-4941-80a5-8270db72eb61_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d461fac0-43e8-49e2-85ea-3a58fe120b4f_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d55436a8-719c-445f-92c4-c113ff2f9ba5_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d55abdfb-5384-402b-add4-6c401501b0c3_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d563aaba-2e72-462b-8658-3e5ea22db3a6_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d68e95ad-1c82-4074-a12a-125fe10ac8ba_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d703a5af-d5b0-43bd-8ddb-7a5d500b7da5_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d72e33fc-6e91-42ff-ac8b-e573268c5a87_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d743ff2a-203e-4a46-a3e3-40512cfe8fbb_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d74d6506-427a-4790-b170-0c2a6ddac799_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d75991f2-b989-419d-b797-ac1e54ec2d61_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d76b02ef-fc95-4001-9297-01cb7412232f_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d7e62693-aab9-4f66-a21a-3d79ecdd603d_104.json create mode 100644 packages/security_detection_engine/kibana/security_rule/d99a037b-c8e2-47a5-97b9-170d076827c4_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/da7733b1-fe08-487e-b536-0a04c6d8b0cd_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/da7f5803-1cd4-42fd-a890-0173ae80ac69_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/dc0b7782-0df0-47ff-8337-db0d678bdb66_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/dc71c186-9fe4-4437-a4d0-85ebb32b8204_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/dc9c1f74-dac3-48e3-b47f-eb79db358f57_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ddab1f5f-7089-44f5-9fda-de5b11322e77_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/de9bd7e0-49e9-4e92-a64d-53ade2e66af1_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/debff20a-46bc-4a4d-bae5-5cdd14222795_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/df6f62d9-caab-4b88-affa-044f4395a1e0_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e052c845-48d0-4f46-8a13-7d0aba05df82_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e0cc3807-e108-483c-bf66-5a4fbe0d7e89_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e12c0318-99b1-44f2-830c-3a38a43207ca_206.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e19e64ee-130e-4c07-961f-8a339f0b8362_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e1db8899-97c1-4851-8993-3a3265353601_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e2258f48-ba75-4248-951b-7c885edf18c2_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e26f042e-c590-4e82-8e05-41e81bd822ad_112.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e28b8093-833b-4eda-b877-0873d134cf3c_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e2f9fdf5-8076-45ad-9427-41e0e03dc9c2_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e3343ab9-4245-4715-b344-e11c56b0a47f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e3cf38fa-d5b8-46cc-87f9-4a7513e4281d_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e3e904b3-0a8e-4e68-86a8-977a163e21d3_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e514d8cd-ed15-4011-84e2-d15147e059f1_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e6c98d38-633d-4b3e-9387-42112cd5ac10_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e6e8912f-283f-4d0d-8442-e0dcaf49944b_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e7125cea-9fe1-42a5-9a05-b0792cf86f5a_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e72f87d0-a70e-4f8d-8443-a6407bc34643_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e7cb3cfd-aaa3-4d7b-af18-23b89955062c_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e7cd5982-17c8-4959-874c-633acde7d426_206.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e86da94d-e54b-4fb5-b96c-cecff87e8787_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e88d1fe9-b2f4-48d4-bace-a026dc745d4b_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e9001ee6-2d00-4d2f-849e-b8b1fb05234c_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e92c99b6-c547-4bb6-b244-2f27394bc849_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e94262f2-c1e9-4d3f-a907-aeab16712e1a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/e9b0902b-c515-413b-b80b-a8dcebc81a66_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ea09ff26-3902-4c53-bb8e-24b7a5d029dd_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eaef8a35-12e0-4ac0-bc14-81c72b6bd27c_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eb44611f-62a8-4036-a5ef-587098be6c43_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eb610e70-f9e6-4949-82b9-f1c5bcd37c39_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eb9eb8ba-a983-41d9-9c93-a1c05112ca5e_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ebf1adea-ccf2-4943-8b96-7ab11ca173a5_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ebfe1448-7fac-4d59-acea-181bd89b1f7f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ec8efb0c-604d-42fa-ac46-ed1cfbc38f78_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eda499b8-a073-4e35-9733-22ec71f57f3a_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/edf8ee23-5ea7-4123-ba19-56b41e424ae3_111.json create mode 100644 packages/security_detection_engine/kibana/security_rule/edfd5ca9-9d6c-44d9-b615-1e56b920219c_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ee5300a7-7e31-4a72-a258-250abb8b3aa1_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/eea82229-b002-470e-a9e1-00be38b14d32_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ef04a476-07ec-48fc-8f3d-5e1742de76d3_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ef100a2e-ecd4-4f72-9d1e-2f779ff3c311_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ef862985-3f13-4262-a686-5f357bbb9bc2_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ef8cc01c-fc49-4954-a175-98569c646740_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f036953a-4615-4707-a1ca-dc53bf69dcd5_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f0493cb4-9b15-43a9-9359-68c23a7f2cf3_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f0eb70e9-71e9-40cd-813f-bf8e8c812cb1_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f24bcae1-8980-4b30-b5dd-f851b055c9e7_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f28e2be4-6eca-4349-bdd9-381573730c22_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f2c7b914-eda3-40c2-96ac-d23ef91776ca_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f2f46686-6f3c-4724-bd7d-24e31c70f98f_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f3403393-1fd9-4686-8f6e-596c58bc00b4_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f3475224-b179-4f78-8877-c2bd64c26b88_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f3818c85-2207-4b51-8a28-d70fb156ee87_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f3e22c8b-ea47-45d1-b502-b57b6de950b3_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f41296b4-9975-44d6-9486-514c6f635b2d_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f44fa4b6-524c-4e87-8d9e-a32599e4fb7c_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f494c678-3c33-43aa-b169-bb3d5198c41d_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f580bf0a-2d23-43bb-b8e1-17548bb947ec_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f5861570-e39a-4b8a-9259-abd39f84cb97_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f5c005d3-4e17-48b0-9cd7-444d48857f97_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f5fb4598-4f10-11ed-bdc3-0242ac120002_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f63c8e3c-d396-404f-b2ea-0379d3942d73_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f683dcdf-a018-4801-b066-193d4ae6c8e5_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f75f65cf-ed04-48df-a7ff-b02a8bfe636e_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f7c4dc5a-a58d-491d-9f14-9b66507121c0_110.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f7c70f2e-4616-439c-85ac-5b98415042fe_2.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f81ee52c-297e-46d9-9205-07e66931df26_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f85ce03f-d8a8-4c83-acdc-5c8cd0592be7_106.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f874315d-5188-4b4a-8521-d1c73093a7e4_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/f9790abf-bd0c-45f9-8b5f-d0b74015e029_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fa01341d-6662-426b-9d0c-6d81e33c8a9d_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fa210b61-b627-4e5e-86f4-17e8270656ab_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fa3a59dc-33c3-43bf-80a9-e8437a922c7f_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fa488440-04cc-41d7-9279-539387bf2a17_8.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fac52c69-2646-4e79-89c0-fd7653461010_6.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fb02b8d3-71ee-4af1-bacd-215d23f17efa_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fc7c0fa4-8f03-4b3e-8336-c5feab0be022_108.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fd4a992d-6130-4802-9ff8-829b89ae801f_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fd7a6052-58fa-4397-93c3-4795249ccfa2_210.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fda1d332-5e08-4f27-8a9b-8c802e3292a6_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fddff193-48a3-484d-8d35-90bb3d323a56_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fe25d5bc-01fa-494a-95ff-535c29cc4c96_5.json create mode 100644 packages/security_detection_engine/kibana/security_rule/fe794edd-487f-4a90-b285-3ee54f2af2d3_109.json create mode 100644 packages/security_detection_engine/kibana/security_rule/feeed87c-5e95-4339-aef1-47fd79bcfbe3_107.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ff0d807d-869b-4a0d-a493-52bc46d2f1b1_3.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ff10d4d8-fea7-422d-afb1-e5a2702369a9_9.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ff4dd44a-0ac6-44c4-8609-3f81bc820f02_105.json create mode 100644 packages/security_detection_engine/kibana/security_rule/ff9bc8b9-f03b-4283-be58-ee0a16f5a11b_5.json diff --git a/packages/security_detection_engine/changelog.yml b/packages/security_detection_engine/changelog.yml index c8e4dfc8468..a0c4b07cff9 100644 --- a/packages/security_detection_engine/changelog.yml +++ b/packages/security_detection_engine/changelog.yml @@ -1,5 +1,10 @@ # newer versions go on top # NOTE: please use pre-release versions (e.g. -beta.0) until a package is ready for production +- version: 8.13.2-beta.1 + changes: + - description: Release security rules update + type: enhancement + link: https://github.com/elastic/integrations/pulls/9412 - version: 8.13.1 changes: - description: Release security rules update diff --git a/packages/security_detection_engine/kibana/security_rule/00140285-b827-4aee-aa09-8113f58a08f3_111.json b/packages/security_detection_engine/kibana/security_rule/00140285-b827-4aee-aa09-8113f58a08f3_111.json new file mode 100644 index 00000000000..0a8c97b3479 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/00140285-b827-4aee-aa09-8113f58a08f3_111.json @@ -0,0 +1,141 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of known Windows utilities often abused to dump LSASS memory or the Active Directory database (NTDS.dit) in preparation for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via Windows Utilities", + "note": "## Triage and analysis\n\n### Investigating Potential Credential Access via Windows Utilities\n\nLocal Security Authority Server Service (LSASS) is a process in Microsoft Windows operating systems that is responsible for enforcing security policy on the system. It verifies users logging on to a Windows computer or server, handles password changes, and creates access tokens.\n\nThe `Ntds.dit` file is a database that stores Active Directory data, including information about user objects, groups, and group membership.\n\nThis rule looks for the execution of utilities that can extract credential data from the LSASS memory and Active Directory `Ntds.dit` file.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate abnormal behaviors observed by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the command line to identify what information was targeted.\n- Identify the target computer and its role in the IT environment.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If the host is a domain controller (DC):\n - Activate your incident response plan for total Active Directory compromise.\n - Review the privileges assigned to users that can access the DCs, to ensure that the least privilege principle is being followed and to reduce the attack surface.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n (\n (?process.pe.original_file_name : \"procdump\" or process.name : \"procdump.exe\") and process.args : \"-ma\"\n ) or\n (\n process.name : \"ProcessDump.exe\" and not process.parent.executable regex~ \"\"\"C:\\\\Program Files( \\(x86\\))?\\\\Cisco Systems\\\\.*\"\"\"\n ) or\n (\n (?process.pe.original_file_name : \"WriteMiniDump.exe\" or process.name : \"WriteMiniDump.exe\") and\n not process.parent.executable regex~ \"\"\"C:\\\\Program Files( \\(x86\\))?\\\\Steam\\\\.*\"\"\"\n ) or\n (\n (?process.pe.original_file_name : \"RUNDLL32.EXE\" or process.name : \"RUNDLL32.exe\") and\n (process.args : \"MiniDump*\" or process.command_line : \"*comsvcs.dll*#24*\")\n ) or\n (\n (?process.pe.original_file_name : \"RdrLeakDiag.exe\" or process.name : \"RdrLeakDiag.exe\") and\n process.args : \"/fullmemdmp\"\n ) or\n (\n (?process.pe.original_file_name : \"SqlDumper.exe\" or process.name : \"SqlDumper.exe\") and\n process.args : \"0x01100*\") or\n (\n (?process.pe.original_file_name : \"TTTracer.exe\" or process.name : \"TTTracer.exe\") and\n process.args : \"-dumpFull\" and process.args : \"-attach\") or\n (\n (?process.pe.original_file_name : \"ntdsutil.exe\" or process.name : \"ntdsutil.exe\") and\n process.args : \"create*full*\") or\n (\n (?process.pe.original_file_name : \"diskshadow.exe\" or process.name : \"diskshadow.exe\") and process.args : \"/s\")\n)\n", + "references": [ + "https://lolbas-project.github.io/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "00140285-b827-4aee-aa09-8113f58a08f3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + }, + { + "id": "T1003.003", + "name": "NTDS", + "reference": "https://attack.mitre.org/techniques/T1003/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "00140285-b827-4aee-aa09-8113f58a08f3_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0136b315-b566-482f-866c-1d8e2477ba16_105.json b/packages/security_detection_engine/kibana/security_rule/0136b315-b566-482f-866c-1d8e2477ba16_105.json new file mode 100644 index 00000000000..2c2df5b5bfe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0136b315-b566-482f-866c-1d8e2477ba16_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when a user has been restricted from sending email due to exceeding sending limits of the service policies per the Security Compliance Center.", + "false_positives": [ + "A user sending emails using personal distribution folders may trigger the event." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 User Restricted from Sending Email", + "note": "", + "query": "event.dataset:o365.audit and event.provider:SecurityComplianceCenter and event.category:web and event.action:\"User restricted from sending email\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/cloud-app-security/anomaly-detection-policy", + "https://docs.microsoft.com/en-us/cloud-app-security/policy-template-reference" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0136b315-b566-482f-866c-1d8e2477ba16", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "0136b315-b566-482f-866c-1d8e2477ba16_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/027ff9ea-85e7-42e3-99d2-bbb7069e02eb_105.json b/packages/security_detection_engine/kibana/security_rule/027ff9ea-85e7-42e3-99d2-bbb7069e02eb_105.json new file mode 100644 index 00000000000..1a73939d6f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/027ff9ea-85e7-42e3-99d2-bbb7069e02eb_105.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a Chromium based browser with the debugging process argument, which may indicate an attempt to steal authentication cookies. An adversary may steal web application or service session cookies and use them to gain access web applications or Internet services as an authenticated user without needing credentials.", + "false_positives": [ + "Developers performing browsers plugin or extension debugging." + ], + "from": "now-9m", + "index": [ + "auditbeat-*", + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Potential Cookies Theft via Browser Debugging", + "query": "process where event.type in (\"start\", \"process_started\", \"info\") and\n process.name in (\n \"Microsoft Edge\",\n \"chrome.exe\",\n \"Google Chrome\",\n \"google-chrome-stable\",\n \"google-chrome-beta\",\n \"google-chrome\",\n \"msedge.exe\") and\n process.args : (\"--remote-debugging-port=*\",\n \"--remote-debugging-targets=*\",\n \"--remote-debugging-pipe=*\") and\n process.args : \"--user-data-dir=*\" and not process.args:\"--remote-debugging-port=0\"\n", + "references": [ + "https://github.com/defaultnamehere/cookie_crimes", + "https://embracethered.com/blog/posts/2020/cookie-crimes-on-mirosoft-edge/", + "https://github.com/rapid7/metasploit-framework/blob/master/documentation/modules/post/multi/gather/chrome_cookies.md", + "https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "027ff9ea-85e7-42e3-99d2-bbb7069e02eb", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: Windows", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1539", + "name": "Steal Web Session Cookie", + "reference": "https://attack.mitre.org/techniques/T1539/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 105 + }, + "id": "027ff9ea-85e7-42e3-99d2-bbb7069e02eb_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/02a4576a-7480-4284-9327-548a806b5e48_208.json b/packages/security_detection_engine/kibana/security_rule/02a4576a-7480-4284-9327-548a806b5e48_208.json new file mode 100644 index 00000000000..c57f3d8d643 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/02a4576a-7480-4284-9327-548a806b5e48_208.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious access to an LSASS handle via DuplicateHandle from an unknown call trace module. This may indicate an attempt to bypass the NtOpenProcess API to evade detection and dump LSASS memory for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via DuplicateHandle in LSASS", + "query": "process where host.os.type == \"windows\" and event.code == \"10\" and\n\n /* LSASS requesting DuplicateHandle access right to another process */\n process.name : \"lsass.exe\" and winlog.event_data.GrantedAccess == \"0x40\" and\n\n /* call is coming from an unknown executable region */\n winlog.event_data.CallTrace : \"*UNKNOWN*\"\n", + "references": [ + "https://github.com/CCob/MirrorDump" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.GrantedAccess", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "02a4576a-7480-4284-9327-548a806b5e48", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 208 + }, + "id": "02a4576a-7480-4284-9327-548a806b5e48_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/02ea4563-ec10-4974-b7de-12e65aa4f9b3_106.json b/packages/security_detection_engine/kibana/security_rule/02ea4563-ec10-4974-b7de-12e65aa4f9b3_106.json new file mode 100644 index 00000000000..2dea41db489 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/02ea4563-ec10-4974-b7de-12e65aa4f9b3_106.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of macOS built-in commands used to dump user account hashes. Adversaries may attempt to dump credentials to obtain account login information in the form of a hash. These hashes can be cracked or leveraged for lateral movement.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Dumping Account Hashes via Built-In Commands", + "query": "event.category:process and host.os.type:macos and event.type:start and\n process.name:(defaults or mkpassdb) and process.args:(ShadowHashData or \"-dump\")\n", + "references": [ + "https://apple.stackexchange.com/questions/186893/os-x-10-9-where-are-password-hashes-stored", + "https://www.unix.com/man-page/osx/8/mkpassdb/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "02ea4563-ec10-4974-b7de-12e65aa4f9b3", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "02ea4563-ec10-4974-b7de-12e65aa4f9b3_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/03024bd9-d23f-4ec1-8674-3cf1a21e130b_105.json b/packages/security_detection_engine/kibana/security_rule/03024bd9-d23f-4ec1-8674-3cf1a21e130b_105.json new file mode 100644 index 00000000000..9bfbb70fdd6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/03024bd9-d23f-4ec1-8674-3cf1a21e130b_105.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a safe attachment rule is disabled in Microsoft 365. Safe attachment rules can extend malware protections to include routing all messages and attachments without a known malware signature to a special hypervisor environment. An adversary or insider threat may disable a safe attachment rule to exfiltrate data or evade defenses.", + "false_positives": [ + "A safe attachment rule may be disabled by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Safe Attachment Rule Disabled", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Disable-SafeAttachmentRule\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/disable-safeattachmentrule?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "03024bd9-d23f-4ec1-8674-3cf1a21e130b", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "low", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "03024bd9-d23f-4ec1-8674-3cf1a21e130b_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/035889c4-2686-4583-a7df-67f89c292f2c_108.json b/packages/security_detection_engine/kibana/security_rule/035889c4-2686-4583-a7df-67f89c292f2c_108.json new file mode 100644 index 00000000000..352aa4d6e6c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/035889c4-2686-4583-a7df-67f89c292f2c_108.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies a high number (10) of process terminations (stop, delete, or suspend) from the same host within a short time period.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "High Number of Process and/or Service Terminations", + "note": "## Triage and analysis\n\n### Investigating High Number of Process and/or Service Terminations\n\nAttackers can stop services and kill processes for a variety of purposes. For example, they can stop services associated with business applications and databases to release the lock on files used by these applications so they may be encrypted, or stop security and backup solutions, etc.\n\nThis rule identifies a high number (10) of service and/or process terminations (stop, delete, or suspend) from the same host within a short time period.\n\n#### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check if any files on the host machine have been encrypted.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further destructive behavior, which is commonly associated with this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system or restore it to the operational state.\n- If any other destructive action was identified on the host, it is recommended to prioritize the investigation and look for ransomware preparation and execution activities.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and event.type:start and process.name:(net.exe or sc.exe or taskkill.exe) and\n process.args:(stop or pause or delete or \"/PID\" or \"/IM\" or \"/T\" or \"/F\" or \"/t\" or \"/f\" or \"/im\" or \"/pid\") and\n not process.parent.name:osquerybeat.exe\n", + "references": [ + "https://www.elastic.co/security-labs/luna-ransomware-attack-pattern" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "035889c4-2686-4583-a7df-67f89c292f2c", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1489", + "name": "Service Stop", + "reference": "https://attack.mitre.org/techniques/T1489/" + } + ] + } + ], + "threshold": { + "field": [ + "host.id" + ], + "value": 10 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 108 + }, + "id": "035889c4-2686-4583-a7df-67f89c292f2c_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/035a6f21-4092-471d-9cda-9e379f459b1e_2.json b/packages/security_detection_engine/kibana/security_rule/035a6f21-4092-471d-9cda-9e379f459b1e_2.json new file mode 100644 index 00000000000..8fee74b35ac --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/035a6f21-4092-471d-9cda-9e379f459b1e_2.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Monitors for the execution of Unix utilities that may be leveraged as memory address seekers. Attackers may leverage built-in utilities to seek specific memory addresses, allowing for potential future manipulation/exploitation.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Memory Seeking Activity", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and (\n (process.name == \"tail\" and process.args == \"-c\") or\n (process.name == \"cmp\" and process.args == \"-i\") or\n (process.name in (\"hexdump\", \"xxd\") and process.args == \"-s\") or\n (process.name == \"dd\" and process.args : (\"skip*\", \"seek*\"))\n)\n", + "references": [ + "https://github.com/arget13/DDexec" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "035a6f21-4092-471d-9cda-9e379f459b1e", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "035a6f21-4092-471d-9cda-9e379f459b1e_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0369e8a6-0fa7-4e7a-961a-53180a4c966e_2.json b/packages/security_detection_engine/kibana/security_rule/0369e8a6-0fa7-4e7a-961a-53180a4c966e_2.json new file mode 100644 index 00000000000..5e99da927b1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0369e8a6-0fa7-4e7a-961a-53180a4c966e_2.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for dynamic linker discovery via the od utility. od (octal dump) is a command-line utility in Unix operating systems used for displaying data in various formats, including octal, hexadecimal, decimal, and ASCII, primarily used for examining and debugging binary files or data streams. Attackers can leverage od to analyze the dynamic linker by identifying injection points and craft exploits based on the observed behaviors and structures within these files.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Dynamic Linker Discovery via od", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"od\" and process.args in (\n \"/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\", \"/etc/ld.so.preload\", \"/lib64/ld-linux-x86-64.so.2\",\n \"/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\", \"/usr/lib64/ld-linux-x86-64.so.2\"\n)\n", + "references": [ + "https://github.com/arget13/DDexec" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0369e8a6-0fa7-4e7a-961a-53180a4c966e", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "0369e8a6-0fa7-4e7a-961a-53180a4c966e_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/03c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3.json b/packages/security_detection_engine/kibana/security_rule/03c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3.json new file mode 100644 index 00000000000..caca9fe3496 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/03c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This threshold rule monitors for the rapid execution of unix utilities that are capable of conducting network scans. Adversaries may leverage built-in tools such as ping, netcat or socat to execute ping sweeps across the network while attempting to evade detection or due to the lack of network mapping tools available on the compromised host.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Network Scan Executed From Host", + "query": "event.category:process and host.os.type:linux and event.action:(exec or exec_event or executed or process_started) and\nevent.type:start and process.name:(ping or nping or hping or hping2 or hping3 or nc or ncat or netcat or socat)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "03c23d45-d3cb-4ad4-ab5d-b361ffe8724a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1046", + "name": "Network Service Discovery", + "reference": "https://attack.mitre.org/techniques/T1046/" + } + ] + } + ], + "threshold": { + "cardinality": [ + { + "field": "process.args", + "value": 100 + } + ], + "field": [ + "host.id", + "process.parent.entity_id", + "process.executable" + ], + "value": 1 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 3 + }, + "id": "03c23d45-d3cb-4ad4-ab5d-b361ffe8724a_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0415f22a-2336-45fa-ba07-618a5942e22c_109.json b/packages/security_detection_engine/kibana/security_rule/0415f22a-2336-45fa-ba07-618a5942e22c_109.json new file mode 100644 index 00000000000..d503d3c25e8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0415f22a-2336-45fa-ba07-618a5942e22c_109.json @@ -0,0 +1,152 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may modify SSH related binaries for persistence or credential access by patching sensitive functions to enable unauthorized access or by logging SSH credentials for exfiltration.", + "false_positives": [ + "Trusted OpenSSH executable updates. It's recommended to verify the integrity of OpenSSH binary changes." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Modification of OpenSSH Binaries", + "note": "## Triage and analysis\n\n### Investigating Modification of OpenSSH Binaries\n\nOpenSSH is a widely used suite of secure networking utilities based on the Secure Shell (SSH) protocol, which provides encrypted communication sessions over a computer network.\n\nAdversaries may exploit OpenSSH by modifying its binaries, such as `/usr/bin/scp`, `/usr/bin/sftp`, `/usr/bin/ssh`, `/usr/sbin/sshd`, or `libkeyutils.so`, to gain unauthorized access or exfiltrate SSH credentials.\n\nThe detection rule 'Modification of OpenSSH Binaries' is designed to identify such abuse by monitoring file changes in the Linux environment. It triggers an alert when a process, modifies any of the specified OpenSSH binaries or libraries. This helps security analysts detect potential malicious activities and take appropriate action.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False positive analysis\n\n- Regular users should not need to modify OpenSSH binaries, which makes false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator that performed these actions for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:file and host.os.type:linux and event.type:change and \n process.name:(* and not (dnf or dnf-automatic or dpkg or yum or rpm or yum-cron or anacron or platform-python)) and \n (file.path:(/usr/bin/scp or \n /usr/bin/sftp or \n /usr/bin/ssh or \n /usr/sbin/sshd) or \n file.name:libkeyutils.so) and\n not process.executable:/usr/share/elasticsearch/*\n", + "references": [ + "https://blog.angelalonso.es/2016/09/anatomy-of-real-linux-intrusion-part-ii.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0415f22a-2336-45fa-ba07-618a5942e22c", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Persistence", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1556", + "name": "Modify Authentication Process", + "reference": "https://attack.mitre.org/techniques/T1556/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.004", + "name": "SSH", + "reference": "https://attack.mitre.org/techniques/T1021/004/" + } + ] + }, + { + "id": "T1563", + "name": "Remote Service Session Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/", + "subtechnique": [ + { + "id": "T1563.001", + "name": "SSH Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 109 + }, + "id": "0415f22a-2336-45fa-ba07-618a5942e22c_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/053a0387-f3b5-4ba5-8245-8002cca2bd08_109.json b/packages/security_detection_engine/kibana/security_rule/053a0387-f3b5-4ba5-8245-8002cca2bd08_109.json new file mode 100644 index 00000000000..544aa123d81 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/053a0387-f3b5-4ba5-8245-8002cca2bd08_109.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Dennis Perto" + ], + "description": "Identifies a Windows trusted program that is known to be vulnerable to DLL Search Order Hijacking starting after being renamed or from a non-standard path. This is uncommon behavior and may indicate an attempt to evade defenses via side-loading a malicious DLL within the memory space of one of those processes.", + "false_positives": [ + "Microsoft Antimalware Service Executable installed on non default installation path." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential DLL Side-Loading via Microsoft Antimalware Service Executable", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n (process.pe.original_file_name == \"MsMpEng.exe\" and not process.name : \"MsMpEng.exe\") or\n (process.name : \"MsMpEng.exe\" and not\n process.executable : (\"?:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\*.exe\",\n \"?:\\\\Program Files\\\\Windows Defender\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\Windows Defender\\\\*.exe\",\n \"?:\\\\Program Files\\\\Microsoft Security Client\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft Security Client\\\\*.exe\"))\n)\n", + "references": [ + "https://news.sophos.com/en-us/2021/07/04/independence-day-revil-uses-supply-chain-exploit-to-attack-hundreds-of-businesses/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "053a0387-f3b5-4ba5-8245-8002cca2bd08", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.002", + "name": "DLL Side-Loading", + "reference": "https://attack.mitre.org/techniques/T1574/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "053a0387-f3b5-4ba5-8245-8002cca2bd08_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0564fb9d-90b9-4234-a411-82a546dc1343_109.json b/packages/security_detection_engine/kibana/security_rule/0564fb9d-90b9-4234-a411-82a546dc1343_109.json new file mode 100644 index 00000000000..d6ecc600a2c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0564fb9d-90b9-4234-a411-82a546dc1343_109.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the Internet Information Services (IIS) command-line tool, AppCmd, being used to list passwords. An attacker with IIS web server access via a web shell can decrypt and dump the IIS AppPool service account password using AppCmd.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Microsoft IIS Service Account Password Dumped", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"appcmd.exe\" or ?process.pe.original_file_name == \"appcmd.exe\") and\n process.args : \"/list\" and process.args : \"/text*password\"\n", + "references": [ + "https://blog.netspi.com/decrypting-iis-passwords-to-break-out-of-the-dmz-part-1/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "0564fb9d-90b9-4234-a411-82a546dc1343", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "0564fb9d-90b9-4234-a411-82a546dc1343_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/05b358de-aa6d-4f6c-89e6-78f74018b43b_109.json b/packages/security_detection_engine/kibana/security_rule/05b358de-aa6d-4f6c-89e6-78f74018b43b_109.json new file mode 100644 index 00000000000..891e73f0b55 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/05b358de-aa6d-4f6c-89e6-78f74018b43b_109.json @@ -0,0 +1,128 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects when the Console Window Host (conhost.exe) process is spawned by a suspicious parent process, which could be indicative of code injection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Conhost Spawned By Suspicious Parent Process", + "note": "## Triage and analysis\n\n### Investigating Conhost Spawned By Suspicious Parent Process\n\nThe Windows Console Host, or `conhost.exe`, is both the server application for all of the Windows Console APIs as well as the classic Windows user interface for working with command-line applications.\n\nAttackers often rely on custom shell implementations to avoid using built-in command interpreters like `cmd.exe` and `PowerShell.exe` and bypass application allowlisting and security features. Attackers commonly inject these implementations into legitimate system processes.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate abnormal behaviors observed by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Retrieve the parent process executable and determine if it is malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- Suspicious Process from Conhost - 28896382-7d4f-4d50-9b72-67091901fd26\n- Suspicious PowerShell Engine ImageLoad - 852c1f19-68e8-43a6-9dce-340771fe1be3\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"conhost.exe\" and\n process.parent.name : (\"lsass.exe\", \"services.exe\", \"smss.exe\", \"winlogon.exe\", \"explorer.exe\", \"dllhost.exe\", \"rundll32.exe\",\n \"regsvr32.exe\", \"userinit.exe\", \"wininit.exe\", \"spoolsv.exe\", \"ctfmon.exe\") and\n not (process.parent.name : \"rundll32.exe\" and\n process.parent.args : (\"?:\\\\Windows\\\\Installer\\\\MSI*.tmp,zzzzInvokeManagedCustomActionOutOfProc\",\n \"?:\\\\WINDOWS\\\\system32\\\\PcaSvc.dll,PcaPatchSdbTask\",\n \"?:\\\\WINDOWS\\\\system32\\\\davclnt.dll,DavSetCookie\"))\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2017/08/monitoring-windows-console-activity-part-one.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "05b358de-aa6d-4f6c-89e6-78f74018b43b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "05b358de-aa6d-4f6c-89e6-78f74018b43b_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/05cad2fb-200c-407f-b472-02ea8c9e5e4a_4.json b/packages/security_detection_engine/kibana/security_rule/05cad2fb-200c-407f-b472-02ea8c9e5e4a_4.json new file mode 100644 index 00000000000..ca576edf2af --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/05cad2fb-200c-407f-b472-02ea8c9e5e4a_4.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors the syslog log file for messages related to instances of a tainted kernel module load. Rootkits often leverage kernel modules as their main defense evasion technique. Detecting tainted kernel module loads is crucial for ensuring system security and integrity, as malicious or unauthorized modules can compromise the kernel and lead to system vulnerabilities or unauthorized access.", + "from": "now-9m", + "index": [ + "logs-system.syslog-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Tainted Kernel Module Load", + "query": "host.os.type:linux and event.dataset:\"system.syslog\" and process.name:kernel and \nmessage:\"module verification failed: signature and/or required key missing - tainting kernel\"\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "message", + "type": "match_only_text" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "05cad2fb-200c-407f-b472-02ea8c9e5e4a", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Filebeat\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat for the Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete Setup and Run Filebeat information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the Filebeat System Module to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "05cad2fb-200c-407f-b472-02ea8c9e5e4a_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/05e5a668-7b51-4a67-93ab-e9af405c9ef3_108.json b/packages/security_detection_engine/kibana/security_rule/05e5a668-7b51-4a67-93ab-e9af405c9ef3_108.json new file mode 100644 index 00000000000..f56998c5330 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/05e5a668-7b51-4a67-93ab-e9af405c9ef3_108.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a terminal (tty) is spawned via Perl. Attackers may upgrade a simple reverse shell to a fully interactive tty after obtaining initial access to a host.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Interactive Terminal Spawned via Perl", + "query": "event.category:process and host.os.type:linux and event.type:(start or process_started) and process.name:perl and\n process.args:(\"exec \\\"/bin/sh\\\";\" or \"exec \\\"/bin/dash\\\";\" or \"exec \\\"/bin/bash\\\";\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "05e5a668-7b51-4a67-93ab-e9af405c9ef3", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "05e5a668-7b51-4a67-93ab-e9af405c9ef3_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0635c542-1b96-4335-9b47-126582d2c19a_111.json b/packages/security_detection_engine/kibana/security_rule/0635c542-1b96-4335-9b47-126582d2c19a_111.json new file mode 100644 index 00000000000..b090b7e7f61 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0635c542-1b96-4335-9b47-126582d2c19a_111.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Discovery of remote system information using built-in commands, which may be used to move laterally.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote System Discovery Commands", + "note": "## Triage and analysis\n\n### Investigating Remote System Discovery Commands\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `arp` or `nbstat` utilities to enumerate remote systems in the environment, which is useful for attackers to identify lateral movement targets.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n ((process.name : \"nbtstat.exe\" and process.args : (\"-n\", \"-s\")) or\n (process.name : \"arp.exe\" and process.args : \"-a\") or\n (process.name : \"nltest.exe\" and process.args : (\"/dclist\", \"/dsgetdc\")) or\n (process.name : \"nslookup.exe\" and process.args : \"*_ldap._tcp.dc.*\") or\n (process.name: (\"dsquery.exe\", \"dsget.exe\") and process.args: \"subnet\") or\n ((((process.name : \"net.exe\" or process.pe.original_file_name == \"net.exe\") or\n ((process.name : \"net1.exe\" or process.pe.original_file_name == \"net1.exe\") and not \n process.parent.name : \"net.exe\")) and \n process.args : \"group\" and process.args : \"/domain\" and not process.args : \"/add\")))\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0635c542-1b96-4335-9b47-126582d2c19a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1016", + "name": "System Network Configuration Discovery", + "reference": "https://attack.mitre.org/techniques/T1016/" + }, + { + "id": "T1018", + "name": "Remote System Discovery", + "reference": "https://attack.mitre.org/techniques/T1018/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "0635c542-1b96-4335-9b47-126582d2c19a_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0678bc9c-b71a-433b-87e6-2f664b6b3131_3.json b/packages/security_detection_engine/kibana/security_rule/0678bc9c-b71a-433b-87e6-2f664b6b3131_3.json new file mode 100644 index 00000000000..5ccd3ec554e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0678bc9c-b71a-433b-87e6-2f664b6b3131_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected an unusually high file size shared by a remote host indicating potential lateral movement activity. One of the primary goals of attackers after gaining access to a network is to locate and exfiltrate valuable information. Instead of multiple small transfers that can raise alarms, attackers might choose to bundle data into a single large file transfer.", + "from": "now-90m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_file_size_remote_file_transfer", + "name": "Unusual Remote File Size", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "0678bc9c-b71a-433b-87e6-2f664b6b3131", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "0678bc9c-b71a-433b-87e6-2f664b6b3131_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/06dceabf-adca-48af-ac79-ffdf4c3b1e9a_109.json b/packages/security_detection_engine/kibana/security_rule/06dceabf-adca-48af-ac79-ffdf4c3b1e9a_109.json new file mode 100644 index 00000000000..5a3a8ece1e0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/06dceabf-adca-48af-ac79-ffdf4c3b1e9a_109.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "The Filter Manager Control Program (fltMC.exe) binary may be abused by adversaries to unload a filter driver and evade defenses.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Evasion via Filter Manager", + "note": "## Triage and analysis\n\n### Investigating Potential Evasion via Filter Manager\n\nA file system filter driver, or minifilter, is a specialized type of filter driver designed to intercept and modify I/O requests sent to a file system or another filter driver. Minifilters are used by a wide range of security software, including EDR, antivirus, backup agents, encryption products, etc.\n\nAttackers may try to unload minifilters to avoid protections such as malware detection, file system monitoring, and behavior-based detections.\n\nThis rule identifies the attempt to unload a minifilter using the `fltmc.exe` command-line utility, a tool used to manage and query the filter drivers loaded on Windows systems.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Examine the command line event to identify the target driver.\n - Identify the minifilter's role in the environment and if it is security-related. Microsoft provides a [list](https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/allocated-altitudes) of allocated altitudes that may provide more context, such as the manufacturer.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Observe and collect information about the following activities in the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and there are justifications for the action.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"fltMC.exe\" and process.args : \"unload\" and\n not\n (\n (\n process.executable : \"?:\\\\Program Files (x86)\\\\ManageEngine\\\\UEMS_Agent\\\\bin\\\\DCFAService64.exe\" and\n process.args : (\"DFMFilter\", \"DRMFilter\")\n ) or\n (\n process.executable : \"?:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\" and\n process.args : (\"BrFilter_*\", \"BrCow_*\") and\n user.id : \"S-1-5-18\"\n )\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "06dceabf-adca-48af-ac79-ffdf4c3b1e9a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "06dceabf-adca-48af-ac79-ffdf4c3b1e9a_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/074464f9-f30d-4029-8c03-0ed237fffec7_109.json b/packages/security_detection_engine/kibana/security_rule/074464f9-f30d-4029-8c03-0ed237fffec7_109.json new file mode 100644 index 00000000000..14b81b434c2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/074464f9-f30d-4029-8c03-0ed237fffec7_109.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the network shell utility (netsh.exe) to enable inbound Remote Desktop Protocol (RDP) connections in the Windows Firewall.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote Desktop Enabled in Windows Firewall by Netsh", + "note": "## Triage and analysis\n\n### Investigating Remote Desktop Enabled in Windows Firewall by Netsh\n\nMicrosoft Remote Desktop Protocol (RDP) is a proprietary Microsoft protocol that enables remote connections to other computers, typically over TCP port 3389.\n\nAttackers can use RDP to conduct their actions interactively. Ransomware operators frequently use RDP to access victim servers, often using privileged accounts.\n\nThis rule detects the creation of a Windows Firewall inbound rule that would allow inbound RDP traffic using the `netsh.exe` utility.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the user to check if they are aware of the operation.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check whether it makes sense to enable RDP to this host, given its role in the environment.\n- Check if the host is directly exposed to the internet.\n- Check whether privileged accounts accessed the host shortly after the modification.\n- Review network events within a short timespan of this alert for incoming RDP connection attempts.\n\n### False positive analysis\n\n- The `netsh.exe` utility can be used legitimately. Check whether the user should be performing this kind of activity, whether the user is aware of it, whether RDP should be open, and whether the action exposes the environment to unnecessary risks.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If RDP is needed, make sure to secure it:\n - Allowlist RDP traffic to specific trusted hosts.\n - Restrict RDP logins to authorized non-administrator accounts, where possible.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"netsh.exe\" or ?process.pe.original_file_name == \"netsh.exe\") and\n process.args : (\"localport=3389\", \"RemoteDesktop\", \"group=\\\"remote desktop\\\"\") and\n process.args : (\"action=allow\", \"enable=Yes\", \"enable\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "074464f9-f30d-4029-8c03-0ed237fffec7", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.004", + "name": "Disable or Modify System Firewall", + "reference": "https://attack.mitre.org/techniques/T1562/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "074464f9-f30d-4029-8c03-0ed237fffec7_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0787daa6-f8c5-453b-a4ec-048037f6c1cd_7.json b/packages/security_detection_engine/kibana/security_rule/0787daa6-f8c5-453b-a4ec-048037f6c1cd_7.json new file mode 100644 index 00000000000..69fa83c01d3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0787daa6-f8c5-453b-a4ec-048037f6c1cd_7.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "This rule monitors for a rapid enumeration of 25 different proc cmd, stat, and exe files, which suggests an abnormal activity pattern. Such behavior could be an indicator of a malicious process scanning or gathering information about running processes, potentially for reconnaissance, privilege escalation, or identifying vulnerable targets.", + "from": "now-119m", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Proc Pseudo File System Enumeration", + "query": "host.os.type:linux and event.category:file and event.action:\"opened-file\" and \nfile.path : (/proc/*/cmdline or /proc/*/stat or /proc/*/exe) and not process.name : (\n ps or netstat or landscape-sysin or w or pgrep or pidof or needrestart or apparmor_status\n) and not process.parent.pid : 1\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + } + ], + "risk_score": 21, + "rule_id": "0787daa6-f8c5-453b-a4ec-048037f6c1cd", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n```\n-w /proc/ -p r -k audit_proc\n```\n\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "low", + "tags": [ + "Data Source: Auditd Manager", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + }, + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "threshold": { + "cardinality": [ + { + "field": "file.path", + "value": 100 + } + ], + "field": [ + "host.id", + "process.pid", + "process.name" + ], + "value": 1 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 7 + }, + "id": "0787daa6-f8c5-453b-a4ec-048037f6c1cd_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/07b1ef73-1fde-4a49-a34a-5dd40011b076_7.json b/packages/security_detection_engine/kibana/security_rule/07b1ef73-1fde-4a49-a34a-5dd40011b076_7.json new file mode 100644 index 00000000000..af9e47a9fea --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/07b1ef73-1fde-4a49-a34a-5dd40011b076_7.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies registry modification to the LocalAccountTokenFilterPolicy policy. If this value exists (which doesn't by default) and is set to 1, then remote connections from all local members of Administrators are granted full high-integrity tokens during negotiation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Local Account TokenFilter Policy Disabled", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\*\\\\LocalAccountTokenFilterPolicy\",\n \"\\\\REGISTRY\\\\MACHINE\\\\*\\\\LocalAccountTokenFilterPolicy\") and\n registry.data.strings : (\"1\", \"0x00000001\")\n", + "references": [ + "https://www.stigviewer.com/stig/windows_server_2008_r2_member_server/2014-04-02/finding/V-36439", + "https://posts.specterops.io/pass-the-hash-is-dead-long-live-localaccounttokenfilterpolicy-506c25a7c167", + "https://www.welivesecurity.com/wp-content/uploads/2018/01/ESET_Turla_Mosquito.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "07b1ef73-1fde-4a49-a34a-5dd40011b076", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + }, + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1550", + "name": "Use Alternate Authentication Material", + "reference": "https://attack.mitre.org/techniques/T1550/", + "subtechnique": [ + { + "id": "T1550.002", + "name": "Pass the Hash", + "reference": "https://attack.mitre.org/techniques/T1550/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "07b1ef73-1fde-4a49-a34a-5dd40011b076_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/080bc66a-5d56-4d1f-8071-817671716db9_106.json b/packages/security_detection_engine/kibana/security_rule/080bc66a-5d56-4d1f-8071-817671716db9_106.json new file mode 100644 index 00000000000..47d1d60d0d2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/080bc66a-5d56-4d1f-8071-817671716db9_106.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a suspicious browser child process. Adversaries may gain access to a system through a user visiting a website over the normal course of browsing. With this technique, the user's web browser is typically targeted for exploitation.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Browser Child Process", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.parent.name : (\"Google Chrome\", \"Google Chrome Helper*\", \"firefox\", \"Opera\", \"Safari\", \"com.apple.WebKit.WebContent\", \"Microsoft Edge\") and\n process.name : (\"sh\", \"bash\", \"dash\", \"ksh\", \"tcsh\", \"zsh\", \"curl\", \"wget\", \"python*\", \"perl*\", \"php*\", \"osascript\", \"pwsh\") and\n process.command_line != null and\n not process.command_line : \"*/Library/Application Support/Microsoft/MAU*/Microsoft AutoUpdate.app/Contents/MacOS/msupdate*\" and\n not process.args :\n (\n \"hw.model\",\n \"IOPlatformExpertDevice\",\n \"/Volumes/Google Chrome/Google Chrome.app/Contents/Frameworks/*/Resources/install.sh\",\n \"--defaults-torrc\",\n \"*Chrome.app\",\n \"Framework.framework/Versions/*/Resources/keystone_promote_preflight.sh\",\n \"/Users/*/Library/Application Support/Google/Chrome/recovery/*/ChromeRecovery\",\n \"$DISPLAY\",\n \"*GIO_LAUNCHED_DESKTOP_FILE_PID=$$*\",\n \"/opt/homebrew/*\",\n \"/usr/local/*brew*\"\n )\n", + "references": [ + "https://objective-see.com/blog/blog_0x43.html", + "https://fr.slideshare.net/codeblue_jp/cb19-recent-apt-attack-on-crypto-exchange-employees-by-heungsoo-kang" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "080bc66a-5d56-4d1f-8071-817671716db9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1203", + "name": "Exploitation for Client Execution", + "reference": "https://attack.mitre.org/techniques/T1203/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1189", + "name": "Drive-by Compromise", + "reference": "https://attack.mitre.org/techniques/T1189/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "080bc66a-5d56-4d1f-8071-817671716db9_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/082e3f8c-6f80-485c-91eb-5b112cb79b28_106.json b/packages/security_detection_engine/kibana/security_rule/082e3f8c-6f80-485c-91eb-5b112cb79b28_106.json new file mode 100644 index 00000000000..9e99be15b80 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/082e3f8c-6f80-485c-91eb-5b112cb79b28_106.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary can establish persistence by installing a new launch agent that executes at login by using launchd or launchctl to load a plist into the appropriate directories.", + "false_positives": [ + "Trusted applications persisting via LaunchAgent" + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Launch Agent Creation or Modification and Immediate Loading", + "query": "sequence by host.id with maxspan=1m\n [file where host.os.type == \"macos\" and event.type != \"deletion\" and\n file.path : (\"/System/Library/LaunchAgents/*\", \"/Library/LaunchAgents/*\", \"/Users/*/Library/LaunchAgents/*\")\n ]\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name == \"launchctl\" and process.args == \"load\"]\n", + "references": [ + "https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "082e3f8c-6f80-485c-91eb-5b112cb79b28", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.001", + "name": "Launch Agent", + "reference": "https://attack.mitre.org/techniques/T1543/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "082e3f8c-6f80-485c-91eb-5b112cb79b28_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/083fa162-e790-4d85-9aeb-4fea04188adb_106.json b/packages/security_detection_engine/kibana/security_rule/083fa162-e790-4d85-9aeb-4fea04188adb_106.json new file mode 100644 index 00000000000..a1f97e57e54 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/083fa162-e790-4d85-9aeb-4fea04188adb_106.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a launchd child process with a hidden file. An adversary can establish persistence by installing a new logon item, launch agent, or daemon that executes upon login.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Hidden Child Process of Launchd", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:.* and process.parent.executable:/sbin/launchd\n", + "references": [ + "https://objective-see.com/blog/blog_0x61.html", + "https://www.intezer.com/blog/research/operation-electrorat-attacker-creates-fake-companies-to-drain-your-crypto-wallets/", + "https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "083fa162-e790-4d85-9aeb-4fea04188adb", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.001", + "name": "Launch Agent", + "reference": "https://attack.mitre.org/techniques/T1543/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.001", + "name": "Hidden Files and Directories", + "reference": "https://attack.mitre.org/techniques/T1564/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "083fa162-e790-4d85-9aeb-4fea04188adb_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0859355c-0f08-4b43-8ff5-7d2a4789fc08_3.json b/packages/security_detection_engine/kibana/security_rule/0859355c-0f08-4b43-8ff5-7d2a4789fc08_3.json new file mode 100644 index 00000000000..33219c25d69 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0859355c-0f08-4b43-8ff5-7d2a4789fc08_3.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies newly seen removable devices by device friendly name using registry modification events. While this activity is not inherently malicious, analysts can use those events to aid monitoring for data exfiltration over those devices.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "First Time Seen Removable Device", + "new_terms_fields": [ + "registry.path" + ], + "query": "event.category:\"registry\" and host.os.type:\"windows\" and registry.value:\"FriendlyName\" and registry.path:*USBSTOR*\n", + "references": [ + "https://winreg-kb.readthedocs.io/en/latest/sources/system-keys/USB-storage.html", + "https://learn.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-device-specific-registry-settings" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.value", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0859355c-0f08-4b43-8ff5-7d2a4789fc08", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Exfiltration", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1091", + "name": "Replication Through Removable Media", + "reference": "https://attack.mitre.org/techniques/T1091/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1052", + "name": "Exfiltration Over Physical Medium", + "reference": "https://attack.mitre.org/techniques/T1052/", + "subtechnique": [ + { + "id": "T1052.001", + "name": "Exfiltration over USB", + "reference": "https://attack.mitre.org/techniques/T1052/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 3 + }, + "id": "0859355c-0f08-4b43-8ff5-7d2a4789fc08_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/092b068f-84ac-485d-8a55-7dd9e006715f_107.json b/packages/security_detection_engine/kibana/security_rule/092b068f-84ac-485d-8a55-7dd9e006715f_107.json new file mode 100644 index 00000000000..711f19c1c43 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/092b068f-84ac-485d-8a55-7dd9e006715f_107.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a hidden launch agent or daemon. An adversary may establish persistence by installing a new launch agent or daemon which executes at login.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation of Hidden Launch Agent or Daemon", + "query": "file where host.os.type == \"macos\" and event.type != \"deletion\" and\n file.path :\n (\n \"/System/Library/LaunchAgents/.*.plist\",\n \"/Library/LaunchAgents/.*.plist\",\n \"/Users/*/Library/LaunchAgents/.*.plist\",\n \"/System/Library/LaunchDaemons/.*.plist\",\n \"/Library/LaunchDaemons/.*.plist\"\n )\n", + "references": [ + "https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "092b068f-84ac-485d-8a55-7dd9e006715f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.001", + "name": "Launch Agent", + "reference": "https://attack.mitre.org/techniques/T1543/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.001", + "name": "Hidden Files and Directories", + "reference": "https://attack.mitre.org/techniques/T1564/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "092b068f-84ac-485d-8a55-7dd9e006715f_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/09bc6c90-7501-494d-b015-5d988dc3f233_4.json b/packages/security_detection_engine/kibana/security_rule/09bc6c90-7501-494d-b015-5d988dc3f233_4.json new file mode 100644 index 00000000000..4145e852a3e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/09bc6c90-7501-494d-b015-5d988dc3f233_4.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the creation of a file, followed by its execution and self-deletion in a short timespan within a directory often used for malicious purposes by threat actors. This behavior is often used by malware to execute malicious code and delete itself to hide its tracks.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "File Creation, Execution and Self-Deletion in Suspicious Directory", + "query": "sequence by host.id, user.id with maxspan=1m\n [file where host.os.type == \"linux\" and event.action == \"creation\" and \n process.name in (\"curl\", \"wget\", \"fetch\", \"ftp\", \"sftp\", \"scp\", \"rsync\", \"ld\") and \n file.path : (\"/dev/shm/*\", \"/run/shm/*\", \"/tmp/*\", \"/var/tmp/*\",\n \"/run/*\", \"/var/run/*\", \"/var/www/*\", \"/proc/*/fd/*\")] by file.name\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")] by process.name\n [file where host.os.type == \"linux\" and event.action == \"deletion\" and not process.name in (\"rm\", \"ld\") and \n file.path : (\"/dev/shm/*\", \"/run/shm/*\", \"/tmp/*\", \"/var/tmp/*\",\n \"/run/*\", \"/var/run/*\", \"/var/www/*\", \"/proc/*/fd/*\")] by file.name\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "09bc6c90-7501-494d-b015-5d988dc3f233", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 4 + }, + "id": "09bc6c90-7501-494d-b015-5d988dc3f233_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0ab319ef-92b8-4c7f-989b-5de93c852e93_4.json b/packages/security_detection_engine/kibana/security_rule/0ab319ef-92b8-4c7f-989b-5de93c852e93_4.json new file mode 100644 index 00000000000..c36563d0f54 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0ab319ef-92b8-4c7f-989b-5de93c852e93_4.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A statistical model has identified command-and-control (C2) beaconing activity with high confidence. Beaconing can help attackers maintain stealthy communication with their C2 servers, receive instructions and payloads, exfiltrate data and maintain persistence in a network.", + "from": "now-1h", + "index": [ + "ml_beaconing.all" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Statistical Model Detected C2 Beaconing Activity with High Confidence", + "query": "beacon_stats.beaconing_score: 3\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/beaconing", + "https://www.elastic.co/security-labs/identifying-beaconing-malware-using-elastic" + ], + "related_integrations": [ + { + "package": "beaconing", + "version": "^1.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "beacon_stats.beaconing_score", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "0ab319ef-92b8-4c7f-989b-5de93c852e93", + "setup": "## Setup\n\nThe rule requires the Network Beaconing Identification integration assets to be installed, as well as network logs collected by the Elastic Defend or Network Packet Capture integrations.\n\n### Network Beaconing Identification Setup\nThe Network Beaconing Identification integration consists of a statistical framework to identify C2 beaconing activity in network logs.\n\n#### Prerequisite Requirements:\n- Fleet is required for Network Beaconing Identification.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Network Beaconing Identification integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Network Beaconing Identification and select the integration to see more details about it.\n- Under Settings, click \"Install Network Beaconing Identification assets\" and follow the prompts to install the assets.\n", + "severity": "low", + "tags": [ + "Domain: Network", + "Use Case: C2 Beaconing Detection", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1102", + "name": "Web Service", + "reference": "https://attack.mitre.org/techniques/T1102/", + "subtechnique": [ + { + "id": "T1102.002", + "name": "Bidirectional Communication", + "reference": "https://attack.mitre.org/techniques/T1102/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "0ab319ef-92b8-4c7f-989b-5de93c852e93_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6.json b/packages/security_detection_engine/kibana/security_rule/0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6.json new file mode 100644 index 00000000000..6c0be09cd12 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to remote execution activities using WinRM. Attackers can abuse WinRM to perform lateral movement using built-in tools.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Remote Execution Capabilities via WinRM", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (\"Invoke-WmiMethod\" or \"Invoke-Command\" or \"Enter-PSSession\") and \"ComputerName\"\n ) and\n not user.id : \"S-1-5-18\" and\n not file.directory : (\n \"C:\\\\Program Files\\\\LogicMonitor\\\\Agent\\\\tmp\" or\n ?\\:\\\\\\\\Program?Files\\\\\\\\Microsoft\\\\\\\\Exchange?Server\\\\\\\\*\\\\\\\\bin or\n ?\\:\\\\\\\\Logicmonitor\\\\\\\\tmp* or\n ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\Modules\\\\\\\\dbatools\\\\\\\\* or\n ?\\:\\\\\\\\ExchangeServer\\\\\\\\bin*\n ) and not\n powershell.file.script_block_text : (\n \"Export-ModuleMember -Function @('Invoke-Expression''Invoke-Command')\" and\n \"function Invoke-Command {\"\n )\n", + "references": [ + "https://attack.mitre.org/techniques/T1021/006/", + "https://github.com/cobbr/SharpSploit/blob/master/SharpSploit/LateralMovement/PowerShellRemoting.cs", + "https://github.com/BC-SECURITY/Empire/blob/main/empire/server/modules/powershell/lateral_movement/invoke_psremoting.py" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.directory", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Execution", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.006", + "name": "Windows Remote Management", + "reference": "https://attack.mitre.org/techniques/T1021/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 6 + }, + "id": "0abf0c5b-62dd-48d2-ac4e-6b43fe3a6e83_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0b2f3da5-b5ec-47d1-908b-6ebb74814289_109.json b/packages/security_detection_engine/kibana/security_rule/0b2f3da5-b5ec-47d1-908b-6ebb74814289_109.json new file mode 100644 index 00000000000..ea281092245 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0b2f3da5-b5ec-47d1-908b-6ebb74814289_109.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects when a user account has the servicePrincipalName attribute modified. Attackers can abuse write privileges over a user to configure Service Principle Names (SPNs) so that they can perform Kerberoasting. Administrators can also configure this for legitimate purposes, exposing the account to Kerberoasting.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "User account exposed to Kerberoasting", + "note": "## Triage and analysis\n\n### Investigating User account exposed to Kerberoasting\n\nService Principal Names (SPNs) are names by which Kerberos clients uniquely identify service instances for Kerberos target computers.\n\nBy default, only computer accounts have SPNs, which creates no significant risk, since machine accounts have a default domain policy that rotates their passwords every 30 days, and the password is composed of 120 random characters, making them invulnerable to Kerberoasting.\n\nA user account with an SPN assigned is considered a service account, and is accessible to the entire domain. If any user in the directory requests a ticket-granting service (TGS), the domain controller will encrypt it with the secret key of the account executing the service. An attacker can potentially perform a Kerberoasting attack with this information, as the human-defined password is likely to be less complex.\n\nFor scenarios where SPNs cannot be avoided on user accounts, Microsoft provides the Group Managed Service Accounts (gMSA) feature, which ensures that account passwords are robust and changed regularly and automatically. More information can be found [here](https://docs.microsoft.com/en-us/windows-server/security/group-managed-service-accounts/group-managed-service-accounts-overview).\n\nAttackers can also perform \"Targeted Kerberoasting\", which consists of adding fake SPNs to user accounts that they have write privileges to, making them potentially vulnerable to Kerberoasting.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate if the target account is a member of privileged groups (Domain Admins, Enterprise Admins, etc.).\n- Investigate if tickets have been requested for the target account.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- The use of user accounts as service accounts is a bad security practice and should not be allowed in the domain. The security team should map and monitor any potential benign true positive (B-TP), especially if the account is privileged. Domain Administrators that define this kind of setting can put the domain at risk as user accounts don't have the same security standards as computer accounts (which have long, complex, random passwords that change frequently), exposing them to credential cracking attacks (Kerberoasting, brute force, etc.).\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services. Prioritize privileged accounts.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.action:\"Directory Service Changes\" and event.code:5136 and\n winlog.event_data.OperationType:\"%%14674\" and\n winlog.event_data.ObjectClass:\"user\" and\n winlog.event_data.AttributeLDAPDisplayName:\"servicePrincipalName\"\n", + "references": [ + "https://www.thehacker.recipes/ad/movement/access-controls/targeted-kerberoasting", + "https://www.qomplx.com/qomplx-knowledge-kerberoasting-attacks-explained/", + "https://www.thehacker.recipes/ad/movement/kerberos/kerberoast", + "https://attack.stealthbits.com/cracking-kerberos-tgs-tickets-using-kerberoasting", + "https://adsecurity.org/?p=280", + "https://github.com/OTRF/Set-AuditRule" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ObjectClass", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.OperationType", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "0b2f3da5-b5ec-47d1-908b-6ebb74814289", + "setup": "## Setup\n\nThe 'Audit Directory Service Changes' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n\nThe above policy does not cover User objects, so set up an AuditRule using https://github.com/OTRF/Set-AuditRule.\nAs this specifies the servicePrincipalName Attribute GUID, it is expected to be low noise.\n\n```\nSet-AuditRule -AdObjectPath 'AD:\\CN=Users,DC=Domain,DC=com' -WellKnownSidType WorldSid -Rights WriteProperty -InheritanceFlags Children -AttributeGUID f3a64788-5306-11d1-a9c5-0000f80367c1 -AuditFlags Success\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/", + "subtechnique": [ + { + "id": "T1558.003", + "name": "Kerberoasting", + "reference": "https://attack.mitre.org/techniques/T1558/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 109 + }, + "id": "0b2f3da5-b5ec-47d1-908b-6ebb74814289_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0b803267-74c5-444d-ae29-32b5db2d562a_5.json b/packages/security_detection_engine/kibana/security_rule/0b803267-74c5-444d-ae29-32b5db2d562a_5.json new file mode 100644 index 00000000000..b6fb9caacab --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0b803267-74c5-444d-ae29-32b5db2d562a_5.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of a set of linux binaries, that are potentially vulnerable to wildcard injection, with suspicious command line flags followed by a shell spawn event. Linux wildcard injection is a type of security vulnerability where attackers manipulate commands or input containing wildcards (e.g., *, ?, []) to execute unintended operations or access sensitive data by tricking the system into interpreting the wildcard characters in unexpected ways.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Shell via Wildcard Injection Detected", + "query": "sequence by host.id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and (\n (process.name == \"tar\" and process.args : \"--checkpoint=*\" and process.args : \"--checkpoint-action=*\") or\n (process.name == \"rsync\" and process.args : \"-e*\") or\n (process.name == \"zip\" and process.args == \"--unzip-command\") )] by process.entity_id\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.parent.name : (\"tar\", \"rsync\", \"zip\") and \n process.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")] by process.parent.entity_id\n", + "references": [ + "https://www.exploit-db.com/papers/33930" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0b803267-74c5-444d-ae29-32b5db2d562a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "type": "eql", + "version": 5 + }, + "id": "0b803267-74c5-444d-ae29-32b5db2d562a_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0c093569-dff9-42b6-87b1-0242d9f7d9b4_2.json b/packages/security_detection_engine/kibana/security_rule/0c093569-dff9-42b6-87b1-0242d9f7d9b4_2.json new file mode 100644 index 00000000000..d27c958c23b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0c093569-dff9-42b6-87b1-0242d9f7d9b4_2.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identify instances where adversaries include trailing space characters to mimic regular files, disguising their activity to evade default file handling mechanisms.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Processes with Trailing Spaces", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and\nprocess.name : \"* \"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0c093569-dff9-42b6-87b1-0242d9f7d9b4", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.006", + "name": "Space after Filename", + "reference": "https://attack.mitre.org/techniques/T1036/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "0c093569-dff9-42b6-87b1-0242d9f7d9b4_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0c41e478-5263-4c69-8f9e-7dfd2c22da64_6.json b/packages/security_detection_engine/kibana/security_rule/0c41e478-5263-4c69-8f9e-7dfd2c22da64_6.json new file mode 100644 index 00000000000..838518e7c1e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0c41e478-5263-4c69-8f9e-7dfd2c22da64_6.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule is triggered when an IP address indicator from the Threat Intel Filebeat module or integrations has a match against a network event.", + "from": "now-65m", + "index": [ + "auditbeat-*", + "endgame-*", + "filebeat-*", + "logs-*", + "packetbeat-*", + "winlogbeat-*" + ], + "interval": "1h", + "language": "kuery", + "license": "Elastic License v2", + "name": "Threat Intel IP Address Indicator Match", + "note": "## Triage and Analysis\n\n### Investigating Threat Intel IP Address Indicator Match\n\nThreat Intel indicator match rules allow matching from a local observation, such as an endpoint event that records a file hash with an entry of a file hash stored within the Threat Intel integrations index.\n\nMatches are based on threat intelligence data that's been ingested during the last 30 days. Some integrations don't place expiration dates on their threat indicators, so we strongly recommend validating ingested threat indicators and reviewing match results. When reviewing match results, check associated activity to determine whether the event requires additional investigation.\n\nThis rule is triggered when an IP address indicator from the Threat Intel Filebeat module or a threat intelligence integration matches against a network event.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Gain context about the field that matched the local observation so you can understand the nature of the connection. This information can be found in the `threat.indicator.matched.field` field.\n- Investigate the IP address, which can be found in the `threat.indicator.matched.atomic` field:\n - Check the reputation of the IP address in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n - Execute a reverse DNS lookup to retrieve hostnames associated with the given IP address.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Identify the process responsible for the connection, and investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Retrieve the involved process executable and examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Using the data collected through the analysis, scope users targeted and other machines infected in the environment.\n\n### False Positive Analysis\n\n- When a match is found, it's important to consider the indicator's initial release date. Threat intelligence is useful for augmenting existing security processes but can quickly become outdated. In other words, some threat intelligence only represents a specific set of activity observed at a specific time. For example, an IP address may have hosted malware observed in a Dridex campaign months ago, but it's possible that IP has been remediated and no longer represents any threat.\n- False positives might occur after large and publicly written campaigns if curious employees interact with attacker infrastructure.\n- Some feeds may include internal or known benign addresses by mistake (e.g., 8.8.8.8, google.com, 127.0.0.1, etc.). Make sure you understand how blocking a specific domain or address might impact the organization or normal system functioning.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "source.ip:* or destination.ip:*\n", + "references": [ + "https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-threatintel.html", + "https://www.elastic.co/guide/en/security/master/es-threat-intel-integrations.html", + "https://www.elastic.co/security/tip" + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + } + ], + "risk_score": 99, + "rule_id": "0c41e478-5263-4c69-8f9e-7dfd2c22da64", + "setup": "## Setup\n\nThis rule needs threat intelligence indicators to work.\nThreat intelligence indicators can be collected using an [Elastic Agent integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#agent-ti-integration),\nthe [Threat Intel module](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#ti-mod-integration),\nor a [custom integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#custom-ti-integration).\n\nMore information can be found [here](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html).\n", + "severity": "critical", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Rule Type: Indicator Match" + ], + "threat_filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.category", + "negate": false, + "params": { + "query": "threat" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.category": "threat" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.kind", + "negate": false, + "params": { + "query": "enrichment" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.kind": "enrichment" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.type", + "negate": false, + "params": { + "query": "indicator" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.type": "indicator" + } + } + } + ], + "threat_index": [ + "filebeat-*", + "logs-ti_*" + ], + "threat_indicator_path": "threat.indicator", + "threat_language": "kuery", + "threat_mapping": [ + { + "entries": [ + { + "field": "source.ip", + "type": "mapping", + "value": "threat.indicator.ip" + } + ] + }, + { + "entries": [ + { + "field": "destination.ip", + "type": "mapping", + "value": "threat.indicator.ip" + } + ] + } + ], + "threat_query": "@timestamp >= \"now-30d/d\" and event.module:(threatintel or ti_*) and threat.indicator.ip:* and not labels.is_ioc_transform_source:\"true\"", + "timeline_id": "495ad7a7-316e-4544-8a0f-9c098daee76e", + "timeline_title": "Generic Threat Match Timeline", + "timestamp_override": "event.ingested", + "type": "threat_match", + "version": 6 + }, + "id": "0c41e478-5263-4c69-8f9e-7dfd2c22da64_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108.json b/packages/security_detection_engine/kibana/security_rule/0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108.json new file mode 100644 index 00000000000..f7a88d8de9d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the Windows file system utility (fsutil.exe) to gather information about attached peripheral devices and components connected to a computer system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Peripheral Device Discovery", + "note": "## Triage and analysis\n\n### Investigating Peripheral Device Discovery\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `fsutil` utility with the `fsinfo` subcommand to enumerate drives attached to the computer, which can be used to identify secondary drives used for backups, mapped network drives, and removable media. These devices can contain valuable information for attackers.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Determine whether this activity was followed by suspicious file access/copy operations or uploads to file storage services.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"fsutil.exe\" or ?process.pe.original_file_name == \"fsutil.exe\") and\n process.args : \"fsinfo\" and process.args : \"drives\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1120", + "name": "Peripheral Device Discovery", + "reference": "https://attack.mitre.org/techniques/T1120/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "0c7ca5c2-728d-4ad9-b1c5-bbba83ecb1f4_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0ce6487d-8069-4888-9ddd-61b52490cebc_105.json b/packages/security_detection_engine/kibana/security_rule/0ce6487d-8069-4888-9ddd-61b52490cebc_105.json new file mode 100644 index 00000000000..6e3da2a545f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0ce6487d-8069-4888-9ddd-61b52490cebc_105.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies the assignment of rights to access content from another mailbox. An adversary may use the compromised account to send messages to other accounts in the network of the target organization while creating inbox rules, so messages can evade spam/phishing detection mechanisms.", + "false_positives": [ + "Assignment of rights to a service account." + ], + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "O365 Exchange Suspicious Mailbox Right Delegation", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.action:Add-MailboxPermission and\no365.audit.Parameters.AccessRights:(FullAccess or SendAs or SendOnBehalf) and event.outcome:success and\nnot user.id : \"NT AUTHORITY\\SYSTEM (Microsoft.Exchange.Servicehost)\"\n", + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.AccessRights", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0ce6487d-8069-4888-9ddd-61b52490cebc", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "low", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/", + "subtechnique": [ + { + "id": "T1098.002", + "name": "Additional Email Delegate Permissions", + "reference": "https://attack.mitre.org/techniques/T1098/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "0ce6487d-8069-4888-9ddd-61b52490cebc_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0d69150b-96f8-467c-a86d-a67a3378ce77_108.json b/packages/security_detection_engine/kibana/security_rule/0d69150b-96f8-467c-a86d-a67a3378ce77_108.json new file mode 100644 index 00000000000..e74e23be3ba --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0d69150b-96f8-467c-a86d-a67a3378ce77_108.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Nping ran on a Linux host. Nping is part of the Nmap tool suite and has the ability to construct raw packets for a wide variety of security testing applications, including denial of service testing.", + "false_positives": [ + "Some normal use of this command may originate from security engineers and network or server administrators, but this is usually not routine or unannounced. Use of `Nping` by non-engineers or ordinary users is uncommon." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Nping Process Activity", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"nping\"\n", + "references": [ + "https://en.wikipedia.org/wiki/Nmap" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0d69150b-96f8-467c-a86d-a67a3378ce77", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1046", + "name": "Network Service Discovery", + "reference": "https://attack.mitre.org/techniques/T1046/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "0d69150b-96f8-467c-a86d-a67a3378ce77_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109.json b/packages/security_detection_engine/kibana/security_rule/0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109.json new file mode 100644 index 00000000000..67b4c7dc34f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an executable created by a Microsoft Office application and subsequently executed. These processes are often launched via scripts inside documents or during exploitation of Microsoft Office applications.", + "from": "now-120m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Execution of File Written or Modified by Microsoft Office", + "note": "## Triage and analysis\n\n### Investigating Execution of File Written or Modified by Microsoft Office\n\nMicrosoft Office, a widely used suite of productivity applications, is frequently targeted by attackers due to its popularity in corporate environments. Attackers exploit its extensive capabilities, like macro scripts in Word and Excel, to gain initial access to systems. They often use Office documents as delivery mechanisms for malware or phishing attempts, taking advantage of their trusted status in professional settings.\n\nThis rule searches for executable files written by MS Office applications executed in sequence. This is most likely the result of the execution of malicious documents or exploitation for initial access or privilege escalation. This rule can also detect suspicious processes masquerading as the MS Office applications.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve MS Office documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence with maxspan=2h\n [file where host.os.type == \"windows\" and event.type != \"deletion\" and file.extension : \"exe\" and\n (process.name : \"WINWORD.EXE\" or\n process.name : \"EXCEL.EXE\" or\n process.name : \"OUTLOOK.EXE\" or\n process.name : \"POWERPNT.EXE\" or\n process.name : \"eqnedt32.exe\" or\n process.name : \"fltldr.exe\" or\n process.name : \"MSPUB.EXE\" or\n process.name : \"MSACCESS.EXE\")\n ] by host.id, file.path\n [process where host.os.type == \"windows\" and event.type == \"start\" and \n not (process.name : \"NewOutlookInstaller.exe\" and process.code_signature.subject_name : \"Microsoft Corporation\" and process.code_signature.trusted == true)\n ] by host.id, process.executable\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + }, + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 109 + }, + "id": "0d8ad79f-9025-45d8-80c1-4f0cd3c5e8e5_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0e52157a-8e96-4a95-a6e3-5faae5081a74_105.json b/packages/security_detection_engine/kibana/security_rule/0e52157a-8e96-4a95-a6e3-5faae5081a74_105.json new file mode 100644 index 00000000000..0868b843b99 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0e52157a-8e96-4a95-a6e3-5faae5081a74_105.json @@ -0,0 +1,83 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the occurence of files uploaded to SharePoint being detected as Malware by the file scanning engine. Attackers can use File Sharing and Organization Repositories to spread laterally within the company and amplify their access. Users can inadvertently share these files without knowing their maliciousness, giving adversaries opportunities to gain initial access to other endpoints in the environment.", + "false_positives": [ + "Benign files can trigger signatures in the built-in virus protection" + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "SharePoint Malware File Upload", + "note": "", + "query": "event.dataset:o365.audit and event.provider:SharePoint and event.code:SharePointFileOperation and event.action:FileMalwareDetected\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/virus-detection-in-spo?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "0e52157a-8e96-4a95-a6e3-5faae5081a74", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "high", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1080", + "name": "Taint Shared Content", + "reference": "https://attack.mitre.org/techniques/T1080/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "0e52157a-8e96-4a95-a6e3-5faae5081a74_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0e79980b-4250-4a50-a509-69294c14e84b_108.json b/packages/security_detection_engine/kibana/security_rule/0e79980b-4250-4a50-a509-69294c14e84b_108.json new file mode 100644 index 00000000000..bd2449c10f3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0e79980b-4250-4a50-a509-69294c14e84b_108.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies MsBuild.exe making outbound network connections. This may indicate adversarial activity as MsBuild is often leveraged by adversaries to execute code and evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "MsBuild Making Network Connections", + "note": "## Triage and analysis\n\n### Investigating MsBuild Making Network Connections\n\nBy examining the specific traits of Windows binaries (such as process trees, command lines, network connections, registry modifications, and so on) it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity, such as masquerading and deserve further investigation.\n\nThe Microsoft Build Engine, also known as MSBuild, is a platform for building applications. This engine provides an XML schema for a project file that controls how the build platform processes and builds software, and can be abused to proxy code execution.\n\nThis rule looks for the `Msbuild.exe` utility execution, followed by a network connection to an external address. Attackers can abuse MsBuild to execute malicious files or masquerade as those utilities in order to bypass detections and evade defenses.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n - Investigate the file digital signature and process original filename, if suspicious, treat it as potential malware.\n- Investigate the target host that the signed binary is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of destination IP address and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and process.name : \"MSBuild.exe\" and event.type == \"start\"]\n [network where host.os.type == \"windows\" and process.name : \"MSBuild.exe\" and\n not cidrmatch(destination.ip, \"127.0.0.1\", \"::1\") and\n not dns.question.name : \"localhost\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0e79980b-4250-4a50-a509-69294c14e84b", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "0e79980b-4250-4a50-a509-69294c14e84b_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0f4d35e4-925e-4959-ab24-911be207ee6f_110.json b/packages/security_detection_engine/kibana/security_rule/0f4d35e4-925e-4959-ab24-911be207ee6f_110.json new file mode 100644 index 00000000000..5c7c628e0b0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0f4d35e4-925e-4959-ab24-911be207ee6f_110.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors the creation/alteration of the rc.local file by a previously unknown process executable through the use of the new terms rule type. The /etc/rc.local file is used to start custom applications, services, scripts or commands during start-up. The rc.local file has mostly been replaced by Systemd. However, through the \"systemd-rc-local-generator\", rc.local files can be converted to services that run at boot. Adversaries may alter rc.local to execute malicious code at start-up, and gain persistence onto the system.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence Through Run Control Detected", + "new_terms_fields": [ + "host.id", + "process.executable", + "user.id" + ], + "note": "## Triage and analysis\n\n### Investigating Potential Persistence Through Run Control Detected\n\nThe `rc.local` file executes custom commands or scripts during system startup on Linux systems. `rc.local` has been deprecated in favor of the use of `systemd services`, and more recent Unix distributions no longer leverage this method of on-boot script execution.\n\nThere might still be users that use `rc.local` in a benign matter, so investigation to see whether the file is malicious is vital.\n\nDetection alerts from this rule indicate the creation of a new `/etc/rc.local` file.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate whether the `/lib/systemd/system/rc-local.service` and `/run/systemd/generator/multi-user.target.wants/rc-local.service` files were created through the `systemd-rc-local-generator` located at `/usr/lib/systemd/system-generators/systemd-rc-local-generator`.\n - !{osquery{\"label\":\"Osquery - Retrieve rc-local.service File Information\",\"query\":\"SELECT * FROM file WHERE (path = '/run/systemd/generator/multi-user.target.wants/rc-local.service' OR path = '/run/systemd/generator/multi-user.target.wants/rc-local.service')\"}}\n - In case the file is not present here, `sudo systemctl status rc-local` can be executed to find the location of the rc-local unit file.\n - If `rc-local.service` is found, manual investigation is required to check for the rc script execution. Systemd will generate syslogs in case of the execution of the rc-local service. `sudo cat /var/log/syslog | grep \"rc-local.service|/etc/rc.local Compatibility\"` can be executed to check for the execution of the service.\n - If logs are found, it's likely that the contents of the `rc.local` file have been executed. Analyze the logs. In case several syslog log files are available, use a wildcard to search through all of the available logs.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate whether this activity is related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses `rc.local` for administrative purposes, consider adding exceptions for this specific administrator user account.\n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the `service/rc.local` files or restore their original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type : \"linux\" and event.category : \"file\" and\nevent.type : (\"change\" or \"file_modify_event\" or \"creation\" or \"file_create_event\") and\nfile.path : \"/etc/rc.local\" and not process.name : (\n \"dockerd\" or \"docker\" or \"dnf\" or \"dnf-automatic\" or \"yum\" or \"rpm\" or \"dpkg\"\n) and not file.extension : (\"swp\" or \"swpx\")\n", + "references": [ + "https://www.intezer.com/blog/malware-analysis/hiddenwasp-malware-targeting-linux-systems/", + "https://pberba.github.io/security/2022/02/06/linux-threat-hunting-for-persistence-initialization-scripts-and-shell-configuration/#8-boot-or-logon-initialization-scripts-rc-scripts", + "https://www.cyberciti.biz/faq/how-to-enable-rc-local-shell-script-on-systemd-while-booting-linux-system/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "0f4d35e4-925e-4959-ab24-911be207ee6f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/", + "subtechnique": [ + { + "id": "T1037.004", + "name": "RC Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 110 + }, + "id": "0f4d35e4-925e-4959-ab24-911be207ee6f_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3.json b/packages/security_detection_engine/kibana/security_rule/0f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3.json new file mode 100644 index 00000000000..58e90a8de18 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of a netcat listener via rlwrap. rlwrap is a 'readline wrapper', a small utility that uses the GNU Readline library to allow the editing of keyboard input for any command. This utility can be used in conjunction with netcat to gain a more stable reverse shell.", + "false_positives": [ + "Netcat is a dual-use tool that can be used for benign or malicious activity. Netcat is included in some Linux distributions so its presence is not necessarily suspicious. Some normal use of this program, while uncommon, may originate from scripts, automation tools, and frameworks." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Netcat Listener Established via rlwrap", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"rlwrap\" and process.args in (\"nc\", \"ncat\", \"netcat\", \"nc.openbsd\", \"socat\") and\nprocess.args : \"*l*\" and process.args_count >= 4\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "0f56369f-eb3d-459c-a00b-87c2bf7bdfc5", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "0f56369f-eb3d-459c-a00b-87c2bf7bdfc5_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0f93cb9a-1931-48c2-8cd0-f173fd3e5283_208.json b/packages/security_detection_engine/kibana/security_rule/0f93cb9a-1931-48c2-8cd0-f173fd3e5283_208.json new file mode 100644 index 00000000000..36f30708c2c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0f93cb9a-1931-48c2-8cd0-f173fd3e5283_208.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious access to an LSASS handle via PssCaptureSnapShot where two successive process accesses are performed by the same process and target two different instances of LSASS. This may indicate an attempt to evade detection and dump LSASS memory for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential LSASS Memory Dump via PssCaptureSnapShot", + "query": "event.category:process and host.os.type:windows and event.code:10 and\n winlog.event_data.TargetImage:(\"C:\\\\Windows\\\\system32\\\\lsass.exe\" or\n \"c:\\\\Windows\\\\system32\\\\lsass.exe\" or\n \"c:\\\\Windows\\\\System32\\\\lsass.exe\")\n", + "references": [ + "https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/", + "https://twitter.com/sbousseaden/status/1280619931516747777?lang=en" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetImage", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "0f93cb9a-1931-48c2-8cd0-f173fd3e5283", + "setup": "## Setup\n\nThis is meant to run only on datasources using Elastic Agent 7.14+ since versions prior to that will be missing the threshold\nrule cardinality feature.\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "threshold": { + "cardinality": [ + { + "field": "winlog.event_data.TargetProcessId", + "value": 2 + } + ], + "field": [ + "process.entity_id" + ], + "value": 2 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 208 + }, + "id": "0f93cb9a-1931-48c2-8cd0-f173fd3e5283_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/0ff84c42-873d-41a2-a4ed-08d74d352d01_106.json b/packages/security_detection_engine/kibana/security_rule/0ff84c42-873d-41a2-a4ed-08d74d352d01_106.json new file mode 100644 index 00000000000..af3ea01d4d2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/0ff84c42-873d-41a2-a4ed-08d74d352d01_106.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to the root crontab file. Adversaries may overwrite this file to gain code execution with root privileges by exploiting privileged file write or move related vulnerabilities.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Privilege Escalation via Root Crontab File Modification", + "query": "event.category:file and host.os.type:macos and not event.type:deletion and\n file.path:/private/var/at/tabs/root and not process.executable:/usr/bin/crontab\n", + "references": [ + "https://phoenhex.re/2017-06-09/pwn2own-diskarbitrationd-privesc", + "https://www.exploit-db.com/exploits/42146" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "0ff84c42-873d-41a2-a4ed-08d74d352d01", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "0ff84c42-873d-41a2-a4ed-08d74d352d01_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/10a500bb-a28f-418e-ba29-ca4c8d1a9f2f_106.json b/packages/security_detection_engine/kibana/security_rule/10a500bb-a28f-418e-ba29-ca4c8d1a9f2f_106.json new file mode 100644 index 00000000000..3e3f667b91f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/10a500bb-a28f-418e-ba29-ca4c8d1a9f2f_106.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the built-in networksetup command to configure webproxy settings. This may indicate an attempt to hijack web browser traffic for credential access via traffic sniffing or redirection.", + "false_positives": [ + "Legitimate WebProxy Settings Modification" + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "WebProxy Settings Modification", + "query": "event.category:process and host.os.type:macos and event.type:start and\n process.name : networksetup and process.args : ((\"-setwebproxy\" or \"-setsecurewebproxy\" or \"-setautoproxyurl\") and not (Bluetooth or off)) and\n not process.parent.executable : (\"/Library/PrivilegedHelperTools/com.80pct.FreedomHelper\" or\n \"/Applications/Fiddler Everywhere.app/Contents/Resources/app/out/WebServer/Fiddler.WebUi\" or\n \"/usr/libexec/xpcproxy\")\n", + "references": [ + "https://unit42.paloaltonetworks.com/mac-malware-steals-cryptocurrency-exchanges-cookies/", + "https://objectivebythesea.com/v2/talks/OBTS_v2_Zohar.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "10a500bb-a28f-418e-ba29-ca4c8d1a9f2f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1539", + "name": "Steal Web Session Cookie", + "reference": "https://attack.mitre.org/techniques/T1539/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "10a500bb-a28f-418e-ba29-ca4c8d1a9f2f_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1160dcdb-0a0a-4a79-91d8-9b84616edebd_109.json b/packages/security_detection_engine/kibana/security_rule/1160dcdb-0a0a-4a79-91d8-9b84616edebd_109.json new file mode 100644 index 00000000000..b82cba039cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1160dcdb-0a0a-4a79-91d8-9b84616edebd_109.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an instance of a Windows trusted program that is known to be vulnerable to DLL Search Order Hijacking starting after being renamed or from a non-standard path. This is uncommon behavior and may indicate an attempt to evade defenses via side loading a malicious DLL within the memory space of one of those processes.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential DLL Side-Loading via Trusted Microsoft Programs", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.pe.original_file_name in (\"WinWord.exe\", \"EXPLORER.EXE\", \"w3wp.exe\", \"DISM.EXE\") and\n not (process.name : (\"winword.exe\", \"explorer.exe\", \"w3wp.exe\", \"Dism.exe\") or\n process.executable : (\"?:\\\\Windows\\\\explorer.exe\",\n \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\Office*\\\\WINWORD.EXE\",\n \"?:\\\\Program Files?(x86)\\\\Microsoft Office\\\\root\\\\Office*\\\\WINWORD.EXE\",\n \"?:\\\\Windows\\\\System32\\\\Dism.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\Dism.exe\",\n \"?:\\\\Windows\\\\System32\\\\inetsrv\\\\w3wp.exe\")\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "1160dcdb-0a0a-4a79-91d8-9b84616edebd", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.002", + "name": "DLL Side-Loading", + "reference": "https://attack.mitre.org/techniques/T1574/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "1160dcdb-0a0a-4a79-91d8-9b84616edebd_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1178ae09-5aff-460a-9f2f-455cd0ac4d8e_110.json b/packages/security_detection_engine/kibana/security_rule/1178ae09-5aff-460a-9f2f-455cd0ac4d8e_110.json new file mode 100644 index 00000000000..e666271d895 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1178ae09-5aff-460a-9f2f-455cd0ac4d8e_110.json @@ -0,0 +1,138 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to bypass User Account Control (UAC) by hijacking the Microsoft Management Console (MMC) Windows Firewall snap-in. Attackers bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass via Windows Firewall Snap-In Hijack", + "note": "## Triage and analysis\n\n### Investigating UAC Bypass via Windows Firewall Snap-In Hijack\n\nWindows User Account Control (UAC) allows a program to elevate its privileges (tracked as low to high integrity levels) to perform a task under administrator-level permissions, possibly by prompting the user for confirmation. UAC can deny an operation under high-integrity enforcement, or allow the user to perform the action if they are in the local administrators group and enter an administrator password when prompted.\n\nFor more information about the UAC and how it works, check the [official Microsoft docs page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works).\n\nThis rule identifies attempts to bypass User Account Control (UAC) by hijacking the Microsoft Management Console (MMC) Windows Firewall snap-in. Attackers bypass UAC to stealthily execute code with elevated permissions.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze any suspicious spawned processes using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name == \"mmc.exe\" and\n /* process.Ext.token.integrity_level_name == \"high\" can be added in future for tuning */\n /* args of the Windows Firewall SnapIn */\n process.parent.args == \"WF.msc\" and process.name != \"WerFault.exe\"\n", + "references": [ + "https://github.com/AzAgarampur/byeintegrity-uac" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1178ae09-5aff-460a-9f2f-455cd0ac4d8e", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + }, + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.014", + "name": "MMC", + "reference": "https://attack.mitre.org/techniques/T1218/014/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "1178ae09-5aff-460a-9f2f-455cd0ac4d8e_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/11dd9713-0ec6-4110-9707-32daae1ee68c_11.json b/packages/security_detection_engine/kibana/security_rule/11dd9713-0ec6-4110-9707-32daae1ee68c_11.json new file mode 100644 index 00000000000..2ea3731da39 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/11dd9713-0ec6-4110-9707-32daae1ee68c_11.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects scripts that contain PowerShell functions, structures, or Windows API functions related to token impersonation/theft. Attackers may duplicate then impersonate another user's token to escalate privileges and bypass access controls.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Token Impersonation Capabilities", + "note": "## Triage and analysis\n\n### Investigating PowerShell Script with Token Impersonation Capabilities\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAdversaries can abuse PowerShell to perform token impersonation, which involves duplicating and impersonating another user's token to escalate privileges and bypass access controls. This rule identifies scripts containing PowerShell functions, structures, or Windows API functions related to token impersonation/theft.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine PowerShell process creation and script block logs to identify command line arguments or hardcoded information that can indicate which user was the target of the impersonation.\n- Investigate any abnormal behavior by the subject process (PowerShell), such as network connections, registry or file modifications, and any spawned child processes.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- Regular users should not need to impersonate other users, which makes false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Related Rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text:(\n \"Invoke-TokenManipulation\" or\n \"ImpersonateNamedPipeClient\" or\n \"NtImpersonateThread\" or\n (\n \"STARTUPINFOEX\" and\n \"UpdateProcThreadAttribute\"\n ) or\n (\n \"AdjustTokenPrivileges\" and\n \"SeDebugPrivilege\"\n ) or\n (\n (\"DuplicateToken\" or\n \"DuplicateTokenEx\") and\n (\"SetThreadToken\" or\n \"ImpersonateLoggedOnUser\" or\n \"CreateProcessWithTokenW\" or\n \"CreatePRocessAsUserW\" or\n \"CreateProcessAsUserA\")\n ) \n ) and\n not (\n user.id:(\"S-1-5-18\" or \"S-1-5-19\" or \"S-1-5-20\") and\n file.directory: \"C:\\\\ProgramData\\\\Microsoft\\\\Windows Defender Advanced Threat Protection\\\\Downloads\"\n ) and\n not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\" and \"PowerSploitIndicators\"\n )\n", + "references": [ + "https://github.com/decoder-it/psgetsystem", + "https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/Get-System.ps1", + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/privesc/Invoke-MS16032.ps1", + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.directory", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "11dd9713-0ec6-4110-9707-32daae1ee68c", + "setup": "The 'PowerShell Script Block Logging' logging policy must be configured (Enable).\n\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/", + "subtechnique": [ + { + "id": "T1134.001", + "name": "Token Impersonation/Theft", + "reference": "https://attack.mitre.org/techniques/T1134/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 11 + }, + "id": "11dd9713-0ec6-4110-9707-32daae1ee68c_11", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/11ea6bec-ebde-4d71-a8e9-784948f8e3e9_111.json b/packages/security_detection_engine/kibana/security_rule/11ea6bec-ebde-4d71-a8e9-784948f8e3e9_111.json new file mode 100644 index 00000000000..1044605661d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/11ea6bec-ebde-4d71-a8e9-784948f8e3e9_111.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the deletion of backup files, saved using third-party software, by a process outside of the backup suite. Adversaries may delete Backup files to ensure that recovery from a ransomware attack is less likely.", + "false_positives": [ + "Certain utilities that delete files for disk cleanup or Administrators manually removing backup files." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Third-party Backup Files Deleted via Unexpected Process", + "note": "## Triage and analysis\n\n### Investigating Third-party Backup Files Deleted via Unexpected Process\n\nBackups are a significant obstacle for any ransomware operation. They allow the victim to resume business by performing data recovery, making them a valuable target.\n\nAttackers can delete backups from the host and gain access to backup servers to remove centralized backups for the environment, ensuring that victims have no alternatives to paying the ransom.\n\nThis rule identifies file deletions performed by a process that does not belong to the backup suite and aims to delete Veritas or Veeam backups.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check if any files on the host machine have been encrypted.\n\n### False positive analysis\n\n- This rule can be triggered by the manual removal of backup files and by removal using other third-party tools that are not from the backup suite. Exceptions can be added for specific accounts and executables, preferably tied together.\n\n### Related rules\n\n- Deleting Backup Catalogs with Wbadmin - 581add16-df76-42bb-af8e-c979bfb39a59\n- Volume Shadow Copy Deleted or Resized via VssAdmin - b5ea4bfe-a1b2-421f-9d47-22a75a6f2921\n- Volume Shadow Copy Deletion via PowerShell - d99a037b-c8e2-47a5-97b9-170d076827c4\n- Volume Shadow Copy Deletion via WMIC - dc9c1f74-dac3-48e3-b47f-eb79db358f57\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- Perform data recovery locally or restore the backups from replicated copies (Cloud, other servers, etc.).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type == \"deletion\" and\n (\n /* Veeam Related Backup Files */\n (\n file.extension : (\"VBK\", \"VIB\", \"VBM\") and\n not (\n process.executable : (\"?:\\\\Windows\\\\*\", \"?:\\\\Program Files\\\\*\", \"?:\\\\Program Files (x86)\\\\*\") and\n (process.code_signature.trusted == true and process.code_signature.subject_name : (\"Veeam Software Group GmbH\", \"Veeam Software AG\"))\n )\n ) or\n /* Veritas Backup Exec Related Backup File */\n (\n file.extension : \"BKF\" and\n not process.executable : (\n \"?:\\\\Program Files\\\\Veritas\\\\Backup Exec\\\\*\",\n \"?:\\\\Program Files (x86)\\\\Veritas\\\\Backup Exec\\\\*\"\n )\n )\n ) and\n not (\n process.name : (\"MSExchangeMailboxAssistants.exe\", \"Microsoft.PowerBI.EnterpriseGateway.exe\") and\n (process.code_signature.subject_name : \"Microsoft Corporation\" and process.code_signature.trusted == true)\n ) and\n not file.path : (\n \"?:\\\\ProgramData\\\\Trend Micro\\\\*\",\n \"?:\\\\Program Files (x86)\\\\Trend Micro\\\\*\",\n \"?:\\\\$RECYCLE.BIN\\\\*\"\n )\n", + "references": [ + "https://www.advintel.io/post/backup-removal-solutions-from-conti-ransomware-with-love" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "11ea6bec-ebde-4d71-a8e9-784948f8e3e9", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + }, + { + "id": "T1485", + "name": "Data Destruction", + "reference": "https://attack.mitre.org/techniques/T1485/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "11ea6bec-ebde-4d71-a8e9-784948f8e3e9_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1224da6c-0326-4b4f-8454-68cdc5ae542b_3.json b/packages/security_detection_engine/kibana/security_rule/1224da6c-0326-4b4f-8454-68cdc5ae542b_3.json new file mode 100644 index 00000000000..071b155e449 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1224da6c-0326-4b4f-8454-68cdc5ae542b_3.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job combination has detected a set of one or more suspicious Windows processes with unusually high scores for malicious probability. These process(es) have been classified as malicious in several ways. The process(es) were predicted to be malicious by the ProblemChild supervised ML model. If the anomaly contains a cluster of suspicious processes, each process has the same user name, and the aggregate score of the event cluster was calculated to be unusually high by an unsupervised ML model. Such a cluster often contains suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_high_sum_by_user", + "name": "Suspicious Windows Process Cluster Spawned by a User", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "1224da6c-0326-4b4f-8454-68cdc5ae542b", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "1224da6c-0326-4b4f-8454-68cdc5ae542b_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/128468bf-cab1-4637-99ea-fdf3780a4609_107.json b/packages/security_detection_engine/kibana/security_rule/128468bf-cab1-4637-99ea-fdf3780a4609_107.json new file mode 100644 index 00000000000..8ac4049c187 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/128468bf-cab1-4637-99ea-fdf3780a4609_107.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies access attempts to LSASS handle, this may indicate an attempt to dump credentials from Lsass memory.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Lsass Process Access", + "query": "process where host.os.type == \"windows\" and event.code == \"10\" and\n winlog.event_data.TargetImage : \"?:\\\\WINDOWS\\\\system32\\\\lsass.exe\" and\n not winlog.event_data.GrantedAccess :\n (\"0x1000\", \"0x1400\", \"0x101400\", \"0x101000\", \"0x101001\", \"0x100000\", \"0x100040\", \"0x3200\", \"0x40\", \"0x3200\") and\n not process.name : (\"procexp64.exe\", \"procmon.exe\", \"procexp.exe\", \"Microsoft.Identity.AadConnect.Health.AadSync.Host.ex\") and\n not process.executable : (\n \"?:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\platform\\\\*\",\n \"?:\\\\ProgramData\\\\WebEx\\\\webex\\\\*\",\n \"?:\\\\Program Files (x86)\\\\*\",\n \"?:\\\\Program Files\\\\*\",\n \"?:\\\\Windows\\\\CCM\\\\CcmExec.exe\",\n \"?:\\\\Windows\\\\LTSvc\\\\LTSVC.exe\",\n \"?:\\\\Windows\\\\Sysmon.exe\",\n \"?:\\\\Windows\\\\Sysmon64.exe\",\n \"?:\\\\Windows\\\\system32\\\\csrss.exe\",\n \"?:\\\\Windows\\\\System32\\\\lsm.exe\",\n \"?:\\\\Windows\\\\system32\\\\MRT.exe\",\n \"?:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\system32\\\\wbem\\\\wmiprvse.exe\",\n \"?:\\\\Windows\\\\system32\\\\wininit.exe\",\n \"?:\\\\Windows\\\\SystemTemp\\\\GUM*.tmp\\\\GoogleUpdate.exe\",\n \"?:\\\\Windows\\\\sysWOW64\\\\wbem\\\\wmiprvse.exe\"\n ) and\n not winlog.event_data.CallTrace : (\"*mpengine.dll*\", \"*appresolver.dll*\", \"*sysmain.dll*\")\n", + "references": [ + "https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.001/T1003.001.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.GrantedAccess", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetImage", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "128468bf-cab1-4637-99ea-fdf3780a4609", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "128468bf-cab1-4637-99ea-fdf3780a4609_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/12f07955-1674-44f7-86b5-c35da0a6f41a_110.json b/packages/security_detection_engine/kibana/security_rule/12f07955-1674-44f7-86b5-c35da0a6f41a_110.json new file mode 100644 index 00000000000..101e6551039 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/12f07955-1674-44f7-86b5-c35da0a6f41a_110.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious command execution (cmd) via Windows Management Instrumentation (WMI) on a remote host. This could be indicative of adversary lateral movement.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Cmd Execution via WMI", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"WmiPrvSE.exe\" and process.name : \"cmd.exe\" and\n process.args : \"\\\\\\\\127.0.0.1\\\\*\" and process.args : (\"2>&1\", \"1>\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "12f07955-1674-44f7-86b5-c35da0a6f41a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + }, + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "12f07955-1674-44f7-86b5-c35da0a6f41a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1327384f-00f3-44d5-9a8c-2373ba071e92_107.json b/packages/security_detection_engine/kibana/security_rule/1327384f-00f3-44d5-9a8c-2373ba071e92_107.json new file mode 100644 index 00000000000..ed866ad186e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1327384f-00f3-44d5-9a8c-2373ba071e92_107.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A job can be used to schedule programs or scripts to be executed at a specified date and time. Adversaries may abuse task scheduling functionality to facilitate initial or recurring execution of malicious code.", + "false_positives": [ + "Legitimate scheduled jobs may be created during installation of new software." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Scheduled Job Creation", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.path : \"?:\\\\Windows\\\\Tasks\\\\*\" and file.extension : \"job\" and\n not (\n (\n process.executable : \"?:\\\\Program Files\\\\CCleaner\\\\CCleaner64.exe\" and\n file.path : \"?:\\\\Windows\\\\Tasks\\\\CCleanerCrashReporting.job\"\n ) or\n (\n process.executable : (\n \"?:\\\\Program Files (x86)\\\\ManageEngine\\\\UEMS_Agent\\\\bin\\\\dcagentregister.exe\",\n \"?:\\\\Program Files (x86)\\\\DesktopCentral_Agent\\\\bin\\\\dcagentregister.exe\"\n ) and\n file.path : \"?:\\\\Windows\\\\Tasks\\\\DCAgentUpdater.job\"\n )\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1327384f-00f3-44d5-9a8c-2373ba071e92", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "1327384f-00f3-44d5-9a8c-2373ba071e92_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/13e908b9-7bf0-4235-abc9-b5deb500d0ad_3.json b/packages/security_detection_engine/kibana/security_rule/13e908b9-7bf0-4235-abc9-b5deb500d0ad_3.json new file mode 100644 index 00000000000..bea7e177518 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/13e908b9-7bf0-4235-abc9-b5deb500d0ad_3.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A supervised machine learning model (ProblemChild) has identified a suspicious Windows process event with high probability of it being malicious activity. Alternatively, the model's blocklist identified the event as being malicious.", + "from": "now-10m", + "index": [ + "endgame-*", + "logs-endpoint.events.process-*", + "winlogbeat-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Machine Learning Detected a Suspicious Windows Event Predicted to be Malicious Activity", + "query": "process where (problemchild.prediction == 1 or blocklist_label == 1) and not process.args : (\"*C:\\\\WINDOWS\\\\temp\\\\nessus_*.txt*\", \"*C:\\\\WINDOWS\\\\temp\\\\nessus_*.tmp*\")\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "blocklist_label", + "type": "unknown" + }, + { + "ecs": false, + "name": "problemchild.prediction", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "13e908b9-7bf0-4235-abc9-b5deb500d0ad", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n", + "severity": "low", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.004", + "name": "Masquerade Task or Service", + "reference": "https://attack.mitre.org/techniques/T1036/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "13e908b9-7bf0-4235-abc9-b5deb500d0ad_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/14ed1aa9-ebfd-4cf9-a463-0ac59ec55204_108.json b/packages/security_detection_engine/kibana/security_rule/14ed1aa9-ebfd-4cf9-a463-0ac59ec55204_108.json new file mode 100644 index 00000000000..904c0d233e2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/14ed1aa9-ebfd-4cf9-a463-0ac59ec55204_108.json @@ -0,0 +1,119 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modification of the Time Provider. Adversaries may establish persistence by registering and enabling a malicious DLL as a time provider. Windows uses the time provider architecture to obtain accurate time stamps from other network devices or clients in the network. Time providers are implemented in the form of a DLL file which resides in the System32 folder. The service W32Time initiates during the startup of Windows and loads w32time.dll.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Persistence via Time Provider Modification", + "note": "## Triage and analysis\n\n### Investigating Potential Persistence via Time Provider Modification\n\nThe Time Provider architecture in Windows is responsible for obtaining accurate timestamps from network devices or clients. It is implemented as a DLL file in the System32 folder and is initiated by the W32Time service during Windows startup. Adversaries may exploit this by registering and enabling a malicious DLL as a time provider to establish persistence. \n\nThis rule identifies changes in the registry paths associated with Time Providers, specifically targeting the addition of new DLL files.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine whether the DLL is signed.\n- Retrieve the DLL and determine if it is malicious:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restore Time Provider settings to the desired state.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type:\"change\" and\n registry.path: (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\W32Time\\\\TimeProviders\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\W32Time\\\\TimeProviders\\\\*\"\n ) and\n registry.data.strings:\"*.dll\" and\n not\n (\n process.executable : \"?:\\\\Windows\\\\System32\\\\msiexec.exe\" and\n registry.data.strings : \"?:\\\\Program Files\\\\VMware\\\\VMware Tools\\\\vmwTimeProvider\\\\vmwTimeProvider.dll\"\n )\n", + "references": [ + "https://pentestlab.blog/2019/10/22/persistence-time-providers/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "14ed1aa9-ebfd-4cf9-a463-0ac59ec55204", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.003", + "name": "Time Providers", + "reference": "https://attack.mitre.org/techniques/T1547/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.003", + "name": "Time Providers", + "reference": "https://attack.mitre.org/techniques/T1547/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "14ed1aa9-ebfd-4cf9-a463-0ac59ec55204_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/15a8ba77-1c13-4274-88fe-6bd14133861e_110.json b/packages/security_detection_engine/kibana/security_rule/15a8ba77-1c13-4274-88fe-6bd14133861e_110.json new file mode 100644 index 00000000000..1c2db4a3b81 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/15a8ba77-1c13-4274-88fe-6bd14133861e_110.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the modification of Group Policy Object attributes to execute a scheduled task in the objects controlled by the GPO.", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Scheduled Task Execution at Scale via GPO", + "note": "## Triage and analysis\n\n### Investigating Scheduled Task Execution at Scale via GPO\n\nGroup Policy Objects (GPOs) can be used by attackers to execute scheduled tasks at scale to compromise objects controlled by a given GPO. This is done by changing the contents of the `\\Machine\\Preferences\\ScheduledTasks\\ScheduledTasks.xml` file.\n\n#### Possible investigation steps\n\n- This attack abuses a legitimate mechanism of Active Directory, so it is important to determine whether the activity is legitimate and the administrator is authorized to perform this operation.\n- Retrieve the contents of the `ScheduledTasks.xml` file, and check the `` and `` XML tags for any potentially malicious commands or binaries.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Scope which objects may be compromised by retrieving information about which objects are controlled by the GPO.\n\n### False positive analysis\n\n- Verify if the execution is allowed and done under change management, and if the execution is legitimate.\n\n### Related rules\n\n- Group Policy Abuse for Privilege Addition - b9554892-5e0e-424b-83a0-5aef95aa43bf\n- Startup/Logon Script added to Group Policy Object - 16fac1a1-21ee-4ca6-b720-458e3855d046\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- The investigation and containment must be performed in every computer controlled by the GPO, where necessary.\n- Remove the script from the GPO.\n- Check if other GPOs have suspicious scheduled tasks attached.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "(event.code: \"5136\" and winlog.event_data.AttributeLDAPDisplayName:(\"gPCMachineExtensionNames\" or \"gPCUserExtensionNames\") and\n winlog.event_data.AttributeValue:(*CAB54552-DEEA-4691-817E-ED4A4D1AFC72* and *AADCED64-746C-4633-A97C-D61349046527*))\nor\n(event.code: \"5145\" and winlog.event_data.ShareName: \"\\\\\\\\*\\\\SYSVOL\" and winlog.event_data.RelativeTargetName: *ScheduledTasks.xml and\n (message: WriteData or winlog.event_data.AccessList: *%%4417*))\n", + "references": [ + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0025_windows_audit_directory_service_changes.md", + "https://github.com/atc-project/atc-data/blob/f2bbb51ecf68e2c9f488e3c70dcdd3df51d2a46b/docs/Logging_Policies/LP_0029_windows_audit_detailed_file_share.md", + "https://labs.f-secure.com/tools/sharpgpoabuse", + "https://twitter.com/menasec1/status/1106899890377052160", + "https://github.com/SigmaHQ/sigma/blob/master/rules/windows/builtin/security/win_gpo_scheduledtasks.yml" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "message", + "type": "match_only_text" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessList", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeValue", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.RelativeTargetName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ShareName", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "15a8ba77-1c13-4274-88fe-6bd14133861e", + "setup": "## Setup\n\nThe 'Audit Detailed File Share' audit policy must be configured (Success Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nObject Access >\nAudit Detailed File Share (Success,Failure)\n```\n\nThe 'Audit Directory Service Changes' audit policy must be configured (Success Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Lateral Movement", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + }, + { + "id": "T1484", + "name": "Domain Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/", + "subtechnique": [ + { + "id": "T1484.001", + "name": "Group Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1570", + "name": "Lateral Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1570/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "15a8ba77-1c13-4274-88fe-6bd14133861e_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/15c0b7a7-9c34-4869-b25b-fa6518414899_111.json b/packages/security_detection_engine/kibana/security_rule/15c0b7a7-9c34-4869-b25b-fa6518414899_111.json new file mode 100644 index 00000000000..707ed2d5593 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/15c0b7a7-9c34-4869-b25b-fa6518414899_111.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the desktopimgdownldr utility being used to download a remote file. An adversary may use desktopimgdownldr to download arbitrary files as an alternative to certutil.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote File Download via Desktopimgdownldr Utility", + "note": "## Triage and analysis\n\n### Investigating Remote File Download via Desktopimgdownldr Utility\n\nAttackers commonly transfer tooling or malware from external systems into a compromised environment using the command and control channel. However, they can also abuse signed utilities to drop these files.\n\nThe `Desktopimgdownldr.exe` utility is used to to configure lockscreen/desktop image, and can be abused with the `lockscreenurl` argument to download remote files and tools, this rule looks for this behavior.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses the [Investigate Markdown Plugin](https://www.elastic.co/guide/en/security/master/interactive-investigation-guides.html) introduced in Elastic Stack version 8.8.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - !{investigate{\"label\":\"Alerts associated with the user in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"user.id\",\"queryType\":\"phrase\",\"value\":\"{{user.id}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n - !{investigate{\"label\":\"Alerts associated with the host in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"host.name\",\"queryType\":\"phrase\",\"value\":\"{{host.name}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Check the reputation of the domain or IP address used to host the downloaded file or if the user downloaded the file from an internal system.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - !{investigate{\"label\":\"Investigate the Subject Process Network Events\",\"providers\":[[{\"excluded\":false,\"field\":\"process.entity_id\",\"queryType\":\"phrase\",\"value\":\"{{process.entity_id}}\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"event.category\",\"queryType\":\"phrase\",\"value\":\"network\",\"valueType\":\"string\"}]]}}\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unusual but can be done by administrators. Benign true positives (B-TPs) can be added as exceptions if necessary.\n- Analysts can dismiss the alert if the downloaded file is a legitimate image.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"desktopimgdownldr.exe\" or ?process.pe.original_file_name == \"desktopimgdownldr.exe\") and\n process.args : \"/lockscreenurl:http*\"\n", + "references": [ + "https://labs.sentinelone.com/living-off-windows-land-a-new-native-file-downldr/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "15c0b7a7-9c34-4869-b25b-fa6518414899", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "15c0b7a7-9c34-4869-b25b-fa6518414899_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/15dacaa0-5b90-466b-acab-63435a59701a_107.json b/packages/security_detection_engine/kibana/security_rule/15dacaa0-5b90-466b-acab-63435a59701a_107.json new file mode 100644 index 00000000000..68a35c50a4d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/15dacaa0-5b90-466b-acab-63435a59701a_107.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of macOS built-in commands to connect to an existing Virtual Private Network (VPN). Adversaries may use VPN connections to laterally move and control remote systems on a network.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Virtual Private Network Connection Attempt", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n (\n (process.name : \"networksetup\" and process.args : \"-connectpppoeservice\") or\n (process.name : \"scutil\" and process.args : \"--nc\" and process.args : \"start\") or\n (process.name : \"osascript\" and process.command_line : \"osascript*set VPN to service*\")\n )\n", + "references": [ + "https://github.com/rapid7/metasploit-framework/blob/master/modules/post/osx/manage/vpn.rb", + "https://www.unix.com/man-page/osx/8/networksetup/", + "https://superuser.com/questions/358513/start-configured-vpn-from-command-line-osx" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "15dacaa0-5b90-466b-acab-63435a59701a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "15dacaa0-5b90-466b-acab-63435a59701a_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/166727ab-6768-4e26-b80c-948b228ffc06_5.json b/packages/security_detection_engine/kibana/security_rule/166727ab-6768-4e26-b80c-948b228ffc06_5.json new file mode 100644 index 00000000000..961a77cd9a0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/166727ab-6768-4e26-b80c-948b228ffc06_5.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modification of a file creation time. Adversaries may modify file time attributes to blend malicious content with existing files. Timestomping is a technique that modifies the timestamps of a file often to mimic files that are in trusted directories.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "File Creation Time Changed", + "query": "file where host.os.type == \"windows\" and event.code : \"2\" and\n\n /* Requires Sysmon EventID 2 - File creation time change */\n event.action : \"File creation time changed*\" and \n \n not process.executable : \n (\"?:\\\\Program Files\\\\*\", \n \"?:\\\\Program Files (x86)\\\\*\", \n \"?:\\\\Windows\\\\system32\\\\cleanmgr.exe\",\n \"?:\\\\Windows\\\\system32\\\\msiexec.exe\", \n \"?:\\\\Windows\\\\syswow64\\\\msiexec.exe\", \n \"?:\\\\Windows\\\\system32\\\\svchost.exe\", \n \"?:\\\\WINDOWS\\\\system32\\\\backgroundTaskHost.exe\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\", \n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Mozilla Firefox\\\\firefox.exe\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\slack\\\\app-*\\\\slack.exe\", \n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\GitHubDesktop\\\\app-*\\\\GitHubDesktop.exe\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Microsoft\\\\Teams\\\\current\\\\Teams.exe\", \n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Microsoft\\\\OneDrive\\\\OneDrive.exe\") and \n not file.extension : (\"temp\", \"tmp\", \"~tmp\", \"xml\", \"newcfg\") and not user.name : (\"SYSTEM\", \"Local Service\", \"Network Service\") and\n not file.name : (\"LOG\", \"temp-index\", \"license.rtf\", \"iconcache_*.db\")\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "166727ab-6768-4e26-b80c-948b228ffc06", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.006", + "name": "Timestomp", + "reference": "https://attack.mitre.org/techniques/T1070/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "166727ab-6768-4e26-b80c-948b228ffc06_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/16904215-2c95-4ac8-bf5c-12354e047192_106.json b/packages/security_detection_engine/kibana/security_rule/16904215-2c95-4ac8-bf5c-12354e047192_106.json new file mode 100644 index 00000000000..07ded1d1dfc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/16904215-2c95-4ac8-bf5c-12354e047192_106.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of Bifrost, a known macOS Kerberos pentesting tool, which can be used to dump cached Kerberos tickets or attempt unauthorized authentication techniques such as pass-the-ticket/hash and kerberoasting.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Kerberos Attack via Bifrost", + "query": "event.category:process and host.os.type:macos and event.type:start and\n process.args:(\"-action\" and (\"-kerberoast\" or askhash or asktgs or asktgt or s4u or (\"-ticket\" and ptt) or (dump and (tickets or keytab))))\n", + "references": [ + "https://github.com/its-a-feature/bifrost" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "16904215-2c95-4ac8-bf5c-12354e047192", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1550", + "name": "Use Alternate Authentication Material", + "reference": "https://attack.mitre.org/techniques/T1550/", + "subtechnique": [ + { + "id": "T1550.003", + "name": "Pass the Ticket", + "reference": "https://attack.mitre.org/techniques/T1550/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/", + "subtechnique": [ + { + "id": "T1558.003", + "name": "Kerberoasting", + "reference": "https://attack.mitre.org/techniques/T1558/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "16904215-2c95-4ac8-bf5c-12354e047192_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/16a52c14-7883-47af-8745-9357803f0d4c_111.json b/packages/security_detection_engine/kibana/security_rule/16a52c14-7883-47af-8745-9357803f0d4c_111.json new file mode 100644 index 00000000000..14a7139b3da --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/16a52c14-7883-47af-8745-9357803f0d4c_111.json @@ -0,0 +1,149 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies Component Object Model (COM) hijacking via registry modification. Adversaries may establish persistence by executing malicious content triggered by hijacked references to COM objects.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Component Object Model Hijacking", + "note": "## Triage and analysis\n\n### Investigating Component Object Model Hijacking\n\nAdversaries can insert malicious code that can be executed in place of legitimate software through hijacking the COM references and relationships as a means of persistence.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Retrieve the file referenced in the registry and determine if it is malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- Some Microsoft executables will reference the LocalServer32 registry key value for the location of external COM objects.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and\n /* not necessary but good for filtering privileged installations */\n user.domain != \"NT AUTHORITY\" and\n (\n (\n registry.path : \"HK*\\\\InprocServer32\\\\\" and\n registry.data.strings: (\"scrobj.dll\", \"?:\\\\*\\\\scrobj.dll\") and\n not registry.path : \"*\\\\{06290BD*-48AA-11D2-8432-006008C3FBFC}\\\\*\"\n ) or\n\n (\n registry.path : \"HKLM\\\\*\\\\InProcServer32\\\\*\" and\n registry.data.strings : (\"*\\\\Users\\\\*\", \"*\\\\ProgramData\\\\*\")\n ) or\n\n /* in general COM Registry changes on Users Hive is less noisy and worth alerting */\n (\n registry.path : (\n \"HKEY_USERS\\\\*\\\\InprocServer32\\\\\",\n \"HKEY_USERS\\\\*\\\\LocalServer32\\\\\",\n \"HKEY_USERS\\\\*\\\\DelegateExecute\",\n \"HKEY_USERS\\\\*\\\\TreatAs\\\\\",\n \"HKEY_USERS\\\\*\\\\ScriptletURL*\"\n ) and\n not \n (\n (\n process.name : \"svchost.exe\" and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Microsoft Windows Publisher\" and\n registry.value : \"DelegateExecute\" and\n registry.data.strings : (\n /* https://strontic.github.io/xcyclopedia/library/clsid_4ED3A719-CEA8-4BD9-910D-E252F997AFC2.html */\n \"{4ED3A719-CEA8-4BD9-910D-E252F997AFC2}\",\n\n /* https://strontic.github.io/xcyclopedia/library/clsid_A56A841F-E974-45C1-8001-7E3F8A085917.html */\n \"{A56A841F-E974-45C1-8001-7E3F8A085917}\",\n\n /* https://strontic.github.io/xcyclopedia/library/clsid_BFEC0C93-0B7D-4F2C-B09C-AFFFC4BDAE78.html */\n \"{BFEC0C93-0B7D-4F2C-B09C-AFFFC4BDAE78}\",\n \"%SystemRoot%\\\\system32\\\\shdocvw.dll\"\n )\n ) or\n (\n process.name : \"veeam.backup.shell.exe\" and\n registry.path : \"HKEY_USERS\\\\S-1-*_Classes\\\\CLSID\\\\*\\\\LocalServer32\\\\\" and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Veeam Software Group GmbH\"\n ) or \n (\n process.name : (\"ADNotificationManager.exe\", \"Creative Cloud.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Adobe Inc.\" and\n registry.data.strings : (\n \"\\\"?:\\\\Program Files (x86)\\\\Adobe\\\\Acrobat Reader DC\\\\Reader\\\\ADNotificationManager.exe\\\" -ToastActivated\",\n \"\\\"?:\\\\Program Files (x86)\\\\Adobe\\\\Acrobat DC\\\\Acrobat\\\\ADNotificationManager.exe\\\" -ToastActivated\",\n \"\\\"?:\\\\Program Files\\\\Adobe\\\\Acrobat DC\\\\Acrobat\\\\ADNotificationManager.exe\\\" -ToastActivated\",\n \"\\\"?:\\\\Program Files\\\\Adobe\\\\Acrobat Reader DC\\\\Reader\\\\ADNotificationManager.exe\\\" -ToastActivated\",\n \"\\\"?:\\\\Program Files\\\\Adobe\\\\Adobe Creative Cloud\\\\ACC\\\\Creative Cloud.exe\\\" -ToastActivated\"\n )\n ) or \n (\n process.name : (\"IslandUpdateComRegisterShell64.exe\", \"IslandUpdate.exe\", \"GoogleUpdateComRegisterShell64.exe\") and\n process.code_signature.trusted == true and\n process.code_signature.subject_name in (\"Island Technology Inc.\", \"Google LLC\") and\n registry.data.strings : (\n \"*?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Island\\\\Update\\\\*\",\n \"*?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Google\\\\Update\\\\*\"\n )\n ) or \n (\n process.name : (\"SelfService.exe\", \"WfShell.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Citrix Systems, Inc.\" and\n registry.data.strings : (\n \"\\\"?:\\\\Program Files (x86)\\\\Citrix\\\\ICA Client\\\\SelfServicePlugin\\\\SelfService.exe\\\" -ToastActivated\",\n \"%SystemRoot%\\\\system32\\\\shdocvw.dll\",\n \"%SystemRoot%\\\\sysWOW64\\\\shdocvw.dll\"\n )\n ) or \n (\n process.name : (\"msrdcw.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Microsoft Corporation\" and\n registry.data.strings : (\n \"\\\"?:\\\\Program Files\\\\Remote Desktop\\\\msrdcw.exe\\\" -ToastActivated\",\n \"\\\"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Apps\\\\Remote Desktop\\\\msrdcw.exe\\\" -ToastActivated\"\n )\n ) or \n (\n process.name : (\"ssvagent.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"Oracle America, Inc.\" and\n registry.data.strings : (\n \"?:\\\\Program Files\\\\Java\\\\jre*\\\\bin\\\\jp2iexp.dll\",\n \"?:\\\\Program Files (x86)\\\\Java\\\\jre*\\\\bin\\\\jp2iexp.dll\"\n )\n ) or \n (\n process.name : (\"hpnotifications.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name == \"HP Inc.\" and\n registry.data.strings : (\n \"\\\"?:\\\\Windows\\\\System32\\\\DriverStore\\\\FileRepository\\\\hpsvcsscancomp.inf_amd64_*\\\\x64\\\\hpnotifications.exe\\\" -ToastActivated\"\n )\n )\n )\n )\n ) and\n\n /* removes false-positives generated by OneDrive and Teams */\n not\n (\n process.name: (\"OneDrive.exe\", \"OneDriveSetup.exe\", \"FileSyncConfig.exe\", \"Teams.exe\") and\n process.code_signature.trusted == true and process.code_signature.subject_name in (\"Microsoft Windows\", \"Microsoft Corporation\")\n ) and\n\n /* Teams DLL loaded by regsvr */\n not (process.name: \"regsvr32.exe\" and registry.data.strings : \"*Microsoft.Teams.*.dll\")\n", + "references": [ + "https://bohops.com/2018/08/18/abusing-the-com-registry-structure-part-2-loading-techniques-for-evasion-and-persistence/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.value", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "16a52c14-7883-47af-8745-9357803f0d4c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.015", + "name": "Component Object Model Hijacking", + "reference": "https://attack.mitre.org/techniques/T1546/015/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.015", + "name": "Component Object Model Hijacking", + "reference": "https://attack.mitre.org/techniques/T1546/015/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "16a52c14-7883-47af-8745-9357803f0d4c_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/16fac1a1-21ee-4ca6-b720-458e3855d046_109.json b/packages/security_detection_engine/kibana/security_rule/16fac1a1-21ee-4ca6-b720-458e3855d046_109.json new file mode 100644 index 00000000000..b995eeb650f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/16fac1a1-21ee-4ca6-b720-458e3855d046_109.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the modification of Group Policy Objects (GPO) to add a startup/logon script to users or computer objects.", + "false_positives": [ + "Legitimate Administrative Activity" + ], + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Startup/Logon Script added to Group Policy Object", + "note": "## Triage and analysis\n\n### Investigating Startup/Logon Script added to Group Policy Object\n\nGroup Policy Objects (GPOs) can be used by attackers to instruct arbitrarily large groups of clients to execute specified commands at startup, logon, shutdown, and logoff. This is done by creating or modifying the `scripts.ini` or `psscripts.ini` files. The scripts are stored in the following paths:\n - `\\Machine\\Scripts\\`\n - `\\User\\Scripts\\`\n\n#### Possible investigation steps\n\n- This attack abuses a legitimate mechanism of Active Directory, so it is important to determine whether the activity is legitimate and the administrator is authorized to perform this operation.\n- Retrieve the contents of the `ScheduledTasks.xml` file, and check the `` and `` XML tags for any potentially malicious commands or binaries.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Scope which objects may be compromised by retrieving information about which objects are controlled by the GPO.\n\n### False positive analysis\n\n- Verify if the execution is legitimately authorized and executed under a change management process.\n\n### Related rules\n\n- Group Policy Abuse for Privilege Addition - b9554892-5e0e-424b-83a0-5aef95aa43bf\n- Scheduled Task Execution at Scale via GPO - 15a8ba77-1c13-4274-88fe-6bd14133861e\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- The investigation and containment must be performed in every computer controlled by the GPO, where necessary.\n- Remove the script from the GPO.\n- Check if other GPOs have suspicious scripts attached.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "(\n event.code:5136 and winlog.event_data.AttributeLDAPDisplayName:(gPCMachineExtensionNames or gPCUserExtensionNames) and\n winlog.event_data.AttributeValue:(*42B5FAAE-6536-11D2-AE5A-0000F87571E3* and\n (*40B66650-4972-11D1-A7CA-0000F87571E3* or *40B6664F-4972-11D1-A7CA-0000F87571E3*))\n)\nor\n(\n event.code:5145 and winlog.event_data.ShareName:\\\\\\\\*\\\\SYSVOL and\n winlog.event_data.RelativeTargetName:(*\\\\scripts.ini or *\\\\psscripts.ini) and\n (message:WriteData or winlog.event_data.AccessList:*%%4417*)\n)\n", + "references": [ + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0025_windows_audit_directory_service_changes.md", + "https://github.com/atc-project/atc-data/blob/f2bbb51ecf68e2c9f488e3c70dcdd3df51d2a46b/docs/Logging_Policies/LP_0029_windows_audit_detailed_file_share.md", + "https://labs.f-secure.com/tools/sharpgpoabuse" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "message", + "type": "match_only_text" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessList", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeValue", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.RelativeTargetName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ShareName", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "16fac1a1-21ee-4ca6-b720-458e3855d046", + "setup": "## Setup\n\nThe 'Audit Detailed File Share' audit policy must be configured (Success Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nObject Access >\nAudit Detailed File Share (Success,Failure)\n```\n\nThe 'Audit Directory Service Changes' audit policy must be configured (Success Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1484", + "name": "Domain Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/", + "subtechnique": [ + { + "id": "T1484.001", + "name": "Group Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/001/" + } + ] + }, + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 109 + }, + "id": "16fac1a1-21ee-4ca6-b720-458e3855d046_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/17b0a495-4d9f-414c-8ad0-92f018b8e001_9.json b/packages/security_detection_engine/kibana/security_rule/17b0a495-4d9f-414c-8ad0-92f018b8e001_9.json new file mode 100644 index 00000000000..e6902690411 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/17b0a495-4d9f-414c-8ad0-92f018b8e001_9.json @@ -0,0 +1,130 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Systemd service files are configuration files in Linux systems used to define and manage system services. Malicious actors can leverage systemd service files to achieve persistence by creating or modifying service files to execute malicious commands or payloads during system startup. This allows them to maintain unauthorized access, execute additional malicious activities, or evade detection.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "New Systemd Service Created by Previously Unknown Process", + "new_terms_fields": [ + "host.id", + "file.path", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating New Systemd Service Created by Previously Unknown Process\n\nSystemd service files are configuration files in Linux systems used to define and manage system services.\n\nMalicious actors can leverage systemd service files to achieve persistence by creating or modifying service files to execute malicious commands or payloads during system startup. This allows them to maintain unauthorized access, execute additional malicious activities, or evade detection.\n\nThis rule monitors the creation of new systemd service files, potentially indicating the creation of a persistence mechanism.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the systemd service file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate the currently enabled systemd services through the following command `sudo systemctl list-unit-files`.\n- Investigate whether any other files in any of the available systemd directories have been altered through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\npath LIKE '/etc/systemd/system/%' OR \\npath LIKE '/usr/local/lib/systemd/system/%' OR \\npath LIKE '/lib/systemd/system/%' OR\\npath LIKE '/usr/lib/systemd/system/%' OR\\npath LIKE '/home/user/.config/systemd/user/%'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\npath LIKE '/etc/systemd/system/%' OR \\npath LIKE '/usr/local/lib/systemd/system/%' OR \\npath LIKE '/lib/systemd/system/%' OR\\npath LIKE '/usr/lib/systemd/system/%' OR\\npath LIKE '/home/{{user.name}}/.config/systemd/user/%'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses systemd services for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Potential Persistence Through Run Control Detected - 0f4d35e4-925e-4959-ab24-911be207ee6f\n- Potential Persistence Through init.d Detected - 474fd20e-14cc-49c5-8160-d9ab4ba16c8b\n- New Systemd Timer Created - 7fb500fa-8e24-4bd1-9480-2a819352602c\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the service/timer or restore its original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:linux and event.category:file and event.action:(\"creation\" or \"file_create_event\") and file.path:(\n /etc/systemd/system/* or \n /usr/local/lib/systemd/system/* or \n /lib/systemd/system/* or \n /usr/lib/systemd/system/* or \n /home/*/.config/systemd/user/*\n) and \nnot (\n process.name:(\n \"dpkg\" or \"dockerd\" or \"rpm\" or \"snapd\" or \"yum\" or \"exe\" or \"dnf\" or \"dnf-automatic\" or python* or \"puppetd\" or\n \"elastic-agent\" or \"cinc-client\" or \"chef-client\" or \"pacman\" or \"puppet\" or \"cloudflared\" or \"packagekitd\" or\n \"podman\"\n ) or \n file.extension:(\"swp\" or \"swpx\")\n)\n", + "references": [ + "https://opensource.com/article/20/7/systemd-timers", + "https://pberba.github.io/security/2022/01/30/linux-threat-hunting-for-persistence-systemd-timers-cron/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "17b0a495-4d9f-414c-8ad0-92f018b8e001", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.002", + "name": "Systemd Service", + "reference": "https://attack.mitre.org/techniques/T1543/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.002", + "name": "Systemd Service", + "reference": "https://attack.mitre.org/techniques/T1543/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 9 + }, + "id": "17b0a495-4d9f-414c-8ad0-92f018b8e001_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/17c7f6a5-5bc9-4e1f-92bf-13632d24384d_108.json b/packages/security_detection_engine/kibana/security_rule/17c7f6a5-5bc9-4e1f-92bf-13632d24384d_108.json new file mode 100644 index 00000000000..f4f7b013aa4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/17c7f6a5-5bc9-4e1f-92bf-13632d24384d_108.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a process with a single character process name, differing from the original file name. This is often done by adversaries while staging, executing temporary utilities, or trying to bypass security detections based on the process name.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Renamed Utility Executed with Short Program Name", + "note": "## Triage and analysis\n\n### Investigating Renamed Utility Executed with Short Program Name\n\nIdentifies the execution of a process with a single character process name, differing from the original file name. This is often done by adversaries while staging, executing temporary utilities, or trying to bypass security detections based on the process name.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, command line and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and length(process.name) > 0 and\n length(process.name) == 5 and length(process.pe.original_file_name) > 5\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "17c7f6a5-5bc9-4e1f-92bf-13632d24384d", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "17c7f6a5-5bc9-4e1f-92bf-13632d24384d_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/18a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3.json b/packages/security_detection_engine/kibana/security_rule/18a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3.json new file mode 100644 index 00000000000..204ef6591f0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/18a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a high count of source IPs establishing an RDP connection with a single destination IP. Attackers might use multiple compromised systems to attack a target to ensure redundancy in case a source IP gets detected and blocked.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_rdp_distinct_count_source_ip_for_destination", + "name": "Spike in Number of Connections Made to a Destination IP", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "18a5dd9a-e3fa-4996-99b1-ae533b8f27fc", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "18a5dd9a-e3fa-4996-99b1-ae533b8f27fc_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/193549e8-bb9e-466a-a7f9-7e783f5cb5a6_4.json b/packages/security_detection_engine/kibana/security_rule/193549e8-bb9e-466a-a7f9-7e783f5cb5a6_4.json new file mode 100644 index 00000000000..a6ae1b33de3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/193549e8-bb9e-466a-a7f9-7e783f5cb5a6_4.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors a sequence involving a program compilation event followed by its execution and a subsequent alteration of UID permissions to root privileges. This behavior can potentially indicate the execution of a kernel or software privilege escalation exploit.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via Recently Compiled Executable", + "query": "sequence by host.id with maxspan=1m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name in (\"gcc\", \"g++\", \"cc\") and user.id != \"0\"] by process.args\n [file where host.os.type == \"linux\" and event.action == \"creation\" and event.type == \"creation\" and \n process.name == \"ld\" and user.id != \"0\"] by file.name\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n user.id != \"0\"] by process.name\n [process where host.os.type == \"linux\" and event.action in (\"uid_change\", \"guid_change\") and event.type == \"change\" and \n user.id == \"0\"] by process.name\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "193549e8-bb9e-466a-a7f9-7e783f5cb5a6", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 4 + }, + "id": "193549e8-bb9e-466a-a7f9-7e783f5cb5a6_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/19e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3.json b/packages/security_detection_engine/kibana/security_rule/19e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3.json new file mode 100644 index 00000000000..4976f8df6bb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/19e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected unusually high number of processes started in a single RDP session. Executing a large number of processes remotely on other machines can be an indicator of lateral movement activity.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_sum_rdp_number_of_processes", + "name": "Spike in Number of Processes in an RDP Session", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "19e9daf3-f5c5-4bc2-a9af-6b1e97098f03", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "19e9daf3-f5c5-4bc2-a9af-6b1e97098f03_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1a6075b0-7479-450e-8fe7-b8b8438ac570_108.json b/packages/security_detection_engine/kibana/security_rule/1a6075b0-7479-450e-8fe7-b8b8438ac570_108.json new file mode 100644 index 00000000000..5462cf91159 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1a6075b0-7479-450e-8fe7-b8b8438ac570_108.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Windows Component Object Model (COM) is an inter-process communication (IPC) component of the native Windows application programming interface (API) that enables interaction between software objects or executable code. Xwizard can be used to run a COM object created in registry to evade defensive counter measures.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution of COM object via Xwizard", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"xwizard.exe\" or ?process.pe.original_file_name : \"xwizard.exe\") and\n (\n (process.args : \"RunWizard\" and process.args : \"{*}\") or\n (process.executable != null and\n not process.executable : (\"C:\\\\Windows\\\\SysWOW64\\\\xwizard.exe\", \"C:\\\\Windows\\\\System32\\\\xwizard.exe\")\n )\n )\n", + "references": [ + "https://lolbas-project.github.io/lolbas/Binaries/Xwizard/", + "http://www.hexacorn.com/blog/2017/07/31/the-wizard-of-x-oppa-plugx-style/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1a6075b0-7479-450e-8fe7-b8b8438ac570", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/", + "subtechnique": [ + { + "id": "T1559.001", + "name": "Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1559/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "1a6075b0-7479-450e-8fe7-b8b8438ac570_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1aa9181a-492b-4c01-8b16-fa0735786b2b_108.json b/packages/security_detection_engine/kibana/security_rule/1aa9181a-492b-4c01-8b16-fa0735786b2b_108.json new file mode 100644 index 00000000000..21f60572bda --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1aa9181a-492b-4c01-8b16-fa0735786b2b_108.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to create new users. This is sometimes done by attackers to increase access or establish persistence on a system or domain.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "User Account Creation", + "note": "## Triage and analysis\n\n### Investigating User Account Creation\n\nAttackers may create new accounts (both local and domain) to maintain access to victim systems.\n\nThis rule identifies the usage of `net.exe` to create new accounts.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Identify if the account was added to privileged groups or assigned special privileges after creation.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- Account creation is a common administrative task, so there is a high chance of the activity being legitimate. Before investigating further, verify that this activity is not benign.\n\n### Related rules\n\n- Creation of a Hidden Local User Account - 2edc8076-291e-41e9-81e4-e3fcbc97ae5e\n- Windows User Account Creation - 38e17753-f581-4644-84da-0d60a8318694\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Delete the created account.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"net.exe\", \"net1.exe\") and\n not process.parent.name : \"net.exe\" and\n (process.args : \"user\" and process.args : (\"/ad\", \"/add\"))\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "1aa9181a-492b-4c01-8b16-fa0735786b2b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "1aa9181a-492b-4c01-8b16-fa0735786b2b_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1b21abcc-4d9f-4b08-a7f5-316f5f94b973_107.json b/packages/security_detection_engine/kibana/security_rule/1b21abcc-4d9f-4b08-a7f5-316f5f94b973_107.json new file mode 100644 index 00000000000..8650bc488e4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1b21abcc-4d9f-4b08-a7f5-316f5f94b973_107.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Telnet provides a command line interface for communication with a remote device or server. This rule identifies Telnet network connections to non-publicly routable IP addresses.", + "false_positives": [ + "Telnet can be used for both benign or malicious purposes. Telnet is included by default in some Linux distributions, so its presence is not inherently suspicious. The use of Telnet to manage devices remotely has declined in recent years in favor of more secure protocols such as SSH. Telnet usage by non-automated tools or frameworks may be suspicious." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Connection to Internal Network via Telnet", + "query": "sequence by process.entity_id\n [process where host.os.type == \"linux\" and process.name == \"telnet\" and event.type == \"start\"]\n [network where host.os.type == \"linux\" and process.name == \"telnet\" and cidrmatch(\n destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\",\n \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\",\n \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\",\n \"192.175.48.0/24\", \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\",\n \"FF00::/8\"\n )\n ]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1b21abcc-4d9f-4b08-a7f5-316f5f94b973", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "1b21abcc-4d9f-4b08-a7f5-316f5f94b973_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1c27fa22-7727-4dd3-81c0-de6da5555feb_10.json b/packages/security_detection_engine/kibana/security_rule/1c27fa22-7727-4dd3-81c0-de6da5555feb_10.json new file mode 100644 index 00000000000..3ce208e2a92 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1c27fa22-7727-4dd3-81c0-de6da5555feb_10.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple internal consecutive login failures targeting a user account from the same source address within a short time interval. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to these accounts.", + "from": "now-9m", + "index": [ + "logs-system.auth-*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 5, + "name": "Potential Internal Linux SSH Brute Force Detected", + "note": "## Triage and analysis\n\n### Investigating Potential Internal Linux SSH Brute Force Detected\n\nThe rule identifies consecutive internal SSH login failures targeting a user account from the same source IP address to the same target host indicating brute force login attempts.\n\n#### Possible investigation steps\n\n- Investigate the login failure user name(s).\n- Investigate the source IP address of the failed ssh login attempt(s).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n\n### False positive analysis\n\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Infrastructure or availability issue.\n\n### Related Rules\n\n- Potential External Linux SSH Brute Force Detected - fa210b61-b627-4e5e-86f4-17e8270656ab\n- Potential SSH Password Guessing - 8cb84371-d053-4f4f-bce0-c74990e28f28\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, source.ip, user.name with maxspan=15s\n [ authentication where host.os.type == \"linux\" and \n event.action in (\"ssh_login\", \"user_login\") and event.outcome == \"failure\" and\n cidrmatch(source.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \n \"::1\", \"FE80::/10\", \"FF00::/8\") ] with runs = 10\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1c27fa22-7727-4dd3-81c0-de6da5555feb", + "setup": "## Setup\n\nThis rule requires data coming in from Filebeat.\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the \u201cFilebeat System Module\u201d to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 10 + }, + "id": "1c27fa22-7727-4dd3-81c0-de6da5555feb_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109.json b/packages/security_detection_engine/kibana/security_rule/1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109.json new file mode 100644 index 00000000000..814f3a60363 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects when a user grants permissions to an Azure-registered application or when an administrator grants tenant-wide permissions to an application. An adversary may create an Azure-registered application that requests access to data such as contact information, email, or documents.", + "from": "now-25m", + "index": [ + "filebeat-*", + "logs-azure*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Possible Consent Grant Attack via Azure-Registered Application", + "note": "## Triage and analysis\n\n### Investigating Possible Consent Grant Attack via Azure-Registered Application\n\nIn an illicit consent grant attack, the attacker creates an Azure-registered application that requests access to data such as contact information, email, or documents. The attacker then tricks an end user into granting that application consent to access their data either through a phishing attack, or by injecting illicit code into a trusted website. After the illicit application has been granted consent, it has account-level access to data without the need for an organizational account. Normal remediation steps like resetting passwords for breached accounts or requiring multi-factor authentication (MFA) on accounts are not effective against this type of attack, since these are third-party applications and are external to the organization.\n\nOfficial Microsoft guidance for detecting and remediating this attack can be found [here](https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/detect-and-remediate-illicit-consent-grants).\n\n#### Possible investigation steps\n\n- From the Azure AD portal, Review the application that was granted permissions:\n - Click on the `Review permissions` button on the `Permissions` blade of the application.\n - An app should require only permissions related to the app's purpose. If that's not the case, the app might be risky.\n - Apps that require high privileges or admin consent are more likely to be risky.\n- Investigate the app and the publisher. The following characteristics can indicate suspicious apps:\n - A low number of downloads.\n - Low rating or score or bad comments.\n - Apps with a suspicious publisher or website.\n - Apps whose last update is not recent. This might indicate an app that is no longer supported.\n- Export and examine the [Oauth app auditing](https://docs.microsoft.com/en-us/defender-cloud-apps/manage-app-permissions#oauth-app-auditing) to identify users affected.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Malicious applications abuse the same workflow used by legitimate apps. Thus, analysts must review each app consent to ensure that only desired apps are granted access.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Identify the possible impact of the incident and prioritize accordingly; the following actions can help you gain context:\n - Identify the account role in the cloud environment.\n - Assess the criticality of affected services and servers.\n - Work with your IT team to identify and minimize the impact on users.\n - Identify if the attacker is moving laterally and compromising other accounts, servers, or services.\n - Identify any regulatory or legal ramifications related to this activity.\n- Disable the malicious application to stop user access and the application access to your data.\n- Revoke the application Oauth consent grant. The `Remove-AzureADOAuth2PermissionGrant` cmdlet can be used to complete this task.\n- Remove the service principal application role assignment. The `Remove-AzureADServiceAppRoleAssignment` cmdlet can be used to complete this task.\n- Revoke the refresh token for all users assigned to the application. Azure provides a [playbook](https://github.com/Azure/Azure-Sentinel/tree/master/Playbooks/Revoke-AADSignInSessions) for this task.\n- [Report](https://docs.microsoft.com/en-us/defender-cloud-apps/manage-app-permissions#send-feedback) the application as malicious to Microsoft.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords or delete API keys as needed to revoke the attacker's access to the environment. Work with your IT teams to minimize the impact on business operations during these actions.\n- Investigate the potential for data compromise from the user's email and file sharing services. Activate your Data Loss incident response playbook.\n- Disable the permission for a user to set consent permission on their behalf.\n - Enable the [Admin consent request](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-admin-consent-workflow) feature.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).", + "query": "event.dataset:(azure.activitylogs or azure.auditlogs or o365.audit) and\n (\n azure.activitylogs.operation_name:\"Consent to application\" or\n azure.auditlogs.operation_name:\"Consent to application\" or\n o365.audit.Operation:\"Consent to application.\"\n ) and\n event.outcome:(Success or success)\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/detect-and-remediate-illicit-consent-grants?view=o365-worldwide", + "https://www.cloud-architekt.net/detection-and-mitigation-consent-grant-attacks-azuread/", + "https://docs.microsoft.com/en-us/defender-cloud-apps/investigate-risky-oauth#how-to-detect-risky-oauth-apps" + ], + "related_integrations": [ + { + "integration": "activitylogs", + "package": "azure", + "version": "^1.0.0" + }, + { + "package": "azure", + "version": "^1.0.0" + }, + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "azure.activitylogs.operation_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "azure.auditlogs.operation_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Operation", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38", + "setup": "The Azure Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Azure", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Resources: Investigation Guide", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1528", + "name": "Steal Application Access Token", + "reference": "https://attack.mitre.org/techniques/T1528/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 109 + }, + "id": "1c6a8c7a-5cb6-4a82-ba27-d5a5b8a40a38_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1c84dd64-7e6c-4bad-ac73-a5014ee37042_113.json b/packages/security_detection_engine/kibana/security_rule/1c84dd64-7e6c-4bad-ac73-a5014ee37042_113.json new file mode 100644 index 00000000000..d8364209914 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1c84dd64-7e6c-4bad-ac73-a5014ee37042_113.json @@ -0,0 +1,171 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the manual creation of files in specific etc directories, via user root, used by Linux malware to persist and elevate privileges on compromised systems. File creation in these directories should not be entirely common and could indicate a malicious binary or script installing persistence mechanisms for long term access.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious File Creation in /etc for Persistence", + "note": "## Triage and analysis\n\n### Investigating Suspicious File Creation in /etc for Persistence\n\nThe /etc/ directory in Linux is used to store system-wide configuration files and scripts.\n\nBy creating or modifying specific system-wide configuration files, attackers can leverage system services to execute malicious commands or scripts at predefined intervals, ensuring their continued presence and enabling unauthorized activities.\n\nThis rule monitors for the creation of the most common system-wide configuration files and scripts abused by attackers for persistence. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the file that was created or modified.\n- Investigate whether any other files in any of the commonly abused directories have been altered through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\n path LIKE '/etc/ld.so.conf.d/%' OR\\n path LIKE '/etc/cron.d/%' OR\\n path LIKE '/etc/sudoers.d/%' OR\\n path LIKE '/etc/rc%.d/%' OR\\n path LIKE '/etc/init.d/%' OR\\n path LIKE '/etc/systemd/system/%' OR\\n path LIKE '/usr/lib/systemd/system/%'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\n path LIKE '/etc/ld.so.conf.d/%' OR\\n path LIKE '/etc/cron.d/%' OR\\n path LIKE '/etc/sudoers.d/%' OR\\n path LIKE '/etc/rc%.d/%' OR\\n path LIKE '/etc/init.d/%' OR\\n path LIKE '/etc/systemd/system/%' OR\\n path LIKE '/usr/lib/systemd/system/%'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator that performed these actions for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Cron Job Created or Changed by Previously Unknown Process - ff10d4d8-fea7-422d-afb1-e5a2702369a9\n- Potential Persistence Through Run Control Detected - 0f4d35e4-925e-4959-ab24-911be207ee6f\n- Potential Persistence Through init.d Detected - 474fd20e-14cc-49c5-8160-d9ab4ba16c8b\n- New Systemd Timer Created - 7fb500fa-8e24-4bd1-9480-2a819352602c\n- New Systemd Service Created by Previously Unknown Process - 17b0a495-4d9f-414c-8ad0-92f018b8e001\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the service/timer or restore its original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"linux\" and event.type in (\"creation\", \"file_create_event\") and user.id == \"0\" and\nfile.path : (\"/etc/ld.so.conf.d/*\", \"/etc/cron.d/*\", \"/etc/sudoers.d/*\", \"/etc/rc.d/init.d/*\", \"/etc/systemd/system/*\",\n\"/usr/lib/systemd/system/*\") and not (\n (process.name : (\n \"chef-client\", \"ruby\", \"pacman\", \"packagekitd\", \"python*\", \"platform-python\", \"dpkg\", \"yum\", \"apt\", \"dnf\", \"rpm\",\n \"systemd\", \"snapd\", \"dnf-automatic\", \"yum-cron\", \"elastic-agent\", \"dnfdaemon-system\", \"dockerd\", \"executor\",\n \"rhn_check\"\n )\n ) or \n (file.extension in (\"swp\", \"swpx\", \"tmp\"))\n)\n", + "references": [ + "https://www.intezer.com/blog/incident-response/orbit-new-undetected-linux-threat/", + "https://www.intezer.com/blog/research/lightning-framework-new-linux-threat/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1c84dd64-7e6c-4bad-ac73-a5014ee37042", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Threat: Orbit", + "Threat: Lightning Framework", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/", + "subtechnique": [ + { + "id": "T1037.004", + "name": "RC Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/004/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.006", + "name": "Dynamic Linker Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/006/" + } + ] + }, + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.002", + "name": "Systemd Service", + "reference": "https://attack.mitre.org/techniques/T1543/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.003", + "name": "Sudo and Sudo Caching", + "reference": "https://attack.mitre.org/techniques/T1548/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 113 + }, + "id": "1c84dd64-7e6c-4bad-ac73-a5014ee37042_113", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1cd01db9-be24-4bef-8e7c-e923f0ff78ab_107.json b/packages/security_detection_engine/kibana/security_rule/1cd01db9-be24-4bef-8e7c-e923f0ff78ab_107.json new file mode 100644 index 00000000000..0de47dd8664 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1cd01db9-be24-4bef-8e7c-e923f0ff78ab_107.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote execution via Windows Remote Management (WinRM) remote shell on a target host. This could be an indication of lateral movement.", + "false_positives": [ + "WinRM is a dual-use protocol that can be used for benign or malicious activity. It's important to baseline your environment to determine the amount of noise to expect from this tool." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Incoming Execution via WinRM Remote Shell", + "query": "sequence by host.id with maxspan=30s\n [network where host.os.type == \"windows\" and process.pid == 4 and network.direction : (\"incoming\", \"ingress\") and\n destination.port in (5985, 5986) and network.protocol == \"http\" and source.ip != \"127.0.0.1\" and source.ip != \"::1\"]\n [process where host.os.type == \"windows\" and \n event.type == \"start\" and process.parent.name : \"winrshost.exe\" and not process.executable : \"?:\\\\Windows\\\\System32\\\\conhost.exe\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + } + ], + "risk_score": 47, + "rule_id": "1cd01db9-be24-4bef-8e7c-e923f0ff78ab", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.006", + "name": "Windows Remote Management", + "reference": "https://attack.mitre.org/techniques/T1021/006/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "1cd01db9-be24-4bef-8e7c-e923f0ff78ab_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1d276579-3380-4095-ad38-e596a01bc64f_109.json b/packages/security_detection_engine/kibana/security_rule/1d276579-3380-4095-ad38-e596a01bc64f_109.json new file mode 100644 index 00000000000..be620eb964a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1d276579-3380-4095-ad38-e596a01bc64f_109.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies built-in Windows script interpreters (cscript.exe or wscript.exe) being used to download an executable file from a remote destination.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote File Download via Script Interpreter", + "note": "## Triage and analysis\n\n### Investigating Remote File Download via Script Interpreter\n\nThe Windows Script Host (WSH) is a Windows automation technology, which is ideal for non-interactive scripting needs, such as logon scripting, administrative scripting, and machine automation.\n\nAttackers commonly use WSH scripts as their initial access method, acting like droppers for second stage payloads, but can also use them to download tools and utilities needed to accomplish their goals.\n\nThis rule looks for DLLs and executables downloaded using `cscript.exe` or `wscript.exe`.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze both the script and the executable involved using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- The usage of these script engines by regular users is unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id\n [network where host.os.type == \"windows\" and process.name : (\"wscript.exe\", \"cscript.exe\") and network.protocol != \"dns\" and\n network.direction : (\"outgoing\", \"egress\") and network.type == \"ipv4\" and destination.ip != \"127.0.0.1\"\n ]\n [file where host.os.type == \"windows\" and event.type == \"creation\" and file.extension : (\"exe\", \"dll\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1d276579-3380-4095-ad38-e596a01bc64f", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 109 + }, + "id": "1d276579-3380-4095-ad38-e596a01bc64f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6.json b/packages/security_detection_engine/kibana/security_rule/1d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6.json new file mode 100644 index 00000000000..23414d730df --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of Cmdlets and methods related to encryption/decryption of files in PowerShell scripts, which malware and offensive security tools can abuse to encrypt data or decrypt payloads to bypass security solutions.", + "false_positives": [ + "Legitimate PowerShell Scripts which makes use of encryption." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Encryption/Decryption Capabilities", + "note": "## Triage and analysis\n\n### Investigating PowerShell Script with Encryption/Decryption Capabilities\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks, making it available for use in various environments, creating an attractive way for attackers to execute code.\n\nPowerShell offers encryption and decryption functionalities that attackers can abuse for various purposes, such as concealing payloads, C2 communications, and encrypting data as part of ransomware operations.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n\n### False positive analysis\n\n- This is a dual-use mechanism, meaning its usage is not inherently malicious. Analysts can dismiss the alert if the script doesn't contain malicious functions or potential for abuse, no other suspicious activity was identified, and there are justifications for the execution.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (\n \"Cryptography.AESManaged\" or\n \"Cryptography.RijndaelManaged\" or\n \"Cryptography.SHA1Managed\" or\n \"Cryptography.SHA256Managed\" or\n \"Cryptography.SHA384Managed\" or\n \"Cryptography.SHA512Managed\" or\n \"Cryptography.SymmetricAlgorithm\" or\n \"PasswordDeriveBytes\" or\n \"Rfc2898DeriveBytes\"\n ) and\n (\n CipherMode and PaddingMode\n ) and\n (\n \".CreateEncryptor\" or\n \".CreateDecryptor\"\n )\n ) and not user.id : \"S-1-5-18\"\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1d9aeb0b-9549-46f6-a32d-05e2a001b7fd", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: PowerShell Logs", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/" + }, + { + "id": "T1140", + "name": "Deobfuscate/Decode Files or Information", + "reference": "https://attack.mitre.org/techniques/T1140/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 6 + }, + "id": "1d9aeb0b-9549-46f6-a32d-05e2a001b7fd_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1dcc51f6-ba26-49e7-9ef4-2655abb2361e_108.json b/packages/security_detection_engine/kibana/security_rule/1dcc51f6-ba26-49e7-9ef4-2655abb2361e_108.json new file mode 100644 index 00000000000..48ee73793f0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1dcc51f6-ba26-49e7-9ef4-2655abb2361e_108.json @@ -0,0 +1,143 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies User Account Control (UAC) bypass via hijacking DiskCleanup Scheduled Task. Attackers bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass via DiskCleanup Scheduled Task Hijack", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.args : \"/autoclean\" and process.args : \"/d\" and process.executable != null and \n not process.executable : (\"C:\\\\Windows\\\\System32\\\\cleanmgr.exe\",\n \"C:\\\\Windows\\\\SysWOW64\\\\cleanmgr.exe\",\n \"C:\\\\Windows\\\\System32\\\\taskhostw.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1dcc51f6-ba26-49e7-9ef4-2655abb2361e", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "1dcc51f6-ba26-49e7-9ef4-2655abb2361e_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1defdd62-cd8d-426e-a246-81a37751bb2b_107.json b/packages/security_detection_engine/kibana/security_rule/1defdd62-cd8d-426e-a246-81a37751bb2b_107.json new file mode 100644 index 00000000000..522e046ec17 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1defdd62-cd8d-426e-a246-81a37751bb2b_107.json @@ -0,0 +1,128 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious file that was written by a PDF reader application and subsequently executed. These processes are often launched via exploitation of PDF applications.", + "from": "now-120m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Execution of File Written or Modified by PDF Reader", + "note": "## Triage and analysis\n\n### Investigating Execution of File Written or Modified by PDF Reader\n\nPDF is a common file type used in corporate environments and most machines have software to handle these files. This creates a vector where attackers can exploit the engines and technology behind this class of software for initial access or privilege escalation.\n\nThis rule searches for executable files written by PDF reader software and executed in sequence. This is most likely the result of exploitation for privilege escalation or initial access. This rule can also detect suspicious processes masquerading as PDF readers.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve the PDF documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence with maxspan=2h\n [file where host.os.type == \"windows\" and event.type != \"deletion\" and file.extension : \"exe\" and\n (process.name : \"AcroRd32.exe\" or\n process.name : \"rdrcef.exe\" or\n process.name : \"FoxitPhantomPDF.exe\" or\n process.name : \"FoxitReader.exe\") and\n not (file.name : \"FoxitPhantomPDF.exe\" or\n file.name : \"FoxitPhantomPDFUpdater.exe\" or\n file.name : \"FoxitReader.exe\" or\n file.name : \"FoxitReaderUpdater.exe\" or\n file.name : \"AcroRd32.exe\" or\n file.name : \"rdrcef.exe\")\n ] by host.id, file.path\n [process where host.os.type == \"windows\" and event.type == \"start\"] by host.id, process.executable\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "1defdd62-cd8d-426e-a246-81a37751bb2b", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + }, + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "1defdd62-cd8d-426e-a246-81a37751bb2b_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1df1152b-610a-4f48-9d7a-504f6ee5d9da_3.json b/packages/security_detection_engine/kibana/security_rule/1df1152b-610a-4f48-9d7a-504f6ee5d9da_3.json new file mode 100644 index 00000000000..0d12f6190c1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1df1152b-610a-4f48-9d7a-504f6ee5d9da_3.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of different processes that might be used by attackers for malicious intent. An alert from this rule should be investigated further, as hack tools are commonly used by blue teamers and system administrators as well.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Hack Tool Launched", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\n // exploitation frameworks\n \"crackmapexec\", \"msfconsole\", \"msfvenom\", \"sliver-client\", \"sliver-server\", \"havoc\",\n // network scanners (nmap left out to reduce noise)\n \"zenmap\", \"nuclei\", \"netdiscover\", \"legion\",\n // web enumeration\n \"gobuster\", \"dirbuster\", \"dirb\", \"wfuzz\", \"ffuf\", \"whatweb\", \"eyewitness\",\n // web vulnerability scanning\n \"wpscan\", \"joomscan\", \"droopescan\", \"nikto\", \n // exploitation tools\n \"sqlmap\", \"commix\", \"yersinia\",\n // cracking and brute forcing\n \"john\", \"hashcat\", \"hydra\", \"ncrack\", \"cewl\", \"fcrackzip\", \"rainbowcrack\",\n // host and network\n \"linenum.sh\", \"linpeas.sh\", \"pspy32\", \"pspy32s\", \"pspy64\", \"pspy64s\", \"binwalk\", \"evil-winrm\"\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1df1152b-610a-4f48-9d7a-504f6ee5d9da", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "1df1152b-610a-4f48-9d7a-504f6ee5d9da_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6.json b/packages/security_detection_engine/kibana/security_rule/1e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6.json new file mode 100644 index 00000000000..9c356f3f5e3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6.json @@ -0,0 +1,193 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to discovery activities. Attackers can use these to perform various situational awareness related activities, like enumerating users, shares, sessions, domain trusts, groups, etc.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Discovery Capabilities", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (\n \"Get-ADDefaultDomainPasswordPolicy\" or\n \"Get-ADDomain\" or \"Get-ComputerInfo\" or\n \"Get-Disk\" or \"Get-DnsClientCache\" or\n \"Get-GPOReport\" or \"Get-HotFix\" or\n \"Get-LocalUser\" or \"Get-NetFirewallProfile\" or\n \"get-nettcpconnection\" or \"Get-NetAdapter\" or\n \"Get-PhysicalDisk\" or \"Get-Process\" or\n \"Get-PSDrive\" or \"Get-Service\" or\n \"Get-SmbShare\" or \"Get-WinEvent\"\n ) or\n (\n (\"Get-WmiObject\" or \"gwmi\" or \"Get-CimInstance\" or\n \"gcim\" or \"Management.ManagementObjectSearcher\" or\n \"System.Management.ManagementClass\" or\n \"[WmiClass]\" or \"[WMI]\") and\n (\n \"AntiVirusProduct\" or \"CIM_BIOSElement\" or \"CIM_ComputerSystem\" or \"CIM_Product\" or \"CIM_DiskDrive\" or\n \"CIM_LogicalDisk\" or \"CIM_NetworkAdapter\" or \"CIM_StorageVolume\" or \"CIM_OperatingSystem\" or\n \"CIM_Process\" or \"CIM_Service\" or \"MSFT_DNSClientCache\" or \"Win32_BIOS\" or \"Win32_ComputerSystem\" or\n \"Win32_ComputerSystemProduct\" or \"Win32_DiskDrive\" or \"win32_environment\" or \"Win32_Group\" or\n \"Win32_groupuser\" or \"Win32_IP4RouteTable\" or \"Win32_logicaldisk\" or \"Win32_MappedLogicalDisk\" or\n \"Win32_NetworkAdapterConfiguration\" or \"win32_ntdomain\" or \"Win32_OperatingSystem\" or\n \"Win32_PnPEntity\" or \"Win32_Process\" or \"Win32_Product\" or \"Win32_quickfixengineering\" or\n \"win32_service\" or \"Win32_Share\" or \"Win32_UserAccount\"\n )\n ) or\n (\n (\"ADSI\" and \"WinNT\") or\n (\"Get-ChildItem\" and \"sysmondrv.sys\") or\n (\"::GetIPGlobalProperties()\" and \"GetActiveTcpConnections()\") or\n (\"ServiceProcess.ServiceController\" and \"::GetServices\") or\n (\"Diagnostics.Process\" and \"::GetProcesses\") or\n (\"DirectoryServices.Protocols.GroupPolicy\" and \".GetGPOReport()\") or\n (\"DirectoryServices.AccountManagement\" and \"PrincipalSearcher\") or\n (\"NetFwTypeLib.NetFwMgr\" and \"CurrentProfile\") or\n (\"NetworkInformation.NetworkInterface\" and \"GetAllNetworkInterfaces\") or\n (\"Automation.PSDriveInfo\") or\n (\"Microsoft.Win32.RegistryHive\")\n ) or\n (\n \"Get-ItemProperty\" and\n (\n \"\\Control\\SecurityProviders\\WDigest\" or\n \"\\microsoft\\windows\\currentversion\\explorer\\runmru\" or\n \"\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\Kerberos\\Parameters\" or\n \"\\Microsoft\\Windows\\CurrentVersion\\Uninstall\" or\n \"\\Microsoft\\Windows\\WindowsUpdate\" or\n \"Policies\\Microsoft\\Windows\\Installer\" or\n \"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\" or\n (\"\\Services\\SharedAccess\\Parameters\\FirewallPolicy\" and \"EnableFirewall\") or\n (\"Microsoft\\Windows\\CurrentVersion\\Internet Settings\" and \"proxyEnable\")\n )\n ) or\n (\n (\"Directoryservices.Activedirectory\" or\n \"DirectoryServices.AccountManagement\") and \n (\n \"Domain Admins\" or \"DomainControllers\" or\n \"FindAllGlobalCatalogs\" or \"GetAllTrustRelationships\" or\n \"GetCurrentDomain\" or \"GetCurrentForest\"\n ) or\n \"DirectoryServices.DirectorySearcher\" and\n (\n \"samAccountType=805306368\" or\n \"samAccountType=805306369\" or\n \"objectCategory=group\" or\n \"objectCategory=groupPolicyContainer\" or\n \"objectCategory=site\" or\n \"objectCategory=subnet\" or\n \"objectClass=trustedDomain\"\n )\n ) or\n (\n \"Get-Process\" and\n (\n \"mcshield\" or \"windefend\" or \"savservice\" or\n \"TMCCSF\" or \"symantec antivirus\" or\n \"CSFalcon\" or \"TmPfw\" or \"kvoop\"\n )\n )\n ) and\n not powershell.file.script_block_text : (\n (\n \"__cmdletization_BindCommonParameters\" and\n \"Microsoft.PowerShell.Core\\Export-ModuleMember\" and\n \"Microsoft.PowerShell.Cmdletization.Cim.CimCmdletAdapter\"\n ) or\n \"CmdletsToExport=@(\\\"Add-Content\\\",\"\n ) and\n not user.id : (\"S-1-5-18\" or \"S-1-5-19\" or \"S-1-5-20\") and\n not file.path : (\n ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\Modules\\\\\\\\*.psd1 or\n ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\Modules\\\\\\\\*.psm1 or\n ?\\:\\\\\\\\Program?Files\\\\\\\\Microsoft?Azure?AD?Sync\\\\\\\\Extensions\\\\\\\\AADConnector.psm1* or\n *ServiceNow?MID?Server*agent\\\\\\\\scripts\\\\\\\\PowerShell\\\\\\\\*.psm1 or\n ?\\:\\\\\\\\*\\\\\\\\IMECache\\\\\\\\HealthScripts\\\\\\\\*\\\\\\\\detect.ps1\n ) and\n not (\n file.path : (\n ?\\:\\\\\\\\*\\\\\\\\TEMP\\\\\\\\SDIAG* or\n ?\\:\\\\\\\\TEMP\\\\\\\\SDIAG* or\n ?\\:\\\\\\\\Temp\\\\\\\\SDIAG* or\n ?\\:\\\\\\\\temp\\\\\\\\SDIAG* or\n ?\\:\\\\\\\\Users\\\\\\\\*\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\SDIAG* or\n ?\\:\\\\\\\\Users\\\\\\\\*\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\*\\\\\\\\SDIAG*\n ) and file.name : \"CL_Utility.ps1\"\n )\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "1e0a3f7c-21e7-4bb1-98c7-2036612fb1be", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Tactic: Discovery", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + }, + { + "id": "T1087.002", + "name": "Domain Account", + "reference": "https://attack.mitre.org/techniques/T1087/002/" + } + ] + }, + { + "id": "T1482", + "name": "Domain Trust Discovery", + "reference": "https://attack.mitre.org/techniques/T1482/" + }, + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + }, + { + "id": "T1083", + "name": "File and Directory Discovery", + "reference": "https://attack.mitre.org/techniques/T1083/" + }, + { + "id": "T1615", + "name": "Group Policy Discovery", + "reference": "https://attack.mitre.org/techniques/T1615/" + }, + { + "id": "T1135", + "name": "Network Share Discovery", + "reference": "https://attack.mitre.org/techniques/T1135/" + }, + { + "id": "T1201", + "name": "Password Policy Discovery", + "reference": "https://attack.mitre.org/techniques/T1201/" + }, + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + }, + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/", + "subtechnique": [ + { + "id": "T1518.001", + "name": "Security Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/001/" + } + ] + }, + { + "id": "T1012", + "name": "Query Registry", + "reference": "https://attack.mitre.org/techniques/T1012/" + }, + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + }, + { + "id": "T1049", + "name": "System Network Connections Discovery", + "reference": "https://attack.mitre.org/techniques/T1049/" + }, + { + "id": "T1007", + "name": "System Service Discovery", + "reference": "https://attack.mitre.org/techniques/T1007/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 6 + }, + "id": "1e0a3f7c-21e7-4bb1-98c7-2036612fb1be_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1f0a69c0-3392-4adf-b7d5-6012fd292da8_8.json b/packages/security_detection_engine/kibana/security_rule/1f0a69c0-3392-4adf-b7d5-6012fd292da8_8.json new file mode 100644 index 00000000000..fab92b4647a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1f0a69c0-3392-4adf-b7d5-6012fd292da8_8.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of PowerShell script with keywords related to different Antimalware Scan Interface (AMSI) bypasses. An adversary may attempt first to disable AMSI before executing further malicious powershell scripts to evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Antimalware Scan Interface Bypass via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Potential Antimalware Scan Interface Bypass via PowerShell\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nThe Windows Antimalware Scan Interface (AMSI) is a versatile interface standard that allows your applications and services to integrate with any antimalware product on a machine. AMSI integrates with multiple Windows components, ranging from User Account Control (UAC) to VBA macros and PowerShell.\n\nThis rule identifies scripts that contain methods and classes that can be abused to bypass AMSI.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Determine whether the script was executed and capture relevant information, such as arguments that reveal intent or are indicators of compromise (IoCs).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate commands and scripts executed after this activity was observed.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe:\n - Observe and collect information about the following activities in the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:\"process\" and host.os.type:windows and\n (\n powershell.file.script_block_text : (\n \"System.Management.Automation.AmsiUtils\" or\n\t\t\tamsiInitFailed or \n\t\t\t\"Invoke-AmsiBypass\" or \n\t\t\t\"Bypass.AMSI\" or \n\t\t\t\"amsi.dll\" or \n\t\t\tAntimalwareProvider or \n\t\t\tamsiSession or \n\t\t\tamsiContext or\n\t\t\tAmsiInitialize or \n\t\t\tunloadobfuscated or \n\t\t\tunloadsilent or \n\t\t\tAmsiX64 or \n\t\t\tAmsiX32 or \n\t\t\tFindAmsiFun\n ) or\n powershell.file.script_block_text:(\"[System.Runtime.InteropServices.Marshal]::Copy\" and \"VirtualProtect\") or\n powershell.file.script_block_text:(\"[Ref].Assembly.GetType(('System.Management.Automation\" and \".SetValue(\")\n ) and\n not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\"\n )\n", + "references": [ + "https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "1f0a69c0-3392-4adf-b7d5-6012fd292da8", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: PowerShell Logs", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 8 + }, + "id": "1f0a69c0-3392-4adf-b7d5-6012fd292da8_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/1fe3b299-fbb5-4657-a937-1d746f2c711a_110.json b/packages/security_detection_engine/kibana/security_rule/1fe3b299-fbb5-4657-a937-1d746f2c711a_110.json new file mode 100644 index 00000000000..63b9df99a1a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/1fe3b299-fbb5-4657-a937-1d746f2c711a_110.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies network activity from unexpected system applications. This may indicate adversarial activity as these applications are often leveraged by adversaries to execute code and evade detection.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Network Activity from a Windows System Binary", + "note": "## Triage and analysis\n\n### Investigating Unusual Network Activity from a Windows System Binary\n\nAttackers can abuse certain trusted developer utilities to proxy the execution of malicious payloads. Since these utilities are usually signed, they can bypass the security controls that were put in place to prevent or detect direct execution.\n\nThis rule identifies network connections established by trusted developer utilities, which can indicate abuse to execute payloads or process masquerading.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate abnormal behaviors observed by the subject process, such as registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- As trusted developer utilities have dual-use purposes, alerts derived from this rule are not essentially malicious. If these utilities are contacting internal or known trusted domains, review their security and consider creating exceptions if the domain is safe.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id with maxspan=5m\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n\n /* known applocker bypasses */\n (process.name : \"bginfo.exe\" or\n process.name : \"cdb.exe\" or\n process.name : \"control.exe\" or\n process.name : \"cmstp.exe\" or\n process.name : \"csi.exe\" or\n process.name : \"dnx.exe\" or\n process.name : \"fsi.exe\" or\n process.name : \"ieexec.exe\" or\n process.name : \"iexpress.exe\" or\n process.name : \"installutil.exe\" or\n process.name : \"Microsoft.Workflow.Compiler.exe\" or\n process.name : \"MSBuild.exe\" or\n process.name : \"msdt.exe\" or\n process.name : \"mshta.exe\" or\n process.name : \"msiexec.exe\" or\n process.name : \"msxsl.exe\" or\n process.name : \"odbcconf.exe\" or\n process.name : \"rcsi.exe\" or\n process.name : \"regsvr32.exe\" or\n process.name : \"xwizard.exe\")]\n [network where\n (process.name : \"bginfo.exe\" or\n process.name : \"cdb.exe\" or\n process.name : \"control.exe\" or\n process.name : \"cmstp.exe\" or\n process.name : \"csi.exe\" or\n process.name : \"dnx.exe\" or\n process.name : \"fsi.exe\" or\n process.name : \"ieexec.exe\" or\n process.name : \"iexpress.exe\" or\n process.name : \"installutil.exe\" or\n process.name : \"Microsoft.Workflow.Compiler.exe\" or\n (\n process.name : \"msbuild.exe\" and\n destination.ip != \"127.0.0.1\"\n ) or\n process.name : \"msdt.exe\" or\n process.name : \"mshta.exe\" or\n (\n process.name : \"msiexec.exe\" and not\n dns.question.name : (\n \"ocsp.digicert.com\", \"ocsp.verisign.com\", \"ocsp.comodoca.com\", \"ocsp.entrust.net\", \"ocsp.usertrust.com\",\n \"ocsp.godaddy.com\", \"ocsp.camerfirma.com\", \"ocsp.globalsign.com\", \"ocsp.sectigo.com\", \"*.local\"\n ) and\n /* Localhost, DigiCert and Comodo CA IP addresses */\n not cidrmatch(destination.ip, \"127.0.0.1\", \"192.229.211.108/32\", \"192.229.221.95/32\",\n \"152.195.38.76/32\", \"104.18.14.101/32\")\n ) or\n process.name : \"msxsl.exe\" or\n process.name : \"odbcconf.exe\" or\n process.name : \"rcsi.exe\" or\n process.name : \"regsvr32.exe\" or\n process.name : \"xwizard.exe\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "1fe3b299-fbb5-4657-a937-1d746f2c711a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + }, + { + "id": "T1218.005", + "name": "Mshta", + "reference": "https://attack.mitre.org/techniques/T1218/005/" + } + ] + }, + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 110 + }, + "id": "1fe3b299-fbb5-4657-a937-1d746f2c711a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/201200f1-a99b-43fb-88ed-f65a45c4972c_109.json b/packages/security_detection_engine/kibana/security_rule/201200f1-a99b-43fb-88ed-f65a45c4972c_109.json new file mode 100644 index 00000000000..1d0731b15cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/201200f1-a99b-43fb-88ed-f65a45c4972c_109.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies executions of .NET compilers with suspicious parent processes, which can indicate an attacker's attempt to compile code after delivery in order to bypass security mechanisms.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious .NET Code Compilation", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"csc.exe\", \"vbc.exe\") and\n process.parent.name : (\"wscript.exe\", \"mshta.exe\", \"cscript.exe\", \"wmic.exe\", \"svchost.exe\", \"rundll32.exe\", \"cmstp.exe\", \"regsvr32.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "201200f1-a99b-43fb-88ed-f65a45c4972c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/", + "subtechnique": [ + { + "id": "T1027.004", + "name": "Compile After Delivery", + "reference": "https://attack.mitre.org/techniques/T1027/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "201200f1-a99b-43fb-88ed-f65a45c4972c_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/202829f6-0271-4e88-b882-11a655c590d4_2.json b/packages/security_detection_engine/kibana/security_rule/202829f6-0271-4e88-b882-11a655c590d4_2.json new file mode 100644 index 00000000000..8934eb345bf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/202829f6-0271-4e88-b882-11a655c590d4_2.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for kernel processes with associated process executable fields that are not empty. Unix kernel processes such as kthreadd and kworker typically do not have process.executable fields associated to them. Attackers may attempt to hide their malicious programs by masquerading as legitimate kernel processes.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Executable Masquerading as Kernel Process", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name : (\"kworker*\", \"kthread*\") and process.executable != null\n", + "references": [ + "https://sandflysecurity.com/blog/linux-stealth-rootkit-malware-with-edr-evasion-analyzed/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "202829f6-0271-4e88-b882-11a655c590d4", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/" + }, + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.004", + "name": "Masquerade Task or Service", + "reference": "https://attack.mitre.org/techniques/T1036/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "202829f6-0271-4e88-b882-11a655c590d4_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/203ab79b-239b-4aa5-8e54-fc50623ee8e4_109.json b/packages/security_detection_engine/kibana/security_rule/203ab79b-239b-4aa5-8e54-fc50623ee8e4_109.json new file mode 100644 index 00000000000..edd1eab3628 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/203ab79b-239b-4aa5-8e54-fc50623ee8e4_109.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of a local trusted root certificate in Windows. The install of a malicious root certificate would allow an attacker the ability to masquerade malicious files as valid signed components from any entity (for example, Microsoft). It could also allow an attacker to decrypt SSL traffic.", + "false_positives": [ + "Certain applications may install root certificates for the purpose of inspecting SSL traffic." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation or Modification of Root Certificate", + "note": "## Triage and analysis\n\n### Investigating Creation or Modification of Root Certificate\n\nRoot certificates are the primary level of certifications that tell a browser that the communication is trusted and legitimate. This verification is based upon the identification of a certification authority. Windows adds several trusted root certificates so browsers can use them to communicate with websites.\n\n[Check out this post](https://www.thewindowsclub.com/what-are-root-certificates-windows) for more details on root certificates and the involved cryptography.\n\nThis rule identifies the creation or modification of a root certificate by monitoring registry modifications. The installation of a malicious root certificate would allow an attacker the ability to masquerade malicious files as valid signed components from any entity (for example, Microsoft). It could also allow an attacker to decrypt SSL traffic.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate abnormal behaviors observed by the subject process such as network connections, other registry or file modifications, and any spawned child processes.\n- If one of the processes is suspicious, retrieve it and determine if it is malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This detection may be triggered by certain applications that install root certificates for the purpose of inspecting SSL traffic. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove the malicious certificate from the root certificate store.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n registry.path :\n (\n \"HKLM\\\\Software\\\\Microsoft\\\\SystemCertificates\\\\Root\\\\Certificates\\\\*\\\\Blob\",\n \"HKLM\\\\Software\\\\Microsoft\\\\SystemCertificates\\\\AuthRoot\\\\Certificates\\\\*\\\\Blob\",\n \"HKLM\\\\Software\\\\Policies\\\\Microsoft\\\\SystemCertificates\\\\Root\\\\Certificates\\\\*\\\\Blob\",\n \"HKLM\\\\Software\\\\Policies\\\\Microsoft\\\\SystemCertificates\\\\AuthRoot\\\\Certificates\\\\*\\\\Blob\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\SystemCertificates\\\\Root\\\\Certificates\\\\*\\\\Blob\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\SystemCertificates\\\\AuthRoot\\\\Certificates\\\\*\\\\Blob\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Policies\\\\Microsoft\\\\SystemCertificates\\\\Root\\\\Certificates\\\\*\\\\Blob\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Policies\\\\Microsoft\\\\SystemCertificates\\\\AuthRoot\\\\Certificates\\\\*\\\\Blob\"\n ) and\n not process.executable : (\n \"?:\\\\ProgramData\\\\Lenovo\\\\Vantage\\\\Addins\\\\LenovoHardwareScanAddin\\\\*\\\\LdeApi.Server.exe\",\n \"?:\\\\ProgramData\\\\Logishrd\\\\LogiOptionsPlus\\\\Plugins\\\\64\\\\certmgr.exe\",\n \"?:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Platform\\\\*\\\\MsMpEng.exe\",\n \"?:\\\\ProgramData\\\\Quest\\\\KACE\\\\modules\\\\clientidentifier\\\\clientidentifier.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Windows\\\\CCM\\\\CcmExec.exe\",\n \"?:\\\\Windows\\\\ccmsetup\\\\cache\\\\ccmsetup.exe\",\n \"?:\\\\Windows\\\\Cluster\\\\clussvc.exe\",\n \"?:\\\\Windows\\\\ImmersiveControlPanel\\\\SystemSettings.exe\",\n \"?:\\\\Windows\\\\Lenovo\\\\ImController\\\\PluginHost86\\\\Lenovo.Modern.ImController.PluginHost.Device.exe\",\n \"?:\\\\Windows\\\\Lenovo\\\\ImController\\\\Service\\\\Lenovo.Modern.ImController.exe\",\n \"?:\\\\Windows\\\\Sysmon.exe\",\n \"?:\\\\Windows\\\\Sysmon64.exe\",\n \"?:\\\\Windows\\\\System32\\\\*.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\*.exe\",\n \"?:\\\\Windows\\\\UUS\\\\amd64\\\\MoUsoCoreWorker.exe\",\n \"?:\\\\Windows\\\\WinSxS\\\\*.exe\"\n )\n", + "references": [ + "https://posts.specterops.io/code-signing-certificate-cloning-attacks-and-defenses-6f98657fc6ec", + "https://www.ired.team/offensive-security/persistence/t1130-install-root-certificate" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "203ab79b-239b-4aa5-8e54-fc50623ee8e4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/", + "subtechnique": [ + { + "id": "T1553.004", + "name": "Install Root Certificate", + "reference": "https://attack.mitre.org/techniques/T1553/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "203ab79b-239b-4aa5-8e54-fc50623ee8e4_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/20457e4f-d1de-4b92-ae69-142e27a4342a_107.json b/packages/security_detection_engine/kibana/security_rule/20457e4f-d1de-4b92-ae69-142e27a4342a_107.json new file mode 100644 index 00000000000..980e5d0d6ce --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/20457e4f-d1de-4b92-ae69-142e27a4342a_107.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a process with arguments pointing to known browser files that store passwords and cookies. Adversaries may acquire credentials from web browsers by reading files specific to the target browser.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Access of Stored Browser Credentials", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.args :\n (\n \"/Users/*/Library/Application Support/Google/Chrome/Default/Login Data\",\n \"/Users/*/Library/Application Support/Google/Chrome/Default/Cookies\",\n \"/Users/*/Library/Application Support/Google/Chrome/Profile*/Cookies\",\n \"/Users/*/Library/Cookies*\",\n \"/Users/*/Library/Application Support/Firefox/Profiles/*.default/cookies.sqlite\",\n \"/Users/*/Library/Application Support/Firefox/Profiles/*.default/key*.db\",\n \"/Users/*/Library/Application Support/Firefox/Profiles/*.default/logins.json\",\n \"Login Data\",\n \"Cookies.binarycookies\",\n \"key4.db\",\n \"key3.db\",\n \"logins.json\",\n \"cookies.sqlite\"\n ) and \n not (process.name : \"wordexp-helper\" and process.parent.name : (\"elastic-agent\", \"elastic-endpoint\"))\n", + "references": [ + "https://securelist.com/calisto-trojan-for-macos/86543/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "20457e4f-d1de-4b92-ae69-142e27a4342a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1539", + "name": "Steal Web Session Cookie", + "reference": "https://attack.mitre.org/techniques/T1539/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.003", + "name": "Credentials from Web Browsers", + "reference": "https://attack.mitre.org/techniques/T1555/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "20457e4f-d1de-4b92-ae69-142e27a4342a_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/208dbe77-01ed-4954-8d44-1e5751cb20de_110.json b/packages/security_detection_engine/kibana/security_rule/208dbe77-01ed-4954-8d44-1e5751cb20de_110.json new file mode 100644 index 00000000000..cb68a85a413 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/208dbe77-01ed-4954-8d44-1e5751cb20de_110.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies handle requests for the Local Security Authority Subsystem Service (LSASS) object access with specific access masks that many tools with a capability to dump memory to disk use (0x1fffff, 0x1010, 0x120089). This rule is tool agnostic as it has been validated against a host of various LSASS dump tools such as SharpDump, Procdump, Mimikatz, Comsvcs etc. It detects this behavior at a low level and does not depend on a specific tool or dump file name.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "LSASS Memory Dump Handle Access", + "note": "## Triage and analysis\n\n### Investigating LSASS Memory Dump Handle Access\n\nLocal Security Authority Server Service (LSASS) is a process in Microsoft Windows operating systems that is responsible for enforcing security policy on the system. It verifies users logging on to a Windows computer or server, handles password changes, and creates access tokens.\n\nAdversaries may attempt to access credential material stored in LSASS process memory. After a user logs on, the system generates and stores a variety of credential materials in LSASS process memory. This is meant to facilitate single sign-on (SSO) ensuring a user isn\u2019t prompted each time resource access is requested. These credential materials can be harvested by an adversary using administrative user or SYSTEM privileges to conduct lateral movement using [alternate authentication material](https://attack.mitre.org/techniques/T1550/).\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- There should be very few or no false positives for this rule. If this activity is expected or noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If the process is related to antivirus or endpoint detection and response solutions, validate that it is installed on the correct path and signed with the company's valid digital signature.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Scope compromised credentials and disable the accounts.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where event.action == \"File System\" and event.code == \"4656\" and\n\n winlog.event_data.ObjectName : (\n \"?:\\\\Windows\\\\System32\\\\lsass.exe\",\n \"\\\\Device\\\\HarddiskVolume?\\\\Windows\\\\System32\\\\lsass.exe\",\n \"\\\\Device\\\\HarddiskVolume??\\\\Windows\\\\System32\\\\lsass.exe\") and\n\n /* The right to perform an operation controlled by an extended access right. */\n\n (winlog.event_data.AccessMask : (\"0x1fffff\" , \"0x1010\", \"0x120089\", \"0x1F3FFF\") or\n winlog.event_data.AccessMaskDescription : (\"READ_CONTROL\", \"Read from process memory\"))\n\n /* Common Noisy False Positives */\n\n and not winlog.event_data.ProcessName : (\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\Windows\\\\system32\\\\wbem\\\\WmiPrvSE.exe\",\n \"?:\\\\Windows\\\\System32\\\\dllhost.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"?:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\*.exe\",\n \"?:\\\\Windows\\\\explorer.exe\",\n \"?:\\\\Windows\\\\System32\\\\poqexec.exe\")\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4656", + "https://twitter.com/jsecurity101/status/1227987828534956033?s=20", + "https://attack.mitre.org/techniques/T1003/001/", + "https://threathunterplaybook.com/notebooks/windows/06_credential_access/WIN-170105221010.html", + "http://findingbad.blogspot.com/2017/", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessMask", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessMaskDescription", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ObjectName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ProcessName", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "208dbe77-01ed-4954-8d44-1e5751cb20de", + "setup": "## Setup\n\nEnsure advanced audit policies for Windows are enabled, specifically:\nObject Access policies [Event ID 4656](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4656) (Handle to an Object was Requested)\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nSystem Audit Policies >\nObject Access >\nAudit File System (Success,Failure)\nAudit Handle Manipulation (Success,Failure)\n```\n\nAlso, this event generates only if the object\u2019s [SACL](https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists) has the required access control entry (ACE) to handle the use of specific access rights.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "208dbe77-01ed-4954-8d44-1e5751cb20de_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2138bb70-5a5e-42fd-be5e-b38edf6a6777_2.json b/packages/security_detection_engine/kibana/security_rule/2138bb70-5a5e-42fd-be5e-b38edf6a6777_2.json new file mode 100644 index 00000000000..46f90888b5d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2138bb70-5a5e-42fd-be5e-b38edf6a6777_2.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies suspicious network traffic patterns associated with TCP reverse shell activity. This activity consists of a network event that is followed by the creation of a shell process with suspicious command line arguments. An attacker may establish a Linux TCP reverse shell to gain remote access to a target system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via Child", + "query": "sequence by host.id, process.entity_id with maxspan=5s\n [network where event.type == \"start\" and event.action in (\"connection_attempted\", \"connection_accepted\") and \n process.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"socat\") and destination.ip != null and \n not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")]\n [process where event.type == \"start\" and event.action == \"exec\" and \n process.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and (\n (process.args : (\"-i\", \"-l\")) or (process.parent.name == \"socat\" and process.parent.args : \"*exec*\")\n )]\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2138bb70-5a5e-42fd-be5e-b38edf6a6777", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click Add integrations.\n- In the query bar, search for Elastic Defend and select the integration to see more details about it.\n- Click Add Elastic Defend.\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either Traditional Endpoints or Cloud Workloads.\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in New agent policy name. If other agent policies already exist, you can click the Existing hosts tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click Save and Continue.\n- To complete the integration, select Add Elastic Agent to your hosts and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "2138bb70-5a5e-42fd-be5e-b38edf6a6777_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/220be143-5c67-4fdb-b6ce-dd6826d024fd_6.json b/packages/security_detection_engine/kibana/security_rule/220be143-5c67-4fdb-b6ce-dd6826d024fd_6.json new file mode 100644 index 00000000000..23458d35af5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/220be143-5c67-4fdb-b6ce-dd6826d024fd_6.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the enable of the full user-mode dumps feature system-wide. This feature allows Windows Error Reporting (WER) to collect data after an application crashes. This setting is a requirement for the LSASS Shtinkering attack, which fakes the communication of a crash on LSASS, generating a dump of the process memory, which gives the attacker access to the credentials present on the system without having to bring malware to the system. This setting is not enabled by default, and applications must create their registry subkeys to hold settings that enable them to collect dumps.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Full User-Mode Dumps Enabled System-Wide", + "query": "registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\Windows Error Reporting\\\\LocalDumps\\\\DumpType\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\Windows Error Reporting\\\\LocalDumps\\\\DumpType\"\n ) and\n registry.data.strings : (\"2\", \"0x00000002\") and\n not (process.executable : \"?:\\\\Windows\\\\system32\\\\svchost.exe\" and user.id : (\"S-1-5-18\", \"S-1-5-19\", \"S-1-5-20\"))\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps", + "https://github.com/deepinstinct/Lsass-Shtinkering", + "https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20presentations/Asaf%20Gilboa%20-%20LSASS%20Shtinkering%20Abusing%20Windows%20Error%20Reporting%20to%20Dump%20LSASS.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "220be143-5c67-4fdb-b6ce-dd6826d024fd", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "220be143-5c67-4fdb-b6ce-dd6826d024fd_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205.json b/packages/security_detection_engine/kibana/security_rule/2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205.json new file mode 100644 index 00000000000..def435eae7d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205.json @@ -0,0 +1,125 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "The Secure Shell (SSH) authorized_keys file specifies which users are allowed to log into a server using public key authentication. Adversaries may modify it to maintain persistence on a victim host by adding their own public key(s).", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "SSH Authorized Keys File Modification", + "new_terms_fields": [ + "host.id", + "process.executable" + ], + "query": "event.category:file and event.type:(change or creation) and\n file.name:(\"authorized_keys\" or \"authorized_keys2\" or \"/etc/ssh/sshd_config\" or \"/root/.ssh\") and\n not process.executable:\n (/Library/Developer/CommandLineTools/usr/bin/git or\n /usr/local/Cellar/maven/*/libexec/bin/mvn or\n /Library/Java/JavaVirtualMachines/jdk*.jdk/Contents/Home/bin/java or\n /usr/bin/vim or\n /usr/local/Cellar/coreutils/*/bin/gcat or\n /usr/bin/bsdtar or\n /usr/bin/nautilus or\n /usr/bin/scp or\n /usr/bin/touch or\n /var/lib/docker/* or\n /usr/bin/google_guest_agent or \n /opt/jc/bin/jumpcloud-agent or \n /opt/puppetlabs/puppet/bin/puppet or\n /usr/bin/chef-client\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/", + "subtechnique": [ + { + "id": "T1098.004", + "name": "SSH Authorized Keys", + "reference": "https://attack.mitre.org/techniques/T1098/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1563", + "name": "Remote Service Session Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/", + "subtechnique": [ + { + "id": "T1563.001", + "name": "SSH Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/001/" + } + ] + }, + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.004", + "name": "SSH", + "reference": "https://attack.mitre.org/techniques/T1021/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 205 + }, + "id": "2215b8bd-1759-4ffa-8ab8-55c8e6b32e7f_205", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2339f03c-f53f-40fa-834b-40c5983fc41f_109.json b/packages/security_detection_engine/kibana/security_rule/2339f03c-f53f-40fa-834b-40c5983fc41f_109.json new file mode 100644 index 00000000000..43c34146e5b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2339f03c-f53f-40fa-834b-40c5983fc41f_109.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of the insmod binary to load a Linux kernel object file. Threat actors can use this binary, given they have root privileges, to load a rootkit on a system providing them with complete control and the ability to hide from security products. Manually loading a kernel module in this manner should not be at all common and can indicate suspcious or malicious behavior.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Kernel Module Load via insmod", + "note": "## Triage and analysis\n\n### Investigating Kernel module load via insmod\n\nThe insmod binary is a Linux utility that allows users with root privileges to load kernel modules, which are object files that extend the functionality of the kernel. \n\nThreat actors can abuse this utility to load rootkits, granting them full control over the system and the ability to evade security products.\n\nThe detection rule 'Kernel module load via insmod' is designed to identify instances where the insmod binary is used to load a kernel object file (with a .ko extension) on a Linux system. This activity is uncommon and may indicate suspicious or malicious behavior.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n### Possible investigation steps\n\n- Investigate the kernel object file that was loaded via insmod.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n- Investigate the kernel ring buffer for any warnings or messages, such as tainted or out-of-tree kernel module loads through `dmesg`.\n- Investigate syslog for any unusual segfaults or other messages. Rootkits may be installed on targets with different architecture as expected, and could potentially cause segmentation faults. \n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - $osquery_6\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses cron jobs for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Kernel Driver Load - 3e12a439-d002-4944-bc42-171c0dcb9b96\n- Tainted Out-Of-Tree Kernel Module Load - 51a09737-80f7-4551-a3be-dac8ef5d181a\n- Tainted Kernel Module Load - 05cad2fb-200c-407f-b472-02ea8c9e5e4a\n- Attempt to Clear Kernel Ring Buffer - 2724808c-ba5d-48b2-86d2-0002103df753\n- Enumeration of Kernel Modules via Proc - 80084fa9-8677-4453-8680-b891d3c0c778\n- Suspicious Modprobe File Event - 40ddbcc8-6561-44d9-afc8-eefdbfe0cccd\n- Kernel Module Removal - cd66a5af-e34b-4bb0-8931-57d0a043f2ef\n- Enumeration of Kernel Modules - 2d8043ed-5bda-4caf-801c-c1feb7410504\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and process.name == \"insmod\" and process.args : \"*.ko\"\n", + "references": [ + "https://decoded.avast.io/davidalvarez/linux-threat-hunting-syslogk-a-kernel-rootkit-found-under-development-in-the-wild/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2339f03c-f53f-40fa-834b-40c5983fc41f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Threat: Rootkit", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "2339f03c-f53f-40fa-834b-40c5983fc41f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2377946d-0f01-4957-8812-6878985f515d_2.json b/packages/security_detection_engine/kibana/security_rule/2377946d-0f01-4957-8812-6878985f515d_2.json new file mode 100644 index 00000000000..ff9d9f532f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2377946d-0f01-4957-8812-6878985f515d_2.json @@ -0,0 +1,79 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Discovery of files created by a remote host on sensitive directories and folders. Remote file creation in these directories could indicate a malicious binary or script trying to compromise the system.", + "from": "now-10m", + "index": [ + "logs-endpoint.events.*" + ], + "interval": "5m", + "language": "eql", + "license": "Elastic License v2", + "name": "Deprecated - Remote File Creation on a Sensitive Directory", + "query": "file where event.action in (\"creation\", \"modification\") and\n not user.name:(\"SYSTEM\", \"root\") and\n process.name in (\"System\", \"scp\", \"sshd\", \"smbd\", \"vsftpd\", \"sftp-server\") and\n (\n file.path : (\n \"?:\\\\Users\\\\*\\\\AppData\\\\Roaming*\", \"?:\\\\Program Files*\",\n \"?:\\\\Windows\\\\*\", \"?:\\\\Windows\\\\System\\\\*\",\n \"?:\\\\Windows\\\\System32\\\\*\", \"/etc/*\", \"/tmp*\",\n \"/var/tmp*\", \"/home/*/.*\", \"/home/.*\", \"/usr/bin/*\",\n \"/sbin/*\", \"/bin/*\", \"/usr/lib/*\", \"/usr/sbin/*\",\n \"/usr/share/*\", \"/usr/local/*\", \"/var/lib/dpkg/*\",\n \"/lib/systemd/*\"\n )\n)\n", + "references": [ + "https://www.elastic.co/es/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2377946d-0f01-4957-8812-6878985f515d", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "Use Case: Lateral Movement Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "2377946d-0f01-4957-8812-6878985f515d_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/23bcd283-2bc0-4db2-81d4-273fc051e5c0_1.json b/packages/security_detection_engine/kibana/security_rule/23bcd283-2bc0-4db2-81d4-273fc051e5c0_1.json new file mode 100644 index 00000000000..f6239999769 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/23bcd283-2bc0-4db2-81d4-273fc051e5c0_1.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of a previously unknown unix binary with read, write and execute memory region permissions. The mprotect() system call is used to change the access protections on a region of memory that has already been allocated. This syscall allows a process to modify the permissions of pages in its virtual address space, enabling or disabling permissions such as read, write, and execute for those pages. RWX permissions on memory is in many cases overly permissive, and should be analyzed thoroughly.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Unknown Execution of Binary with RWX Memory Region", + "new_terms_fields": [ + "host.id", + "process.executable" + ], + "query": "event.category:process and host.os.type:linux and auditd.data.syscall:mprotect and auditd.data.a2:7\n", + "references": [ + "https://man7.org/linux/man-pages/man2/mprotect.2.html" + ], + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a2", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "23bcd283-2bc0-4db2-81d4-273fc051e5c0", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n```\n-a always,exit -F arch=b64 -S mprotect\n```\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 1 + }, + "id": "23bcd283-2bc0-4db2-81d4-273fc051e5c0_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/25224a80-5a4a-4b8a-991e-6ab390465c4f_107.json b/packages/security_detection_engine/kibana/security_rule/25224a80-5a4a-4b8a-991e-6ab390465c4f_107.json new file mode 100644 index 00000000000..9793c8defba --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/25224a80-5a4a-4b8a-991e-6ab390465c4f_107.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious file creations in the startup folder of a remote system. An adversary could abuse this to move laterally by dropping a malicious script or executable that will be executed after a reboot or user logon.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Lateral Movement via Startup Folder", + "query": "file where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n\n /* via RDP TSClient mounted share or SMB */\n (process.name : \"mstsc.exe\" or process.pid == 4) and\n\n file.path : (\"?:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\*\",\n \"?:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\*\")\n", + "references": [ + "https://www.mdsec.co.uk/2017/06/rdpinception/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 73, + "rule_id": "25224a80-5a4a-4b8a-991e-6ab390465c4f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.001", + "name": "Remote Desktop Protocol", + "reference": "https://attack.mitre.org/techniques/T1021/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "25224a80-5a4a-4b8a-991e-6ab390465c4f_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4.json b/packages/security_detection_engine/kibana/security_rule/259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4.json new file mode 100644 index 00000000000..fae6bef4841 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of background processes with process arguments capable of opening a socket in the /dev/tcp channel. This may indicate the creation of a backdoor reverse connection, and should be investigated further.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via Background Process", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name in (\"setsid\", \"nohup\") and process.args : \"*/dev/tcp/*0>&1*\" and \nprocess.parent.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "259be2d8-3b1a-4c2c-a0eb-0c8e77f35e39_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_3.json b/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_3.json new file mode 100644 index 00000000000..3bfa83ab8ec --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_3.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for network connections from a kworker process. kworker, or kernel worker, processes are part of the kernel's workqueue mechanism. They are responsible for executing work that has been scheduled to be done in kernel space, which might include tasks like handling interrupts, background activities, and other kernel-related tasks. Attackers may attempt to evade detection by masquerading as a kernel worker process.", + "from": "now-60m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Network Activity Detected via Kworker", + "new_terms_fields": [ + "host.id", + "process.name", + "destination.ip" + ], + "query": "host.os.type:linux and event.category:network and event.action:(connection_attempted or connection_accepted) and \nprocess.name:kworker* and not destination.ip:(\n 10.0.0.0/8 or\n 127.0.0.0/8 or\n 169.254.0.0/16 or\n 172.16.0.0/12 or\n 192.168.0.0/16 or\n 224.0.0.0/4 or\n \"::1\" or\n \"FE80::/10\" or\n \"FF00::/8\"\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "25d917c4-aa3c-4111-974c-286c0312ff95", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + }, + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 3 + }, + "id": "25d917c4-aa3c-4111-974c-286c0312ff95_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2605aa59-29ac-4662-afad-8d86257c7c91_5.json b/packages/security_detection_engine/kibana/security_rule/2605aa59-29ac-4662-afad-8d86257c7c91_5.json new file mode 100644 index 00000000000..d627b0961b9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2605aa59-29ac-4662-afad-8d86257c7c91_5.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the usage of the built-in Linux DebugFS utility to access a disk device without root permissions. Linux users that are part of the \"disk\" group have sufficient privileges to access all data inside of the machine through DebugFS. Attackers may leverage DebugFS in conjunction with \"disk\" permissions to read sensitive files owned by root, such as the shadow file, root ssh private keys or other sensitive files that may allow them to further escalate privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Suspicious DebugFS Root Device Access", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"debugfs\" and process.args : \"/dev/sd*\" and not process.args == \"-R\" and \nnot user.Ext.real.id == \"0\" and not group.Ext.real.id == \"0\"\n", + "references": [ + "https://book.hacktricks.xyz/linux-hardening/privilege-escalation/interesting-groups-linux-pe#disk-group" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "2605aa59-29ac-4662-afad-8d86257c7c91", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "2605aa59-29ac-4662-afad-8d86257c7c91_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/265db8f5-fc73-4d0d-b434-6483b56372e2_110.json b/packages/security_detection_engine/kibana/security_rule/265db8f5-fc73-4d0d-b434-6483b56372e2_110.json new file mode 100644 index 00000000000..c48aef71e9c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/265db8f5-fc73-4d0d-b434-6483b56372e2_110.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential hijacking of the Microsoft Update Orchestrator Service to establish persistence with an integrity level of SYSTEM.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Update Orchestrator Service Hijack", + "note": "## Triage and analysis\n\n### Investigating Persistence via Update Orchestrator Service Hijack\n\nWindows Update Orchestrator Service is a DCOM service used by other components to install Windows updates that are already downloaded. Windows Update Orchestrator Service was vulnerable to elevation of privileges (any user to local system) due to an improper authorization of the callers. The vulnerability affected the Windows 10 and Windows Server Core products. Fixed by Microsoft on Patch Tuesday June 2020.\n\nThis rule will detect uncommon processes spawned by `svchost.exe` with `UsoSvc` as the command line parameters. Attackers can leverage this technique to elevate privileges or maintain persistence.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.executable : \"C:\\\\Windows\\\\System32\\\\svchost.exe\" and\n process.parent.args : \"UsoSvc\" and\n not process.executable :\n (\"?:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\UUS\\\\Packages\\\\*\\\\amd64\\\\MoUsoCoreWorker.exe\",\n \"?:\\\\Windows\\\\System32\\\\UsoClient.exe\",\n \"?:\\\\Windows\\\\System32\\\\MusNotification.exe\",\n \"?:\\\\Windows\\\\System32\\\\MusNotificationUx.exe\",\n \"?:\\\\Windows\\\\System32\\\\MusNotifyIcon.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerFault.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerMgr.exe\",\n \"?:\\\\Windows\\\\UUS\\\\amd64\\\\MoUsoCoreWorker.exe\",\n \"?:\\\\Windows\\\\System32\\\\MoUsoCoreWorker.exe\",\n \"?:\\\\Windows\\\\UUS\\\\amd64\\\\UsoCoreWorker.exe\",\n \"?:\\\\Windows\\\\System32\\\\UsoCoreWorker.exe\",\n \"?:\\\\Program Files\\\\Common Files\\\\microsoft shared\\\\ClickToRun\\\\OfficeC2RClient.exe\") and\n not process.name : (\"MoUsoCoreWorker.exe\", \"OfficeC2RClient.exe\")\n", + "references": [ + "https://github.com/irsl/CVE-2020-1313" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "265db8f5-fc73-4d0d-b434-6483b56372e2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "265db8f5-fc73-4d0d-b434-6483b56372e2_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/26f68dba-ce29-497b-8e13-b4fde1db5a2d_106.json b/packages/security_detection_engine/kibana/security_rule/26f68dba-ce29-497b-8e13-b4fde1db5a2d_106.json new file mode 100644 index 00000000000..befc1c688aa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/26f68dba-ce29-497b-8e13-b4fde1db5a2d_106.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Willem D'Haese", + "Austin Songer" + ], + "description": "Identifies attempts to brute force a Microsoft 365 user account. An adversary may attempt a brute force attack to obtain unauthorized access to user accounts.", + "false_positives": [ + "Automated processes that attempt to authenticate using expired credentials and unbounded retries may lead to false positives." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Attempts to Brute Force a Microsoft 365 User Account", + "note": "", + "query": "event.dataset:o365.audit and event.provider:(AzureActiveDirectory or Exchange) and\n event.category:authentication and event.action:(UserLoginFailed or PasswordLogonInitialAuthUsingPassword) and\n not o365.audit.LogonError:(UserAccountNotFound or EntitlementGrantsNotFound or UserStrongAuthEnrollmentRequired or\n UserStrongAuthClientAuthNRequired or InvalidReplyTo)\n", + "references": [ + "https://blueteamblog.com/7-ways-to-monitor-your-office-365-logs-using-siem" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.LogonError", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "26f68dba-ce29-497b-8e13-b4fde1db5a2d", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "high", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/" + } + ] + } + ], + "threshold": { + "field": [ + "user.id" + ], + "value": 10 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 106 + }, + "id": "26f68dba-ce29-497b-8e13-b4fde1db5a2d_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/27071ea3-e806-4697-8abc-e22c92aa4293_5.json b/packages/security_detection_engine/kibana/security_rule/27071ea3-e806-4697-8abc-e22c92aa4293_5.json new file mode 100644 index 00000000000..a911973541d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/27071ea3-e806-4697-8abc-e22c92aa4293_5.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to archive compression activities. Adversaries will often compress and encrypt data in preparation for exfiltration.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Archive Compression Capabilities", + "query": "event.category:process and host.os.type:windows and\n(\n powershell.file.script_block_text : (\n \"IO.Compression.ZipFile\" or\n \"IO.Compression.ZipArchive\" or\n \"ZipFile.CreateFromDirectory\" or\n \"IO.Compression.BrotliStream\" or\n \"IO.Compression.DeflateStream\" or\n \"IO.Compression.GZipStream\" or\n \"IO.Compression.ZLibStream\"\n ) and \n powershell.file.script_block_text : (\n \"CompressionLevel\" or\n \"CompressionMode\" or\n \"ZipArchiveMode\"\n ) or\n powershell.file.script_block_text : \"Compress-Archive\"\n) and \n not file.path : (\n ?\\:\\\\\\\\ProgramData\\\\\\\\Microsoft\\\\\\\\Windows?Defender?Advanced?Threat?Protection\\\\\\\\Downloads\\\\\\\\* or\n ?\\:\\\\\\\\ProgramData\\\\\\\\Microsoft\\\\\\\\Windows?Defender?Advanced?Threat?Protection\\\\\\\\DataCollection\\\\\\\\* or\n ?\\:\\\\\\\\Program?Files\\\\\\\\Microsoft?Dependency?Agent\\\\\\\\plugins\\\\\\\\* or\n ?\\:\\\\\\\\Program?Files\\\\\\\\Azure\\\\\\\\StorageSyncAgent\\\\\\\\AFSDiag.ps1\n )\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "27071ea3-e806-4697-8abc-e22c92aa4293", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1560", + "name": "Archive Collected Data", + "reference": "https://attack.mitre.org/techniques/T1560/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 5 + }, + "id": "27071ea3-e806-4697-8abc-e22c92aa4293_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2724808c-ba5d-48b2-86d2-0002103df753_4.json b/packages/security_detection_engine/kibana/security_rule/2724808c-ba5d-48b2-86d2-0002103df753_4.json new file mode 100644 index 00000000000..ada9f784fd4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2724808c-ba5d-48b2-86d2-0002103df753_4.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the deletion of the kernel ring buffer events through dmesg. Attackers may clear kernel ring buffer events to evade detection after installing a Linux kernel module (LKM).", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Attempt to Clear Kernel Ring Buffer", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"dmesg\" and process.args == \"-c\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "2724808c-ba5d-48b2-86d2-0002103df753", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + }, + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.002", + "name": "Clear Linux or Mac System Logs", + "reference": "https://attack.mitre.org/techniques/T1070/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "2724808c-ba5d-48b2-86d2-0002103df753_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/272a6484-2663-46db-a532-ef734bf9a796_105.json b/packages/security_detection_engine/kibana/security_rule/272a6484-2663-46db-a532-ef734bf9a796_105.json new file mode 100644 index 00000000000..55eea07216f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/272a6484-2663-46db-a532-ef734bf9a796_105.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a transport rule has been disabled or deleted in Microsoft 365. Mail flow rules (also known as transport rules) are used to identify and take action on messages that flow through your organization. An adversary or insider threat may modify a transport rule to exfiltrate data or evade defenses.", + "false_positives": [ + "A transport rule may be modified by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Transport Rule Modification", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:(\"Remove-TransportRule\" or \"Disable-TransportRule\") and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-transportrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/disable-transportrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/mail-flow-rules" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "272a6484-2663-46db-a532-ef734bf9a796", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1537", + "name": "Transfer Data to Cloud Account", + "reference": "https://attack.mitre.org/techniques/T1537/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "272a6484-2663-46db-a532-ef734bf9a796_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2772264c-6fb9-4d9d-9014-b416eed21254_108.json b/packages/security_detection_engine/kibana/security_rule/2772264c-6fb9-4d9d-9014-b416eed21254_108.json new file mode 100644 index 00000000000..6c37cf7bf23 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2772264c-6fb9-4d9d-9014-b416eed21254_108.json @@ -0,0 +1,143 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote execution via Windows PowerShell remoting. Windows PowerShell remoting allows a user to run any Windows PowerShell command on one or more remote computers. This could be an indication of lateral movement.", + "false_positives": [ + "PowerShell remoting is a dual-use protocol that can be used for benign or malicious activity. It's important to baseline your environment to determine the amount of noise to expect from this tool." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Incoming Execution via PowerShell Remoting", + "query": "sequence by host.id with maxspan = 30s\n [network where host.os.type == \"windows\" and network.direction : (\"incoming\", \"ingress\") and destination.port in (5985, 5986) and\n network.protocol == \"http\" and source.ip != \"127.0.0.1\" and source.ip != \"::1\"]\n [process where host.os.type == \"windows\" and \n event.type == \"start\" and process.parent.name : \"wsmprovhost.exe\" and not process.executable : \"?:\\\\Windows\\\\System32\\\\conhost.exe\"]\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/running-remote-commands?view=powershell-7.1" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + } + ], + "risk_score": 47, + "rule_id": "2772264c-6fb9-4d9d-9014-b416eed21254", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.006", + "name": "Windows Remote Management", + "reference": "https://attack.mitre.org/techniques/T1021/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "2772264c-6fb9-4d9d-9014-b416eed21254_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/27f7c15a-91f8-4c3d-8b9e-1f99cc030a51_105.json b/packages/security_detection_engine/kibana/security_rule/27f7c15a-91f8-4c3d-8b9e-1f99cc030a51_105.json new file mode 100644 index 00000000000..447d22cd968 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/27f7c15a-91f8-4c3d-8b9e-1f99cc030a51_105.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when external access is enabled in Microsoft Teams. External access lets Teams and Skype for Business users communicate with other users that are outside their organization. An adversary may enable external access or add an allowed domain to exfiltrate data or maintain persistence in an environment.", + "false_positives": [ + "Teams external access may be enabled by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Teams External Access Enabled", + "note": "", + "query": "event.dataset:o365.audit and event.provider:(SkypeForBusiness or MicrosoftTeams) and\nevent.category:web and event.action:\"Set-CsTenantFederationConfiguration\" and\no365.audit.Parameters.AllowFederatedUsers:True and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoftteams/manage-external-access" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.AllowFederatedUsers", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "27f7c15a-91f8-4c3d-8b9e-1f99cc030a51", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "27f7c15a-91f8-4c3d-8b9e-1f99cc030a51_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2820c9c2-bcd7-4d6e-9eba-faf3891ba450_111.json b/packages/security_detection_engine/kibana/security_rule/2820c9c2-bcd7-4d6e-9eba-faf3891ba450_111.json new file mode 100644 index 00000000000..001be6c13d1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2820c9c2-bcd7-4d6e-9eba-faf3891ba450_111.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an attempt to reset a potentially privileged account password remotely. Adversaries may manipulate account passwords to maintain access or evade password duration policies and preserve compromised credentials.", + "false_positives": [ + "Legitimate remote account administration." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.security*", + "logs-windows.forwarded*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Account Password Reset Remotely", + "note": "This rule may cause medium to high performance impact due to logic scoping all remote Windows logon activity.", + "query": "sequence by winlog.computer_name with maxspan=1m\n [authentication where event.action == \"logged-in\" and\n /* event 4624 need to be logged */\n winlog.logon.type : \"Network\" and event.outcome == \"success\" and source.ip != null and\n source.ip != \"127.0.0.1\" and source.ip != \"::1\" and\n not winlog.event_data.TargetUserName : (\"svc*\", \"PIM_*\", \"_*_\", \"*-*-*\", \"*$\")] by winlog.event_data.TargetLogonId\n /* event 4724 need to be logged */\n [iam where event.action == \"reset-password\" and\n (\n /*\n This rule is very noisy if not scoped to privileged accounts, duplicate the\n rule and add your own naming convention and accounts of interest here.\n */\n winlog.event_data.TargetUserName: (\"*Admin*\", \"*super*\", \"*SVC*\", \"*DC0*\", \"*service*\", \"*DMZ*\", \"*ADM*\") or\n winlog.event_data.TargetSid : (\"S-1-5-21-*-500\", \"S-1-12-1-*-500\")\n )\n ] by winlog.event_data.SubjectLogonId\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4724", + "https://stealthbits.com/blog/manipulating-user-passwords-with-mimikatz/", + "https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES/blob/master/Credential%20Access/remote_pwd_reset_rpc_mimikatz_postzerologon_target_DC.evtx", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectLogonId", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetLogonId", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetSid", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetUserName", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.logon.type", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "2820c9c2-bcd7-4d6e-9eba-faf3891ba450", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Impact" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1531", + "name": "Account Access Removal", + "reference": "https://attack.mitre.org/techniques/T1531/" + } + ] + } + ], + "type": "eql", + "version": 111 + }, + "id": "2820c9c2-bcd7-4d6e-9eba-faf3891ba450_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2856446a-34e6-435b-9fb5-f8f040bfa7ed_110.json b/packages/security_detection_engine/kibana/security_rule/2856446a-34e6-435b-9fb5-f8f040bfa7ed_110.json new file mode 100644 index 00000000000..3b8b46eaba4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2856446a-34e6-435b-9fb5-f8f040bfa7ed_110.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when the SYSTEM account uses an account discovery utility. This could be a sign of discovery activity after an adversary has achieved privilege escalation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Account Discovery Command via SYSTEM Account", + "note": "## Triage and analysis\n\n### Investigating Account Discovery Command via SYSTEM Account\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of account discovery utilities using the SYSTEM account, which is commonly observed after attackers successfully perform privilege escalation or exploit web applications.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - If the process tree includes a web-application server process such as w3wp, httpd.exe, nginx.exe and alike, investigate any suspicious file creation or modification in the last 48 hours to assess the presence of any potential webshell backdoor.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Determine how the SYSTEM account is being used. For example, users with administrator privileges can spawn a system shell using Windows services, scheduled tasks or other third party utilities.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n- Use the data collected through the analysis to investigate other machines affected in the environment.\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (?process.Ext.token.integrity_level_name : \"System\" or\n ?winlog.event_data.IntegrityLevel : \"System\") and\n (\n process.name : \"whoami.exe\" or\n (\n process.name : \"net1.exe\" and not process.parent.name : \"net.exe\" and not process.args : (\"start\", \"stop\", \"/active:*\")\n )\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.IntegrityLevel", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "2856446a-34e6-435b-9fb5-f8f040bfa7ed", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1033", + "name": "System Owner/User Discovery", + "reference": "https://attack.mitre.org/techniques/T1033/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "2856446a-34e6-435b-9fb5-f8f040bfa7ed_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/28738f9f-7427-4d23-bc69-756708b5f624_8.json b/packages/security_detection_engine/kibana/security_rule/28738f9f-7427-4d23-bc69-756708b5f624_8.json new file mode 100644 index 00000000000..b35dc24e64e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/28738f9f-7427-4d23-bc69-756708b5f624_8.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies a sequence of 100 file extension rename events within a set of common file paths by the same process in a timespan of 1 second. Ransomware is a type of malware that encrypts a victim's files or systems and demands payment (usually in cryptocurrency) in exchange for the decryption key. One important indicator of a ransomware attack is the mass encryption of the file system, after which a new file extension is added to the file.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious File Changes Activity Detected", + "query": "sequence by process.entity_id, host.id with maxspan=1s\n [file where host.os.type == \"linux\" and event.type == \"change\" and event.action == \"rename\" and file.extension : \"?*\" \n and process.executable : (\"./*\", \"/tmp/*\", \"/var/tmp/*\", \"/dev/shm/*\", \"/var/run/*\", \"/boot/*\", \"/srv/*\", \"/run/*\") and\n file.path : (\n \"/home/*/Downloads/*\", \"/home/*/Documents/*\", \"/root/*\", \"/bin/*\", \"/usr/bin/*\", \"/var/log/*\", \"/var/lib/log/*\",\n \"/var/backup/*\", \"/var/www/*\"\n ) and\n not process.name : (\n \"dpkg\", \"yum\", \"dnf\", \"rpm\", \"dockerd\", \"go\", \"java\", \"pip*\", \"python*\", \"node\", \"containerd\", \"php\", \"p4d\",\n \"conda\", \"chrome\", \"imap\", \"cmake\", \"firefox\", \"semanage\", \"semodule\", \"ansible-galaxy\", \"fc-cache\", \"jammy\", \"git\",\n \"systemsettings\", \"vmis-launcher\", \"bundle\", \"kudu-tserver\", \"suldownloader\"\n )\n ] with runs=25\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "28738f9f-7427-4d23-bc69-756708b5f624", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Impact", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1486", + "name": "Data Encrypted for Impact", + "reference": "https://attack.mitre.org/techniques/T1486/" + } + ] + } + ], + "type": "eql", + "version": 8 + }, + "id": "28738f9f-7427-4d23-bc69-756708b5f624_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/28bc620d-b2f7-4132-b372-f77953881d05_2.json b/packages/security_detection_engine/kibana/security_rule/28bc620d-b2f7-4132-b372-f77953881d05_2.json new file mode 100644 index 00000000000..20e07ed65d5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/28bc620d-b2f7-4132-b372-f77953881d05_2.json @@ -0,0 +1,152 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where GDB (granted the CAP_SYS_PTRACE capability) is executed, after which an outbound network connection is initiated by UID/GID 0 (root). In Linux, the CAP_SYS_PTRACE capability grants a process the ability to use the ptrace system call, which is typically used for debugging and allows the process to trace and control other processes. Attackers may leverage this capability to hook and inject into a process that is running with root permissions in order to execute shell code and gain a reverse shell with root privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Root Network Connection via GDB CAP_SYS_PTRACE", + "query": "sequence by host.id, process.entry_leader.entity_id with maxspan=30s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name == \"gdb\" and\n (process.thread.capabilities.effective : \"CAP_SYS_PTRACE\" or process.thread.capabilities.permitted : \"CAP_SYS_PTRACE\") and\n user.id != \"0\"]\n [network where host.os.type == \"linux\" and event.action == \"connection_attempted\" and event.type == \"start\" and\n process.name != null and user.id == \"0\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entry_leader.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "28bc620d-b2f7-4132-b372-f77953881d05", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Execution", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.008", + "name": "Ptrace System Calls", + "reference": "https://attack.mitre.org/techniques/T1055/008/" + } + ] + }, + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "28bc620d-b2f7-4132-b372-f77953881d05_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/28d39238-0c01-420a-b77a-24e5a7378663_5.json b/packages/security_detection_engine/kibana/security_rule/28d39238-0c01-420a-b77a-24e5a7378663_5.json new file mode 100644 index 00000000000..1065e63c1e5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/28d39238-0c01-420a-b77a-24e5a7378663_5.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the usage of the sudo -l command, which is used to list the allowed and forbidden commands for the invoking user. Attackers may execute this command to enumerate commands allowed to be executed with sudo permissions, potentially allowing to escalate privileges to root.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Sudo Command Enumeration Detected", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \nprocess.name == \"sudo\" and process.args == \"-l\" and process.args_count == 2 and\nprocess.parent.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and \nnot group.Ext.real.id : \"0\" and not user.Ext.real.id : \"0\" and not process.args == \"dpkg\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "28d39238-0c01-420a-b77a-24e5a7378663", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1033", + "name": "System Owner/User Discovery", + "reference": "https://attack.mitre.org/techniques/T1033/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "28d39238-0c01-420a-b77a-24e5a7378663_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/290aca65-e94d-403b-ba0f-62f320e63f51_111.json b/packages/security_detection_engine/kibana/security_rule/290aca65-e94d-403b-ba0f-62f320e63f51_111.json new file mode 100644 index 00000000000..ea973f5f6e7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/290aca65-e94d-403b-ba0f-62f320e63f51_111.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an attempt to bypass User Account Control (UAC) by masquerading as a Microsoft trusted Windows directory. Attackers may bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass Attempt via Windows Directory Masquerading", + "note": "## Triage and analysis\n\n### Investigating UAC Bypass Attempt via Windows Directory Masquerading\n\nWindows User Account Control (UAC) allows a program to elevate its privileges (tracked as low to high integrity levels) to perform a task under administrator-level permissions, possibly by prompting the user for confirmation. UAC can deny an operation under high-integrity enforcement, or allow the user to perform the action if they are in the local administrators group and enter an administrator password when prompted.\n\nFor more information about the UAC and how it works, check the [official Microsoft docs page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works).\n\nThis rule identifies an attempt to bypass User Account Control (UAC) by masquerading as a Microsoft trusted Windows directory. Attackers may bypass UAC to stealthily execute code with elevated permissions.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze any suspicious spawned processes using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.args : (\"C:\\\\Windows \\\\system32\\\\*.exe\", \"C:\\\\Windows \\\\SysWOW64\\\\*.exe\")\n", + "references": [ + "https://medium.com/tenable-techblog/uac-bypass-by-mocking-trusted-directories-24a96675f6e" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "290aca65-e94d-403b-ba0f-62f320e63f51", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + }, + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "290aca65-e94d-403b-ba0f-62f320e63f51_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2917d495-59bd-4250-b395-c29409b76086_110.json b/packages/security_detection_engine/kibana/security_rule/2917d495-59bd-4250-b395-c29409b76086_110.json new file mode 100644 index 00000000000..9bcb157abe5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2917d495-59bd-4250-b395-c29409b76086_110.json @@ -0,0 +1,166 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious commands executed via a web server, which may suggest a vulnerability and remote shell access.", + "false_positives": [ + "Security audits, maintenance, and network administrative scripts may trigger this alert when run under web processes." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Web Shell Detection: Script Process Child of Common Web Processes", + "note": "## Triage and analysis\n\n### Investigating Web Shell Detection: Script Process Child of Common Web Processes\n\nAdversaries may backdoor web servers with web shells to establish persistent access to systems. A web shell is a web script that is placed on an openly accessible web server to allow an adversary to use the web server as a gateway into a network. A web shell may provide a set of functions to execute or a command-line interface on the system that hosts the web server.\n\nThis rule detects a web server process spawning script and command-line interface programs, potentially indicating attackers executing commands using the web shell.\n\n#### Possible investigation steps\n\n- Investigate abnormal behaviors observed by the subject process such as network connections, registry or file modifications, and any other spawned child processes.\n- Examine the command line to determine which commands or scripts were executed.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\"w3wp.exe\", \"httpd.exe\", \"nginx.exe\", \"php.exe\", \"php-cgi.exe\", \"tomcat.exe\") and\n process.name : (\"cmd.exe\", \"cscript.exe\", \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\", \"wmic.exe\", \"wscript.exe\") and\n not \n (\n process.parent.name : (\"php.exe\", \"httpd.exe\") and process.name : \"cmd.exe\" and\n process.command_line : (\n \"cmd.exe /c mode CON\",\n \"cmd.exe /s /c \\\"mode CON\\\"\",\n \"cmd.exe /c \\\"mode\\\"\",\n \"cmd.exe /s /c \\\"tput colors 2>&1\\\"\"\n )\n )\n", + "references": [ + "https://www.microsoft.com/security/blog/2020/02/04/ghost-in-the-shell-investigating-web-shell-attacks/", + "https://www.elastic.co/security-labs/elastic-response-to-the-the-spring4shell-vulnerability-cve-2022-22965", + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-1" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "2917d495-59bd-4250-b395-c29409b76086", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Initial Access", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1505", + "name": "Server Software Component", + "reference": "https://attack.mitre.org/techniques/T1505/", + "subtechnique": [ + { + "id": "T1505.003", + "name": "Web Shell", + "reference": "https://attack.mitre.org/techniques/T1505/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + }, + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + }, + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "2917d495-59bd-4250-b395-c29409b76086_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/291a0de9-937a-4189-94c0-3e847c8b13e4_211.json b/packages/security_detection_engine/kibana/security_rule/291a0de9-937a-4189-94c0-3e847c8b13e4_211.json new file mode 100644 index 00000000000..2069abaf9ca --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/291a0de9-937a-4189-94c0-3e847c8b13e4_211.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances of an unusual process enumerating built-in Windows privileged local groups membership like Administrators or Remote Desktop users.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Enumeration of Privileged Local Groups Membership", + "new_terms_fields": [ + "host.id", + "winlog.event_data.SubjectUserName", + "winlog.event_data.CallerProcessName" + ], + "note": "## Triage and analysis\n\n### Investigating Enumeration of Privileged Local Groups Membership\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the enumeration of privileged local groups' membership by suspicious processes, and excludes known legitimate utilities and programs installed. Attackers can use this information to decide the next steps of the attack, such as mapping targets for credential compromise and other post-exploitation activities.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Identify the process, host and user involved on the event.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n- If this rule is noisy in your environment due to expected activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:windows and event.category:iam and event.action:user-member-enumerated and \n (\n group.name:(*Admin* or \"RemoteDesktopUsers\") or\n winlog.event_data.TargetSid:(\"S-1-5-32-544\" or \"S-1-5-32-555\")\n ) and \n not (\n winlog.event_data.SubjectUserName: *$ or\n winlog.event_data.SubjectUserSid: (\"S-1-5-19\" or \"S-1-5-20\") or \n winlog.event_data.CallerProcessName:(\"-\" or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\VSSVC.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\SearchIndexer.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\CompatTelRunner.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\oobe\\\\\\\\msoobe.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\net1.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\svchost.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\Netplwiz.exe or \n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\msiexec.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\CloudExperienceHostBroker.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\RuntimeBroker.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\wbem\\\\\\\\WmiPrvSE.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\SrTasks.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\diskshadow.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\dfsrs.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\vssadmin.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\dllhost.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\mmc.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\SettingSyncHost.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\inetsrv\\\\\\\\w3wp.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\wsmprovhost.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\spool\\\\\\\\drivers\\\\\\\\x64\\\\\\\\3\\\\\\\\x3jobt3?.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\mstsc.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\esentutl.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\RecoveryDrive.exe or\n *\\:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\SystemPropertiesComputerName.exe or\n *\\:\\\\\\\\Windows\\\\\\\\SysWOW64\\\\\\\\msiexec.exe or\n *\\:\\\\\\\\Windows\\\\\\\\ImmersiveControlPanel\\\\\\\\SystemSettings.exe or\n *\\:\\\\\\\\Windows\\\\\\\\Temp\\\\\\\\rubrik_vmware???\\\\\\\\snaptool.exe or\n *\\:\\\\\\\\Windows\\\\\\\\VeeamVssSupport\\\\\\\\VeeamGuestHelper.exe or\n ?\\:\\\\\\\\WindowsAzure\\\\\\\\*WaAppAgent.exe or\n ?\\:\\\\\\\\Program?Files?\\(x86\\)\\\\\\\\*.exe or\n ?\\:\\\\\\\\Program?Files\\\\\\\\*.exe or\n ?\\:\\\\\\\\$WINDOWS.~BT\\\\\\\\Sources\\\\\\\\*.exe\n )\n )\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "group.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallerProcessName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserName", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserSid", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetSid", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "291a0de9-937a-4189-94c0-3e847c8b13e4", + "setup": "## Setup\n\nThe 'Audit Security Group Management' audit policy must be configured (Success).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nAccount Management >\nAudit Security Group Management (Success)\n```\n\nMicrosoft introduced the [event used](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4799) in this detection rule on Windows 10 and Windows Server 2016 or later operating systems.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.001", + "name": "Local Groups", + "reference": "https://attack.mitre.org/techniques/T1069/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 211 + }, + "id": "291a0de9-937a-4189-94c0-3e847c8b13e4_211", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/29f0cf93-d17c-4b12-b4f3-a433800539fa_3.json b/packages/security_detection_engine/kibana/security_rule/29f0cf93-d17c-4b12-b4f3-a433800539fa_3.json new file mode 100644 index 00000000000..3852d8403ae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/29f0cf93-d17c-4b12-b4f3-a433800539fa_3.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "This rule monitors for X11 forwarding via SSH. X11 forwarding is a feature that allows users to run graphical applications on a remote server and display the application's graphical user interface on their local machine. Attackers can abuse X11 forwarding for tunneling their GUI-based tools, pivot through compromised systems, and create covert communication channels, enabling lateral movement and facilitating remote control of systems within a network.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux SSH X11 Forwarding", + "note": "## Triage and analysis\n\n### Investigating Potential Linux SSH X11 Forwarding\n\nAttackers can leverage SSH X11 forwarding to capture a user's graphical desktop session and potentially execute unauthorized GUI applications remotely.\n\nThis rule looks for the execution of SSH in conjunction with command line arguments that are capable of setting up X11 forwarding. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate network forwarding activity. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling/forwarding for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name in (\"ssh\", \"sshd\") and process.args in (\"-X\", \"-Y\") and process.args_count >= 3 and \nprocess.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n", + "references": [ + "https://book.hacktricks.xyz/generic-methodologies-and-resources/tunneling-and-port-forwarding" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "29f0cf93-d17c-4b12-b4f3-a433800539fa", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "29f0cf93-d17c-4b12-b4f3-a433800539fa_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2a692072-d78d-42f3-a48a-775677d79c4e_6.json b/packages/security_detection_engine/kibana/security_rule/2a692072-d78d-42f3-a48a-775677d79c4e_6.json new file mode 100644 index 00000000000..2bc8ce6ac3e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2a692072-d78d-42f3-a48a-775677d79c4e_6.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for suspicious activities that may indicate an attacker attempting to execute arbitrary code within a PostgreSQL environment. Attackers can execute code via PostgreSQL as a result of gaining unauthorized access to a public facing PostgreSQL database or exploiting vulnerabilities, such as remote command execution and SQL injection attacks, which can result in unauthorized access and malicious actions, and facilitate post-exploitation activities for unauthorized access and malicious actions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Code Execution via Postgresql", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"fork\", \"fork_event\") and \nuser.name == \"postgres\" and (\n (process.parent.args : \"*sh\" and process.parent.args : \"echo*\") or \n (process.args : \"*sh\" and process.args : \"echo*\")\n) and not process.parent.name : \"puppet\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2a692072-d78d-42f3-a48a-775677d79c4e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "2a692072-d78d-42f3-a48a-775677d79c4e_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6.json b/packages/security_detection_engine/kibana/security_rule/2b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6.json new file mode 100644 index 00000000000..412e5cf62f4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where a process named 'grep', 'egrep', or 'pgrep' is started on a Linux system with arguments related to virtual machine (VM) files, such as \"vmdk\", \"vmx\", \"vmxf\", \"vmsd\", \"vmsn\", \"vswp\", \"vmss\", \"nvram\", or \"vmem\". These file extensions are associated with VM-related file formats, and their presence in grep command arguments may indicate that a threat actor is attempting to search for, analyze, or manipulate VM files on the system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "ESXI Discovery via Grep", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\"grep\", \"egrep\", \"pgrep\") and process.args in (\n \"vmdk\", \"vmx\", \"vmxf\", \"vmsd\", \"vmsn\", \"vswp\", \"vmss\", \"nvram\", \"vmem\"\n)\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2b662e21-dc6e-461e-b5cf-a6eb9b235ec4", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "2b662e21-dc6e-461e-b5cf-a6eb9b235ec4_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2bf78aa2-9c56-48de-b139-f169bf99cf86_110.json b/packages/security_detection_engine/kibana/security_rule/2bf78aa2-9c56-48de-b139-f169bf99cf86_110.json new file mode 100644 index 00000000000..50c8dc4064b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2bf78aa2-9c56-48de-b139-f169bf99cf86_110.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects writing executable files that will be automatically launched by Adobe on launch.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Adobe Hijack Persistence", + "note": "## Triage and analysis\n\n### Investigating Adobe Hijack Persistence\n\nAttackers can replace the `RdrCEF.exe` executable with their own to maintain their access, which will be launched whenever Adobe Acrobat Reader is executed.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and\n file.path : (\"?:\\\\Program Files (x86)\\\\Adobe\\\\Acrobat Reader DC\\\\Reader\\\\AcroCEF\\\\RdrCEF.exe\",\n \"?:\\\\Program Files\\\\Adobe\\\\Acrobat Reader DC\\\\Reader\\\\AcroCEF\\\\RdrCEF.exe\") and\n not process.name : \"msiexec.exe\"\n", + "references": [ + "https://twitter.com/pabraeken/status/997997818362155008" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "2bf78aa2-9c56-48de-b139-f169bf99cf86", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.010", + "name": "Services File Permissions Weakness", + "reference": "https://attack.mitre.org/techniques/T1574/010/" + } + ] + }, + { + "id": "T1554", + "name": "Compromise Client Software Binary", + "reference": "https://attack.mitre.org/techniques/T1554/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "2bf78aa2-9c56-48de-b139-f169bf99cf86_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2c17e5d7-08b9-43b2-b58a-0270d65ac85b_109.json b/packages/security_detection_engine/kibana/security_rule/2c17e5d7-08b9-43b2-b58a-0270d65ac85b_109.json new file mode 100644 index 00000000000..9c4cab2e24a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2c17e5d7-08b9-43b2-b58a-0270d65ac85b_109.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to the Windows Defender configuration settings using PowerShell to add exclusions at the folder directory or process level.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Defender Exclusions Added via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Windows Defender Exclusions Added via PowerShell\n\nMicrosoft Windows Defender is an antivirus product built into Microsoft Windows. Since this software product is used to prevent and stop malware, it's important to monitor what specific exclusions are made to the product's configuration settings. These can often be signs of an adversary or malware trying to bypass Windows Defender's capabilities. One of the more notable [examples](https://www.cyberbit.com/blog/endpoint-security/latest-trickbot-variant-has-new-tricks-up-its-sleeve/) was observed in 2018 where Trickbot incorporated mechanisms to disable Windows Defender to avoid detection.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Examine the exclusion in order to determine the intent behind it.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- If the exclusion specifies a suspicious file or path, retrieve the file(s) and determine if malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This rule has a high chance to produce false positives due to how often network administrators legitimately configure exclusions. In order to validate the activity further, review the specific exclusion and its intent. There are many legitimate reasons for exclusions, so it's important to gain context.\n\n### Related rules\n\n- Windows Defender Disabled via Registry Modification - 2ffa1f1e-b6db-47fa-994b-1512743847eb\n- Disabling Windows Defender Security Settings via PowerShell - c8cccb06-faf2-4cd5-886e-2c9636cfcb87\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Exclusion lists for antimalware capabilities should always be routinely monitored for review.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") or ?process.pe.original_file_name in (\"powershell.exe\", \"pwsh.dll\", \"powershell_ise.exe\")) and\n process.args : (\"*Add-MpPreference*\", \"*Set-MpPreference*\") and\n process.args : (\"*-Exclusion*\")\n", + "references": [ + "https://www.bitdefender.com/files/News/CaseStudies/study/400/Bitdefender-PR-Whitepaper-MosaicLoader-creat5540-en-EN.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2c17e5d7-08b9-43b2-b58a-0270d65ac85b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + }, + { + "id": "T1562.006", + "name": "Indicator Blocking", + "reference": "https://attack.mitre.org/techniques/T1562/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "2c17e5d7-08b9-43b2-b58a-0270d65ac85b_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a_108.json b/packages/security_detection_engine/kibana/security_rule/2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a_108.json new file mode 100644 index 00000000000..48ae884abfd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a_108.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential abuse of the Microsoft Diagnostics Troubleshooting Wizard (MSDT) to proxy malicious command or binary execution via malicious process arguments.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Microsoft Diagnostics Wizard Execution", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.pe.original_file_name == \"msdt.exe\" or process.name : \"msdt.exe\") and\n (\n process.args : (\"IT_RebrowseForFile=*\", \"ms-msdt:/id\", \"ms-msdt:-id\", \"*FromBase64*\") or\n\n (process.args : \"-af\" and process.args : \"/skip\" and\n process.parent.name : (\"explorer.exe\", \"cmd.exe\", \"powershell.exe\", \"cscript.exe\", \"wscript.exe\", \"mshta.exe\", \"rundll32.exe\", \"regsvr32.exe\") and\n process.args : (\"?:\\\\WINDOWS\\\\diagnostics\\\\index\\\\PCWDiagnostic.xml\", \"PCWDiagnostic.xml\", \"?:\\\\Users\\\\Public\\\\*\", \"?:\\\\Windows\\\\Temp\\\\*\")) or\n\n (process.pe.original_file_name == \"msdt.exe\" and not process.name : \"msdt.exe\" and process.name != null) or\n\n (process.pe.original_file_name == \"msdt.exe\" and not process.executable : (\"?:\\\\Windows\\\\system32\\\\msdt.exe\", \"?:\\\\Windows\\\\SysWOW64\\\\msdt.exe\"))\n )\n", + "references": [ + "https://twitter.com/nao_sec/status/1530196847679401984", + "https://lolbas-project.github.io/lolbas/Binaries/Msdt/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "2c3c29a4-f170-42f8-a3d8-2ceebc18eb6a_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2d8043ed-5bda-4caf-801c-c1feb7410504_209.json b/packages/security_detection_engine/kibana/security_rule/2d8043ed-5bda-4caf-801c-c1feb7410504_209.json new file mode 100644 index 00000000000..eafbd5a740a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2d8043ed-5bda-4caf-801c-c1feb7410504_209.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Loadable Kernel Modules (or LKMs) are pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. This identifies attempts to enumerate information about a kernel module.", + "false_positives": [ + "Security tools and device drivers may run these programs in order to enumerate kernel modules. Use of these programs by ordinary users is uncommon. These can be exempted by process name or username." + ], + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Enumeration of Kernel Modules", + "new_terms_fields": [ + "process.parent.command_line", + "process.command_line", + "host.id" + ], + "query": "event.category:process and host.os.type:linux and event.type:start and event.action:(exec or exec_event) and (\n (process.name:(lsmod or modinfo)) or \n (process.name:kmod and process.args:list) or \n (process.name:depmod and process.args:(--all or -a))\n) and not process.parent.name:(mkinitramfs or cryptroot or framebuffer or dracut or jem or thin-provisioning-tools\nor readykernel or lvm2 or vz-start or iscsi or mdadm or ovalprobes or bcache or plymouth or dkms or overlayroot or \nweak-modules or zfs)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2d8043ed-5bda-4caf-801c-c1feb7410504", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 209 + }, + "id": "2d8043ed-5bda-4caf-801c-c1feb7410504_209", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2dd480be-1263-4d9c-8672-172928f6789a_211.json b/packages/security_detection_engine/kibana/security_rule/2dd480be-1263-4d9c-8672-172928f6789a_211.json new file mode 100644 index 00000000000..1bcc8d6f4ff --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2dd480be-1263-4d9c-8672-172928f6789a_211.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious process access events from an unknown memory region. Endpoint security solutions usually hook userland Windows APIs in order to decide if the code that is being executed is malicious or not. It's possible to bypass hooked functions by writing malicious functions that call syscalls directly.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Process Access via Direct System Call", + "note": "## Triage and analysis\n\n### Investigating Suspicious Process Access via Direct System Call\n\nEndpoint security solutions usually hook userland Windows APIs in order to decide if the code that is being executed is malicious or not. It's possible to bypass hooked functions by writing malicious functions that call syscalls directly.\n\nMore context and technical details can be found in this [research blog](https://outflank.nl/blog/2019/06/19/red-team-tactics-combining-direct-system-calls-and-srdi-to-bypass-av-edr/).\n\nThis rule identifies suspicious process access events from an unknown memory region. Attackers can use direct system calls to bypass security solutions that rely on hooks.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This detection may be triggered by certain applications that install root certificates for the purpose of inspecting SSL traffic. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove the malicious certificate from the root certificate store.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.code == \"10\" and\n length(winlog.event_data.CallTrace) > 0 and\n\n /* Sysmon CallTrace starting with unknown memory module instead of ntdll which host Windows NT Syscalls */\n not winlog.event_data.CallTrace :\n (\"?:\\\\WINDOWS\\\\SYSTEM32\\\\ntdll.dll*\",\n \"?:\\\\WINDOWS\\\\SysWOW64\\\\ntdll.dll*\",\n \"?:\\\\Windows\\\\System32\\\\wow64cpu.dll*\",\n \"?:\\\\WINDOWS\\\\System32\\\\wow64win.dll*\",\n \"?:\\\\Windows\\\\System32\\\\win32u.dll*\") and\n\n not winlog.event_data.TargetImage :\n (\"?:\\\\Program Files (x86)\\\\Malwarebytes Anti-Exploit\\\\mbae-svc.exe\",\n \"?:\\\\Program Files\\\\Cisco\\\\AMP\\\\*\\\\sfc.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft\\\\EdgeWebView\\\\Application\\\\*\\\\msedgewebview2.exe\",\n \"?:\\\\Program Files\\\\Adobe\\\\Acrobat DC\\\\Acrobat\\\\*\\\\AcroCEF.exe\") and\n\n not (process.executable : (\"?:\\\\Program Files\\\\Adobe\\\\Acrobat DC\\\\Acrobat\\\\Acrobat.exe\",\n \"?:\\\\Program Files (x86)\\\\World of Warcraft\\\\_classic_\\\\WowClassic.exe\") and\n not winlog.event_data.TargetImage : \"?:\\\\WINDOWS\\\\system32\\\\lsass.exe\")\n", + "references": [ + "https://twitter.com/SBousseaden/status/1278013896440324096", + "https://www.ired.team/offensive-security/defense-evasion/using-syscalls-directly-from-visual-studio-to-bypass-avs-edrs" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetImage", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "2dd480be-1263-4d9c-8672-172928f6789a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 211 + }, + "id": "2dd480be-1263-4d9c-8672-172928f6789a_211", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3.json b/packages/security_detection_engine/kibana/security_rule/2ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3.json new file mode 100644 index 00000000000..6908eef25f3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies processes that are capable of downloading files with command line arguments containing URLs to SSH-IT's autonomous SSH worm. This worm intercepts outgoing SSH connections every time a user uses ssh.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential SSH-IT SSH Worm Downloaded", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\"curl\", \"wget\") and process.args : (\n \"https://thc.org/ssh-it/x\", \"http://nossl.segfault.net/ssh-it-deploy.sh\", \"https://gsocket.io/x\",\n \"https://thc.org/ssh-it/bs\", \"http://nossl.segfault.net/bs\"\n)\n", + "references": [ + "https://www.thc.org/ssh-it/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2ddc468e-b39b-4f5b-9825-f3dcb0e998ea", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.004", + "name": "SSH", + "reference": "https://attack.mitre.org/techniques/T1021/004/" + } + ] + }, + { + "id": "T1563", + "name": "Remote Service Session Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/", + "subtechnique": [ + { + "id": "T1563.001", + "name": "SSH Hijacking", + "reference": "https://attack.mitre.org/techniques/T1563/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "2ddc468e-b39b-4f5b-9825-f3dcb0e998ea_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2de10e77-c144-4e69-afb7-344e7127abd0_106.json b/packages/security_detection_engine/kibana/security_rule/2de10e77-c144-4e69-afb7-344e7127abd0_106.json new file mode 100644 index 00000000000..071b9f4335c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2de10e77-c144-4e69-afb7-344e7127abd0_106.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies accounts with a high number of single sign-on (SSO) logon errors. Excessive logon errors may indicate an attempt to brute force a password or SSO token.", + "false_positives": [ + "Automated processes that attempt to authenticate using expired credentials and unbounded retries may lead to false positives." + ], + "from": "now-20m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "O365 Excessive Single Sign-On Logon Errors", + "note": "", + "query": "event.dataset:o365.audit and event.provider:AzureActiveDirectory and event.category:authentication and o365.audit.LogonError:\"SsoArtifactInvalidOrExpired\"\n", + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.LogonError", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "2de10e77-c144-4e69-afb7-344e7127abd0", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "high", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/" + } + ] + } + ], + "threshold": { + "field": [ + "user.id" + ], + "value": 5 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 106 + }, + "id": "2de10e77-c144-4e69-afb7-344e7127abd0_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2e1e835d-01e5-48ca-b9fc-7a61f7f11902_109.json b/packages/security_detection_engine/kibana/security_rule/2e1e835d-01e5-48ca-b9fc-7a61f7f11902_109.json new file mode 100644 index 00000000000..f9899117052 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2e1e835d-01e5-48ca-b9fc-7a61f7f11902_109.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious AutoIt process execution. Malware written as an AutoIt script tends to rename the AutoIt executable to avoid detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Renamed AutoIt Scripts Interpreter", + "note": "## Triage and analysis\n\n### Investigating Renamed AutoIt Scripts Interpreter\n\nThe OriginalFileName attribute of a PE (Portable Executable) file is a metadata field that contains the original name of the executable file when compiled or linked. By using this attribute, analysts can identify renamed instances that attackers can use with the intent of evading detections, application allowlists, and other security protections.\n\nAutoIt is a scripting language and tool for automating tasks on Microsoft Windows operating systems. Due to its capabilities, malicious threat actors can abuse it to create malicious scripts and distribute malware.\n\nThis rule checks for renamed instances of AutoIt, which can indicate an attempt of evading detections, application allowlists, and other security protections.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.pe.original_file_name : \"AutoIt*.exe\" and not process.name : \"AutoIt*.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2e1e835d-01e5-48ca-b9fc-7a61f7f11902", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "2e1e835d-01e5-48ca-b9fc-7a61f7f11902_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2e29e96a-b67c-455a-afe4-de6183431d0d_110.json b/packages/security_detection_engine/kibana/security_rule/2e29e96a-b67c-455a-afe4-de6183431d0d_110.json new file mode 100644 index 00000000000..ea709c37ef2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2e29e96a-b67c-455a-afe4-de6183431d0d_110.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of Windows API functions that are commonly abused by malware and security tools to load malicious code or inject it into remote processes.", + "false_positives": [ + "Legitimate PowerShell scripts that make use of these functions." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Process Injection via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Potential Process Injection via PowerShell\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nPowerShell also has solid capabilities to make the interaction with the Win32 API in an uncomplicated and reliable way, like the execution of inline C# code, PSReflect, Get-ProcAddress, etc.\n\nRed Team tooling and malware developers take advantage of these capabilities to develop stagers and loaders that inject payloads directly into the memory without touching the disk to circumvent file-based security protections.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Check if the imported function was executed and which process it targeted.\n- Check if the injected code can be retrieved (hardcoded in the script or on command line logs).\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (VirtualAlloc or VirtualAllocEx or VirtualProtect or LdrLoadDll or LoadLibrary or LoadLibraryA or\n LoadLibraryEx or GetProcAddress or OpenProcess or OpenProcessToken or AdjustTokenPrivileges) and\n (WriteProcessMemory or CreateRemoteThread or NtCreateThreadEx or CreateThread or QueueUserAPC or\n SuspendThread or ResumeThread or GetDelegateForFunctionPointer)\n ) and not \n (user.id:(\"S-1-5-18\" or \"S-1-5-19\") and\n file.directory: \"C:\\\\ProgramData\\\\Microsoft\\\\Windows Defender Advanced Threat Protection\\\\SenseCM\")\n", + "references": [ + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/management/Invoke-PSInject.ps1", + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/management/Invoke-ReflectivePEInjection.ps1", + "https://github.com/BC-SECURITY/Empire/blob/master/empire/server/data/module_source/credentials/Invoke-Mimikatz.ps1", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.directory", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2e29e96a-b67c-455a-afe4-de6183431d0d", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.001", + "name": "Dynamic-link Library Injection", + "reference": "https://attack.mitre.org/techniques/T1055/001/" + }, + { + "id": "T1055.002", + "name": "Portable Executable Injection", + "reference": "https://attack.mitre.org/techniques/T1055/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "2e29e96a-b67c-455a-afe4-de6183431d0d_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2edc8076-291e-41e9-81e4-e3fcbc97ae5e_109.json b/packages/security_detection_engine/kibana/security_rule/2edc8076-291e-41e9-81e4-e3fcbc97ae5e_109.json new file mode 100644 index 00000000000..f8b4bdaefdd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2edc8076-291e-41e9-81e4-e3fcbc97ae5e_109.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a hidden local user account by appending the dollar sign to the account name. This is sometimes done by attackers to increase access to a system and avoid appearing in the results of accounts listing using the net users command.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation of a Hidden Local User Account", + "note": "## Triage and analysis\n\n### Investigating Creation of a Hidden Local User Account\n\nAttackers can create accounts ending with a `$` symbol to make the account hidden to user enumeration utilities and bypass detections that identify computer accounts by this pattern to apply filters.\n\nThis rule uses registry events to identify the creation of local hidden accounts.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positive (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Delete the hidden account.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\SAM\\\\SAM\\\\Domains\\\\Account\\\\Users\\\\Names\\\\*$\\\\\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SAM\\\\SAM\\\\Domains\\\\Account\\\\Users\\\\Names\\\\*$\\\\\"\n)\n", + "references": [ + "http://web.archive.org/web/20230329153858/https://blog.menasec.net/2019/02/threat-hunting-6-hiding-in-plain-sights_8.html", + "https://github.com/CyberMonitor/APT_CyberCriminal_Campagin_Collections/tree/master/2020/2020.12.15.Lazarus_Campaign" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "2edc8076-291e-41e9-81e4-e3fcbc97ae5e", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "2edc8076-291e-41e9-81e4-e3fcbc97ae5e_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2f2f4939-0b34-40c2-a0a3-844eb7889f43_110.json b/packages/security_detection_engine/kibana/security_rule/2f2f4939-0b34-40c2-a0a3-844eb7889f43_110.json new file mode 100644 index 00000000000..37746c695e1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2f2f4939-0b34-40c2-a0a3-844eb7889f43_110.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that can record audio, a common feature in popular post-exploitation tooling.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Suspicious Script with Audio Capture Capabilities", + "note": "## Triage and analysis\n\n### Investigating PowerShell Suspicious Script with Audio Capture Capabilities\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can use PowerShell to interact with the Windows API with the intent of capturing audio from input devices connected to the victim's computer.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Investigate if the script stores the recorded data locally and determine if anything was recorded.\n- Investigate whether the script contains exfiltration capabilities and identify the exfiltration server.\n- Assess network data to determine if the host communicated with the exfiltration server.\n\n### False positive analysis\n\n- Regular users should not need scripts to capture audio, which makes false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Prioritize the response if this alert involves key executives or potentially valuable targets for espionage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"Get-MicrophoneAudio\" or\n \"WindowsAudioDevice-Powershell-Cmdlet\" or\n (waveInGetNumDevs and mciSendStringA)\n )\n and not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\" and \"PowerSploitIndicators\"\n )\n and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-MicrophoneAudio.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2f2f4939-0b34-40c2-a0a3-844eb7889f43", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1123", + "name": "Audio Capture", + "reference": "https://attack.mitre.org/techniques/T1123/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "2f2f4939-0b34-40c2-a0a3-844eb7889f43_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2f8a1226-5720-437d-9c20-e0029deb6194_109.json b/packages/security_detection_engine/kibana/security_rule/2f8a1226-5720-437d-9c20-e0029deb6194_109.json new file mode 100644 index 00000000000..5ae98af6901 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2f8a1226-5720-437d-9c20-e0029deb6194_109.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may attempt to disable the syslog service in an attempt to an attempt to disrupt event logging and evade detection by security controls.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Attempt to Disable Syslog Service", + "query": "process where host.os.type == \"linux\" and event.action in (\"exec\", \"exec_event\") and\n ( (process.name == \"service\" and process.args == \"stop\") or\n (process.name == \"chkconfig\" and process.args == \"off\") or\n (process.name == \"systemctl\" and process.args in (\"disable\", \"stop\", \"kill\"))\n ) and process.args in (\"syslog\", \"rsyslog\", \"syslog-ng\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "2f8a1226-5720-437d-9c20-e0029deb6194", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "2f8a1226-5720-437d-9c20-e0029deb6194_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2f95540c-923e-4f57-9dae-de30169c68b9_2.json b/packages/security_detection_engine/kibana/security_rule/2f95540c-923e-4f57-9dae-de30169c68b9_2.json new file mode 100644 index 00000000000..ca508736468 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2f95540c-923e-4f57-9dae-de30169c68b9_2.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for /proc/*/maps file reads. The /proc/*/maps file in Linux provides a memory map for a specific process, detailing the memory segments, permissions, and what files are mapped to these segments. Attackers may read a process's memory map to identify memory addresses for code injection or process hijacking.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious /proc/maps Discovery", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\nprocess.name in (\"cat\", \"grep\") and process.args : \"/proc/*/maps\" and process.entry_leader.name in (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\"\n)\n", + "references": [ + "https://github.com/arget13/DDexec" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entry_leader.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "2f95540c-923e-4f57-9dae-de30169c68b9", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "2f95540c-923e-4f57-9dae-de30169c68b9_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/2ffa1f1e-b6db-47fa-994b-1512743847eb_110.json b/packages/security_detection_engine/kibana/security_rule/2ffa1f1e-b6db-47fa-994b-1512743847eb_110.json new file mode 100644 index 00000000000..9390ffde7b2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/2ffa1f1e-b6db-47fa-994b-1512743847eb_110.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to the Windows Defender registry settings to disable the service or set the service to be started manually.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Defender Disabled via Registry Modification", + "note": "## Triage and analysis\n\n### Investigating Windows Defender Disabled via Registry Modification\n\nMicrosoft Windows Defender is an antivirus product built into Microsoft Windows, which makes it popular across multiple environments. Disabling it is a common step in threat actor playbooks.\n\nThis rule monitors the registry for configurations that disable Windows Defender or the start of its service.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check if this operation was approved and performed according to the organization's change management policy.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity, the configuration is justified (for example, it is being used to deploy other security solutions or troubleshooting), and no other suspicious activity has been observed.\n\n### Related rules\n\n- Disabling Windows Defender Security Settings via PowerShell - c8cccb06-faf2-4cd5-886e-2c9636cfcb87\n- Microsoft Windows Defender Tampering - fe794edd-487f-4a90-b285-3ee54f2af2d3\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Re-enable Windows Defender and restore the service configurations to automatic start.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n (\n (\n registry.path: (\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\DisableAntiSpyware\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\DisableAntiSpyware\"\n ) and\n registry.data.strings: (\"1\", \"0x00000001\")\n ) or\n (\n registry.path: (\n \"HKLM\\\\System\\\\*ControlSet*\\\\Services\\\\WinDefend\\\\Start\",\n \"\\\\REGISTRY\\\\MACHINE\\\\System\\\\*ControlSet*\\\\Services\\\\WinDefend\\\\Start\"\n ) and\n registry.data.strings in (\"3\", \"4\", \"0x00000003\", \"0x00000004\")\n )\n ) and\n\n not\n (\n process.executable : (\n \"?:\\\\WINDOWS\\\\system32\\\\services.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Program Files (x86)\\\\Trend Micro\\\\Security Agent\\\\NTRmv.exe\"\n ) and user.id : \"S-1-5-18\"\n )\n", + "references": [ + "https://thedfirreport.com/2020/12/13/defender-control/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "2ffa1f1e-b6db-47fa-994b-1512743847eb", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + }, + { + "id": "T1562.006", + "name": "Indicator Blocking", + "reference": "https://attack.mitre.org/techniques/T1562/006/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "2ffa1f1e-b6db-47fa-994b-1512743847eb_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/30bfddd7-2954-4c9d-bbc6-19a99ca47e23_8.json b/packages/security_detection_engine/kibana/security_rule/30bfddd7-2954-4c9d-bbc6-19a99ca47e23_8.json new file mode 100644 index 00000000000..2dcb8510534 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/30bfddd7-2954-4c9d-bbc6-19a99ca47e23_8.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where the 'touch' command is executed on a Linux system with the \"-r\" flag, which is used to modify the timestamp of a file based on another file's timestamp. The rule targets specific VM-related paths, such as \"/etc/vmware/\", \"/usr/lib/vmware/\", or \"/vmfs/*\". These paths are associated with VMware virtualization software, and their presence in the touch command arguments may indicate that a threat actor is attempting to tamper with timestamps of VM-related files and configurations on the system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "ESXI Timestomping using Touch Command", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"touch\" and process.args == \"-r\" and\nprocess.args : (\"/etc/vmware/*\", \"/usr/lib/vmware/*\", \"/vmfs/*\")\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "30bfddd7-2954-4c9d-bbc6-19a99ca47e23", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.006", + "name": "Timestomp", + "reference": "https://attack.mitre.org/techniques/T1070/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "30bfddd7-2954-4c9d-bbc6-19a99ca47e23_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/30e1e9f2-eb9c-439f-aff6-1e3068e99384_2.json b/packages/security_detection_engine/kibana/security_rule/30e1e9f2-eb9c-439f-aff6-1e3068e99384_2.json new file mode 100644 index 00000000000..ccab693fc7f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/30e1e9f2-eb9c-439f-aff6-1e3068e99384_2.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects network connections initiated by the \"sudo\" binary. This behavior is uncommon and may occur in instances where reverse shell shellcode is injected into a process run with elevated permissions via \"sudo\". Attackers may attempt to inject shellcode into processes running as root, to escalate privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Network Connection via Sudo Binary", + "query": "network where host.os.type == \"linux\" and event.type == \"start\" and\nevent.action in (\"connection_attempted\", \"ipv4_connection_attempt_event\") and process.name == \"sudo\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "30e1e9f2-eb9c-439f-aff6-1e3068e99384", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.008", + "name": "Ptrace System Calls", + "reference": "https://attack.mitre.org/techniques/T1055/008/" + } + ] + }, + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.003", + "name": "Sudo and Sudo Caching", + "reference": "https://attack.mitre.org/techniques/T1548/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "30e1e9f2-eb9c-439f-aff6-1e3068e99384_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/31b4c719-f2b4-41f6-a9bd-fce93c2eaf62_111.json b/packages/security_detection_engine/kibana/security_rule/31b4c719-f2b4-41f6-a9bd-fce93c2eaf62_111.json new file mode 100644 index 00000000000..e37a58f0103 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/31b4c719-f2b4-41f6-a9bd-fce93c2eaf62_111.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies User Account Control (UAC) bypass via eventvwr.exe. Attackers bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Bypass UAC via Event Viewer", + "note": "## Triage and analysis\n\n### Investigating Bypass UAC via Event Viewer\n\nWindows User Account Control (UAC) allows a program to elevate its privileges (tracked as low to high integrity levels) to perform a task under administrator-level permissions, possibly by prompting the user for confirmation. UAC can deny an operation under high-integrity enforcement, or allow the user to perform the action if they are in the local administrators group and enter an administrator password when prompted.\n\nFor more information about the UAC and how it works, check the [official Microsoft docs page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works).\n\nDuring startup, `eventvwr.exe` checks the registry value of the `HKCU\\Software\\Classes\\mscfile\\shell\\open\\command` registry key for the location of `mmc.exe`, which is used to open the `eventvwr.msc` saved console file. If the location of another binary or script is added to this registry value, it will be executed as a high-integrity process without a UAC prompt being displayed to the user. This rule detects this UAC bypass by monitoring processes spawned by `eventvwr.exe` other than `mmc.exe` and `werfault.exe`.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"eventvwr.exe\" and\n not process.executable :\n (\"?:\\\\Windows\\\\SysWOW64\\\\mmc.exe\",\n \"?:\\\\Windows\\\\System32\\\\mmc.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\WerFault.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerFault.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "31b4c719-f2b4-41f6-a9bd-fce93c2eaf62", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "31b4c719-f2b4-41f6-a9bd-fce93c2eaf62_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/32300431-c2d5-432d-8ec8-0e03f9924756_1.json b/packages/security_detection_engine/kibana/security_rule/32300431-c2d5-432d-8ec8-0e03f9924756_1.json new file mode 100644 index 00000000000..03b7b91d54f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/32300431-c2d5-432d-8ec8-0e03f9924756_1.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of a unix binary with read, write and execute memory region permissions, followed by a network connection. The mprotect() system call is used to change the access protections on a region of memory that has already been allocated. This syscall allows a process to modify the permissions of pages in its virtual address space, enabling or disabling permissions such as read, write, and execute for those pages. RWX permissions on memory is in many cases overly permissive, and should (especially in conjunction with an outbound network connection) be analyzed thoroughly.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection from Binary with RWX Memory Region", + "query": "sample by host.id, process.pid, process.name\n /* auditd.data.a2 == \"7\" translates to RWX memory region protection (PROT_READ | PROT_WRITE | PROT_EXEC) */\n [process where host.os.type == \"linux\" and auditd.data.syscall == \"mprotect\" and auditd.data.a2 == \"7\"]\n [network where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"connection_attempted\" and\n not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")]\n", + "references": [ + "https://man7.org/linux/man-pages/man2/mprotect.2.html" + ], + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a2", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "32300431-c2d5-432d-8ec8-0e03f9924756", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n```\n-a always,exit -F arch=b64 -S mprotect\n```\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 1 + }, + "id": "32300431-c2d5-432d-8ec8-0e03f9924756_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108.json b/packages/security_detection_engine/kibana/security_rule/32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108.json new file mode 100644 index 00000000000..a29627e90e7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution from a directory masquerading as the Windows Program Files directories. These paths are trusted and usually host trusted third party programs. An adversary may leverage masquerading, along with low privileges to bypass detections allowlisting those folders.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Program Files Directory Masquerading", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.executable : \"C:\\\\*Program*Files*\\\\*.exe\" and\n not process.executable : (\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\Users\\\\*.exe\",\n \"?:\\\\ProgramData\\\\*.exe\",\n \"?:\\\\Windows\\\\Downloaded Program Files\\\\*.exe\",\n \"?:\\\\Windows\\\\Temp\\\\.opera\\\\????????????\\\\CProgram?FilesOpera*\\\\*.exe\",\n \"?:\\\\Windows\\\\Temp\\\\.opera\\\\????????????\\\\CProgram?Files?(x86)Opera*\\\\*.exe\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "32c5cf9c-2ef8-4e87-819e-5ccb7cd18b14_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/32f4675e-6c49-4ace-80f9-97c9259dca2e_110.json b/packages/security_detection_engine/kibana/security_rule/32f4675e-6c49-4ace-80f9-97c9259dca2e_110.json new file mode 100644 index 00000000000..0602d66ad23 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/32f4675e-6c49-4ace-80f9-97c9259dca2e_110.json @@ -0,0 +1,143 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious child processes of Microsoft Outlook. These child processes are often associated with spear phishing activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious MS Outlook Child Process", + "note": "## Triage and analysis\n\n### Investigating Suspicious MS Outlook Child Process\n\nMicrosoft Outlook is an email client that provides contact, email calendar, and task management features. Outlook is widely used, either standalone or as part of the Office suite.\n\nThis rule looks for suspicious processes spawned by MS Outlook, which can be the result of the execution of malicious documents and/or exploitation for initial access.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve recently opened files received via email and opened by the user that could cause this behavior. Common locations include but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"outlook.exe\" and\n process.name : (\"Microsoft.Workflow.Compiler.exe\", \"arp.exe\", \"atbroker.exe\", \"bginfo.exe\", \"bitsadmin.exe\",\n \"cdb.exe\", \"certutil.exe\", \"cmd.exe\", \"cmstp.exe\", \"cscript.exe\", \"csi.exe\", \"dnx.exe\", \"dsget.exe\",\n \"dsquery.exe\", \"forfiles.exe\", \"fsi.exe\", \"ftp.exe\", \"gpresult.exe\", \"hostname.exe\", \"ieexec.exe\",\n \"iexpress.exe\", \"installutil.exe\", \"ipconfig.exe\", \"mshta.exe\", \"msxsl.exe\", \"nbtstat.exe\", \"net.exe\",\n \"net1.exe\", \"netsh.exe\", \"netstat.exe\", \"nltest.exe\", \"odbcconf.exe\", \"ping.exe\", \"powershell.exe\",\n \"pwsh.exe\", \"qprocess.exe\", \"quser.exe\", \"qwinsta.exe\", \"rcsi.exe\", \"reg.exe\", \"regasm.exe\",\n \"regsvcs.exe\", \"regsvr32.exe\", \"sc.exe\", \"schtasks.exe\", \"systeminfo.exe\", \"tasklist.exe\",\n \"tracert.exe\", \"whoami.exe\", \"wmic.exe\", \"wscript.exe\", \"xwizard.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "32f4675e-6c49-4ace-80f9-97c9259dca2e", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "32f4675e-6c49-4ace-80f9-97c9259dca2e_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/33a6752b-da5e-45f8-b13a-5f094c09522f_6.json b/packages/security_detection_engine/kibana/security_rule/33a6752b-da5e-45f8-b13a-5f094c09522f_6.json new file mode 100644 index 00000000000..df44692e38f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/33a6752b-da5e-45f8-b13a-5f094c09522f_6.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where the 'find' command is started on a Linux system with arguments targeting specific VM-related paths, such as \"/etc/vmware/\", \"/usr/lib/vmware/\", or \"/vmfs/*\". These paths are associated with VMware virtualization software, and their presence in the find command arguments may indicate that a threat actor is attempting to search for, analyze, or manipulate VM-related files and configurations on the system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "ESXI Discovery via Find", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"find\" and process.args : (\"/etc/vmware/*\", \"/usr/lib/vmware/*\", \"/vmfs/*\")\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "33a6752b-da5e-45f8-b13a-5f094c09522f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "33a6752b-da5e-45f8-b13a-5f094c09522f_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/35330ba2-c859-4c98-8b7f-c19159ea0e58_106.json b/packages/security_detection_engine/kibana/security_rule/35330ba2-c859-4c98-8b7f-c19159ea0e58_106.json new file mode 100644 index 00000000000..968c18926c5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/35330ba2-c859-4c98-8b7f-c19159ea0e58_106.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to execute a child process from within the context of an Electron application using the child_process Node.js module. Adversaries may abuse this technique to inherit permissions from parent processes.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Execution via Electron Child Process Node.js Module", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and process.args:(\"-e\" and const*require*child_process*)\n", + "references": [ + "https://www.matthewslipper.com/2019/09/22/everything-you-wanted-electron-child-process.html", + "https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/", + "https://nodejs.org/api/child_process.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "35330ba2-c859-4c98-8b7f-c19159ea0e58", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "35330ba2-c859-4c98-8b7f-c19159ea0e58_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3535c8bb-3bd5-40f4-ae32-b7cd589d5372_109.json b/packages/security_detection_engine/kibana/security_rule/3535c8bb-3bd5-40f4-ae32-b7cd589d5372_109.json new file mode 100644 index 00000000000..29ab1f01a2c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3535c8bb-3bd5-40f4-ae32-b7cd589d5372_109.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a new port forwarding rule. An adversary may abuse this technique to bypass network segmentation restrictions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Port Forwarding Rule Addition", + "note": "## Triage and analysis\n\n### Investigating Port Forwarding Rule Addition\n\nNetwork port forwarding is a mechanism to redirect incoming TCP connections (IPv4 or IPv6) from the local TCP port to any other port number, or even to a port on a remote computer.\n\nAttackers may configure port forwarding rules to bypass network segmentation restrictions, using the host as a jump box to access previously unreachable systems.\n\nThis rule monitors the modifications to the `HKLM\\SYSTEM\\*ControlSet*\\Services\\PortProxy\\v4tov4\\` subkeys.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Identify the target host IP address, check the connections originating from the host where the modification occurred, and inspect the credentials used.\n - Investigate suspicious login activity, such as unauthorized access and logins from outside working hours and unusual locations.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the Administrator is aware of the activity and there are justifications for this configuration.\n- If this rule is noisy in your environment due to expected activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Delete the port forwarding rule.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\PortProxy\\\\v4tov4\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\PortProxy\\\\v4tov4\\\\*\"\n)\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2019/01/bypassing-network-restrictions-through-rdp-tunneling.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3535c8bb-3bd5-40f4-ae32-b7cd589d5372", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "3535c8bb-3bd5-40f4-ae32-b7cd589d5372_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/35a3b253-eea8-46f0-abd3-68bdd47e6e3d_3.json b/packages/security_detection_engine/kibana/security_rule/35a3b253-eea8-46f0-abd3-68bdd47e6e3d_3.json new file mode 100644 index 00000000000..37386dc819a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/35a3b253-eea8-46f0-abd3-68bdd47e6e3d_3.json @@ -0,0 +1,60 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected high bytes of data written to an external device. In a typical operational setting, there is usually a predictable pattern or a certain range of data that is written to external devices. An unusually large amount of data being written is anomalous and can signal illicit data copying or transfer activities.", + "from": "now-2h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_bytes_written_to_external_device", + "name": "Spike in Bytes Sent to an External Device", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "35a3b253-eea8-46f0-abd3-68bdd47e6e3d", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the Elastic Defend integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1052", + "name": "Exfiltration Over Physical Medium", + "reference": "https://attack.mitre.org/techniques/T1052/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "35a3b253-eea8-46f0-abd3-68bdd47e6e3d_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/35df0dd8-092d-4a83-88c1-5151a804f31b_110.json b/packages/security_detection_engine/kibana/security_rule/35df0dd8-092d-4a83-88c1-5151a804f31b_110.json new file mode 100644 index 00000000000..e44cd8f7ee4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/35df0dd8-092d-4a83-88c1-5151a804f31b_110.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies Windows programs run from unexpected parent processes. This could indicate masquerading or other strange activity on a system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Parent-Child Relationship", + "note": "## Triage and analysis\n\n### Investigating Unusual Parent-Child Relationship\n\nWindows internal/system processes have some characteristics that can be used to spot suspicious activities. One of these characteristics is parent-child relationships. These relationships can be used to baseline the typical behavior of the system and then alert on occurrences that don't comply with the baseline.\n\nThis rule uses this information to spot suspicious parent and child processes.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\nprocess.parent.name != null and\n (\n /* suspicious parent processes */\n (process.name:\"autochk.exe\" and not process.parent.name:\"smss.exe\") or\n (process.name:(\"fontdrvhost.exe\", \"dwm.exe\") and not process.parent.name:(\"wininit.exe\", \"winlogon.exe\")) or\n (process.name:(\"consent.exe\", \"RuntimeBroker.exe\", \"TiWorker.exe\") and not process.parent.name:\"svchost.exe\") or\n (process.name:\"SearchIndexer.exe\" and not process.parent.name:\"services.exe\") or\n (process.name:\"SearchProtocolHost.exe\" and not process.parent.name:(\"SearchIndexer.exe\", \"dllhost.exe\")) or\n (process.name:\"dllhost.exe\" and not process.parent.name:(\"services.exe\", \"svchost.exe\")) or\n (process.name:\"smss.exe\" and not process.parent.name:(\"System\", \"smss.exe\")) or\n (process.name:\"csrss.exe\" and not process.parent.name:(\"smss.exe\", \"svchost.exe\")) or\n (process.name:\"wininit.exe\" and not process.parent.name:\"smss.exe\") or\n (process.name:\"winlogon.exe\" and not process.parent.name:\"smss.exe\") or\n (process.name:(\"lsass.exe\", \"LsaIso.exe\") and not process.parent.name:\"wininit.exe\") or\n (process.name:\"LogonUI.exe\" and not process.parent.name:(\"wininit.exe\", \"winlogon.exe\")) or\n (process.name:\"services.exe\" and not process.parent.name:\"wininit.exe\") or\n (process.name:\"svchost.exe\" and not process.parent.name:(\"MsMpEng.exe\", \"services.exe\", \"svchost.exe\")) or\n (process.name:\"spoolsv.exe\" and not process.parent.name:\"services.exe\") or\n (process.name:\"taskhost.exe\" and not process.parent.name:(\"services.exe\", \"svchost.exe\", \"ngentask.exe\")) or\n (process.name:\"taskhostw.exe\" and not process.parent.name:(\"services.exe\", \"svchost.exe\")) or\n (process.name:\"userinit.exe\" and not process.parent.name:(\"dwm.exe\", \"winlogon.exe\")) or\n (process.name:(\"wmiprvse.exe\", \"wsmprovhost.exe\", \"winrshost.exe\") and not process.parent.name:\"svchost.exe\") or\n /* suspicious child processes */\n (process.parent.name:(\"SearchProtocolHost.exe\", \"taskhost.exe\", \"csrss.exe\") and not process.name:(\"werfault.exe\", \"wermgr.exe\", \"WerFaultSecure.exe\", \"conhost.exe\")) or\n (process.parent.name:\"autochk.exe\" and not process.name:(\"chkdsk.exe\", \"doskey.exe\", \"WerFault.exe\")) or\n (process.parent.name:\"smss.exe\" and not process.name:(\"autochk.exe\", \"smss.exe\", \"csrss.exe\", \"wininit.exe\", \"winlogon.exe\", \"setupcl.exe\", \"WerFault.exe\")) or\n (process.parent.name:\"wermgr.exe\" and not process.name:(\"WerFaultSecure.exe\", \"wermgr.exe\", \"WerFault.exe\")) or\n (process.parent.name:\"conhost.exe\" and not process.name:(\"mscorsvw.exe\", \"wermgr.exe\", \"WerFault.exe\", \"WerFaultSecure.exe\"))\n )\n", + "references": [ + "https://github.com/sbousseaden/Slides/blob/master/Hunting%20MindMaps/PNG/Windows%20Processes%20TH.map.png", + "https://www.andreafortuna.org/2017/06/15/standard-windows-processes-a-brief-reference/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "35df0dd8-092d-4a83-88c1-5151a804f31b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.012", + "name": "Process Hollowing", + "reference": "https://attack.mitre.org/techniques/T1055/012/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "35df0dd8-092d-4a83-88c1-5151a804f31b_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3688577a-d196-11ec-90b0-f661ea17fbce_109.json b/packages/security_detection_engine/kibana/security_rule/3688577a-d196-11ec-90b0-f661ea17fbce_109.json new file mode 100644 index 00000000000..eb697d3ae5b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3688577a-d196-11ec-90b0-f661ea17fbce_109.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a new process starting from a process ID (PID), lock or reboot file within the temporary file storage paradigm (tmpfs) directory /var/run directory. On Linux, the PID files typically hold the process ID to track previous copies running and manage other tasks. Certain Linux malware use the /var/run directory for holding data, executables and other tasks, disguising itself or these files as legitimate PID files.", + "false_positives": [ + "False-Positives (FP) should be at a minimum with this detection as PID files are meant to hold process IDs, not inherently be executables that spawn processes." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Process Started from Process ID (PID) File", + "note": "## Triage and analysis\n\n### Investigating Process Started from Process ID (PID) File\nDetection alerts from this rule indicate a process spawned from an executable masqueraded as a legitimate PID file which is very unusual and should not occur. Here are some possible avenues of investigation:\n- Examine parent and child process relationships of the new process to determine if other processes are running.\n- Examine the /var/run directory using Osquery to determine other potential PID files with unsually large file sizes, indicative of it being an executable: \"SELECT f.size, f.uid, f.type, f.path from file f WHERE path like '/var/run/%%';\"\n- Examine the reputation of the SHA256 hash from the PID file in a database like VirusTotal to identify additional pivots and artifacts for investigation.\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and user.id == \"0\" and\n process.executable regex~ \"\"\"/var/run/\\w+\\.(pid|lock|reboot)\"\"\"\n", + "references": [ + "https://www.sandflysecurity.com/blog/linux-file-masquerading-and-malicious-pids-sandfly-1-2-6-update/", + "https://twitter.com/GossiTheDog/status/1522964028284411907", + "https://exatrack.com/public/Tricephalic_Hellkeeper.pdf", + "https://www.elastic.co/security-labs/a-peek-behind-the-bpfdoor" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "3688577a-d196-11ec-90b0-f661ea17fbce", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Threat: BPFDoor", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "3688577a-d196-11ec-90b0-f661ea17fbce_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/36a8e048-d888-4f61-a8b9-0f9e2e40f317_106.json b/packages/security_detection_engine/kibana/security_rule/36a8e048-d888-4f61-a8b9-0f9e2e40f317_106.json new file mode 100644 index 00000000000..14f9a06ff83 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/36a8e048-d888-4f61-a8b9-0f9e2e40f317_106.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a suspicious ImagePath value. This could be an indication of an adversary attempting to stealthily persist or escalate privileges through abnormal service creation.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious ImagePath Service Creation", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ImagePath\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ImagePath\"\n ) and\n /* add suspicious registry ImagePath values here */\n registry.data.strings : (\"%COMSPEC%*\", \"*\\\\.\\\\pipe\\\\*\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "36a8e048-d888-4f61-a8b9-0f9e2e40f317", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "36a8e048-d888-4f61-a8b9-0f9e2e40f317_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/36c48a0c-c63a-4cbc-aee1-8cac87db31a9_3.json b/packages/security_detection_engine/kibana/security_rule/36c48a0c-c63a-4cbc-aee1-8cac87db31a9_3.json new file mode 100644 index 00000000000..22883c5d7d7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/36c48a0c-c63a-4cbc-aee1-8cac87db31a9_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected unusually high number of process arguments in an RDP session. Executing sophisticated attacks such as lateral movement can involve the use of complex commands, obfuscation mechanisms, redirection and piping, which in turn increases the number of arguments in a command.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_mean_rdp_process_args", + "name": "High Mean of Process Arguments in an RDP Session", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "36c48a0c-c63a-4cbc-aee1-8cac87db31a9", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "36c48a0c-c63a-4cbc-aee1-8cac87db31a9_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/37f638ea-909d-4f94-9248-edd21e4a9906_106.json b/packages/security_detection_engine/kibana/security_rule/37f638ea-909d-4f94-9248-edd21e4a9906_106.json new file mode 100644 index 00000000000..86f8dbbea69 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/37f638ea-909d-4f94-9248-edd21e4a9906_106.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Finder Sync plugins enable users to extend Finder\u2019s functionality by modifying the user interface. Adversaries may abuse this feature by adding a rogue Finder Plugin to repeatedly execute malicious payloads for persistence.", + "false_positives": [ + "Trusted Finder Sync Plugins" + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Finder Sync Plugin Registered and Enabled", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name : \"pluginkit\" and\n process.args : \"-e\" and process.args : \"use\" and process.args : \"-i\" and\n not process.args :\n (\n \"com.google.GoogleDrive.FinderSyncAPIExtension\",\n \"com.google.drivefs.findersync\",\n \"com.boxcryptor.osx.Rednif\",\n \"com.adobe.accmac.ACCFinderSync\",\n \"com.microsoft.OneDrive.FinderSync\",\n \"com.insynchq.Insync.Insync-Finder-Integration\",\n \"com.box.desktop.findersyncext\"\n ) and\n not process.parent.executable : (\n \"/Library/Application Support/IDriveforMac/IDriveHelperTools/FinderPluginApp.app/Contents/MacOS/FinderPluginApp\"\n )\n", + "references": [ + "https://github.com/specterops/presentations/raw/master/Leo%20Pitt/Hey_Im_Still_in_Here_Modern_macOS_Persistence_SO-CON2020.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "37f638ea-909d-4f94-9248-edd21e4a9906", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "37f638ea-909d-4f94-9248-edd21e4a9906_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3838e0e3-1850-4850-a411-2e8c5ba40ba8_110.json b/packages/security_detection_engine/kibana/security_rule/3838e0e3-1850-4850-a411-2e8c5ba40ba8_110.json new file mode 100644 index 00000000000..81433f6247a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3838e0e3-1850-4850-a411-2e8c5ba40ba8_110.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies certutil.exe making a network connection. Adversaries could abuse certutil.exe to download a certificate, or malware, from a remote URL.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via Certutil", + "note": "## Triage and analysis\n\n### Investigating Network Connection via Certutil\n\nAttackers can abuse `certutil.exe` to download malware, offensive security tools, and certificates from external sources in order to take the next steps in a compromised environment.\n\nThis rule looks for network events where `certutil.exe` contacts IP ranges other than the ones specified in [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml)\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses the [Investigate Markdown Plugin](https://www.elastic.co/guide/en/security/master/interactive-investigation-guides.html) introduced in Elastic Stack version 8.8.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - !{investigate{\"label\":\"Alerts associated with the user in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"user.id\",\"queryType\":\"phrase\",\"value\":\"{{user.id}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n - !{investigate{\"label\":\"Alerts associated with the host in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"host.name\",\"queryType\":\"phrase\",\"value\":\"{{host.name}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n- Investigate if the downloaded file was executed.\n- Determine the context in which `certutil.exe` and the file were run.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the downloaded file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - !{investigate{\"label\":\"Investigate the Subject Process Network Events\",\"providers\":[[{\"excluded\":false,\"field\":\"process.entity_id\",\"queryType\":\"phrase\",\"value\":\"{{process.entity_id}}\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"event.category\",\"queryType\":\"phrase\",\"value\":\"network\",\"valueType\":\"string\"}]]}}\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. If trusted software uses this command and the triage has not identified anything suspicious, this alert can be closed as a false positive.\n- If this rule is noisy in your environment due to expected activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "network where host.os.type == \"windows\" and process.name : \"certutil.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\",\n \"192.0.0.171/32\", \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\",\n \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\", \"192.175.48.0/24\",\n \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\")\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml", + "https://frsecure.com/malware-incident-response-playbook/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "3838e0e3-1850-4850-a411-2e8c5ba40ba8", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "3838e0e3-1850-4850-a411-2e8c5ba40ba8_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/38948d29-3d5d-42e3-8aec-be832aaaf8eb_107.json b/packages/security_detection_engine/kibana/security_rule/38948d29-3d5d-42e3-8aec-be832aaaf8eb_107.json new file mode 100644 index 00000000000..2e5e437bf6c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/38948d29-3d5d-42e3-8aec-be832aaaf8eb_107.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of osascript to execute scripts via standard input that may prompt a user with a rogue dialog for credentials.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Prompt for Credentials with OSASCRIPT", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name : \"osascript\" and\n process.command_line : \"osascript*display dialog*password*\"\n", + "references": [ + "https://github.com/EmpireProject/EmPyre/blob/master/lib/modules/collection/osx/prompt.py", + "https://ss64.com/osx/osascript.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "38948d29-3d5d-42e3-8aec-be832aaaf8eb", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1056", + "name": "Input Capture", + "reference": "https://attack.mitre.org/techniques/T1056/", + "subtechnique": [ + { + "id": "T1056.002", + "name": "GUI Input Capture", + "reference": "https://attack.mitre.org/techniques/T1056/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "38948d29-3d5d-42e3-8aec-be832aaaf8eb_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/397945f3-d39a-4e6f-8bcb-9656c2031438_106.json b/packages/security_detection_engine/kibana/security_rule/397945f3-d39a-4e6f-8bcb-9656c2031438_106.json new file mode 100644 index 00000000000..8239a6191f0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/397945f3-d39a-4e6f-8bcb-9656c2031438_106.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to establish persistence on an endpoint by installing a rogue Microsoft Outlook VBA Template.", + "false_positives": [ + "A legitimate VBA for Outlook is usually configured interactively via OUTLOOK.EXE." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Microsoft Outlook VBA", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.path : \"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Outlook\\\\VbaProject.OTM\"\n", + "references": [ + "https://www.mdsec.co.uk/2020/11/a-fresh-outlook-on-mail-based-persistence/", + "https://www.linkedin.com/pulse/outlook-backdoor-using-vba-samir-b-/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "397945f3-d39a-4e6f-8bcb-9656c2031438", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1137", + "name": "Office Application Startup", + "reference": "https://attack.mitre.org/techniques/T1137/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "397945f3-d39a-4e6f-8bcb-9656c2031438_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3a6001a0-0939-4bbe-86f4-47d8faeb7b97_7.json b/packages/security_detection_engine/kibana/security_rule/3a6001a0-0939-4bbe-86f4-47d8faeb7b97_7.json new file mode 100644 index 00000000000..72c72bd7fca --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3a6001a0-0939-4bbe-86f4-47d8faeb7b97_7.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies LSASS loading an unsigned or untrusted DLL. Windows Security Support Provider (SSP) DLLs are loaded into LSSAS process at system start. Once loaded into the LSA, SSP DLLs have access to encrypted and plaintext passwords that are stored in Windows, such as any logged-on user's Domain password or smart card PINs.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Module Loaded by LSASS", + "query": "library where host.os.type == \"windows\" and process.executable : \"?:\\\\Windows\\\\System32\\\\lsass.exe\" and\n not (dll.code_signature.subject_name :\n (\"Microsoft Windows\",\n \"Microsoft Corporation\",\n \"Microsoft Windows Publisher\",\n \"Microsoft Windows Software Compatibility Publisher\",\n \"Microsoft Windows Hardware Compatibility Publisher\",\n \"McAfee, Inc.\",\n \"SecMaker AB\",\n \"HID Global Corporation\",\n \"HID Global\",\n \"Apple Inc.\",\n \"Citrix Systems, Inc.\",\n \"Dell Inc\",\n \"Hewlett-Packard Company\",\n \"Symantec Corporation\",\n \"National Instruments Corporation\",\n \"DigitalPersona, Inc.\",\n \"Novell, Inc.\",\n \"gemalto\",\n \"EasyAntiCheat Oy\",\n \"Entrust Datacard Corporation\",\n \"AuriStor, Inc.\",\n \"LogMeIn, Inc.\",\n \"VMware, Inc.\",\n \"Istituto Poligrafico e Zecca dello Stato S.p.A.\",\n \"Nubeva Technologies Ltd\",\n \"Micro Focus (US), Inc.\",\n \"Yubico AB\",\n \"GEMALTO SA\",\n \"Secure Endpoints, Inc.\",\n \"Sophos Ltd\",\n \"Morphisec Information Security 2014 Ltd\",\n \"Entrust, Inc.\",\n \"Nubeva Technologies Ltd\",\n \"Micro Focus (US), Inc.\",\n \"F5 Networks Inc\",\n \"Bit4id\",\n \"Thales DIS CPL USA, Inc.\",\n \"Micro Focus International plc\",\n \"HYPR Corp\",\n \"Intel(R) Software Development Products\",\n \"PGP Corporation\",\n \"Parallels International GmbH\",\n \"FrontRange Solutions Deutschland GmbH\",\n \"SecureLink, Inc.\",\n \"Tidexa OU\",\n \"Amazon Web Services, Inc.\",\n \"SentryBay Limited\",\n \"Audinate Pty Ltd\",\n \"CyberArk Software Ltd.\",\n \"McAfeeSysPrep\",\n \"NVIDIA Corporation PE Sign v2016\",\n \"Trend Micro, Inc.\",\n \"Fortinet Technologies (Canada) Inc.\",\n \"Carbon Black, Inc.\") and\n dll.code_signature.status : (\"trusted\", \"errorExpired\", \"errorCode_endpoint*\", \"errorChaining\")) and\n\n not dll.hash.sha256 :\n (\"811a03a5d7c03802676d2613d741be690b3461022ea925eb6b2651a5be740a4c\",\n \"1181542d9cfd63fb00c76242567446513e6773ea37db6211545629ba2ecf26a1\",\n \"ed6e735aa6233ed262f50f67585949712f1622751035db256811b4088c214ce3\",\n \"26be2e4383728eebe191c0ab19706188f0e9592add2e0bf86b37442083ae5e12\",\n \"9367e78b84ef30cf38ab27776605f2645e52e3f6e93369c674972b668a444faa\",\n \"d46cc934765c5ecd53867070f540e8d6f7701e834831c51c2b0552aba871921b\",\n \"0f77a3826d7a5cd0533990be0269d951a88a5c277bc47cff94553330b715ec61\",\n \"4aca034d3d85a9e9127b5d7a10882c2ef4c3e0daa3329ae2ac1d0797398695fb\",\n \"86031e69914d9d33c34c2f4ac4ae523cef855254d411f88ac26684265c981d95\")\n", + "references": [ + "https://blog.xpnsec.com/exploring-mimikatz-part-2/", + "https://github.com/jas502n/mimikat_ssp" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.code_signature.status", + "type": "keyword" + }, + { + "ecs": true, + "name": "dll.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "dll.hash.sha256", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3a6001a0-0939-4bbe-86f4-47d8faeb7b97", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "3a6001a0-0939-4bbe-86f4-47d8faeb7b97_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3b47900d-e793-49e8-968f-c90dc3526aa1_109.json b/packages/security_detection_engine/kibana/security_rule/3b47900d-e793-49e8-968f-c90dc3526aa1_109.json new file mode 100644 index 00000000000..309a444bf97 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3b47900d-e793-49e8-968f-c90dc3526aa1_109.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious parent child process relationship with cmd.exe descending from an unusual process.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Parent Process for cmd.exe", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"cmd.exe\" and\n process.parent.name : (\"lsass.exe\",\n \"csrss.exe\",\n \"epad.exe\",\n \"regsvr32.exe\",\n \"dllhost.exe\",\n \"LogonUI.exe\",\n \"wermgr.exe\",\n \"spoolsv.exe\",\n \"jucheck.exe\",\n \"jusched.exe\",\n \"ctfmon.exe\",\n \"taskhostw.exe\",\n \"GoogleUpdate.exe\",\n \"sppsvc.exe\",\n \"sihost.exe\",\n \"slui.exe\",\n \"SIHClient.exe\",\n \"SearchIndexer.exe\",\n \"SearchProtocolHost.exe\",\n \"FlashPlayerUpdateService.exe\",\n \"WerFault.exe\",\n \"WUDFHost.exe\",\n \"unsecapp.exe\",\n \"wlanext.exe\" ) and\n not (process.parent.name : \"dllhost.exe\" and process.parent.args : \"/Processid:{CA8C87C1-929D-45BA-94DB-EF8E6CB346AD}\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3b47900d-e793-49e8-968f-c90dc3526aa1", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "3b47900d-e793-49e8-968f-c90dc3526aa1_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3bc6deaa-fbd4-433a-ae21-3e892f95624f_111.json b/packages/security_detection_engine/kibana/security_rule/3bc6deaa-fbd4-433a-ae21-3e892f95624f_111.json new file mode 100644 index 00000000000..802538f416d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3bc6deaa-fbd4-433a-ae21-3e892f95624f_111.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies a copy operation of the Active Directory Domain Database (ntds.dit) or Security Account Manager (SAM) files. Those files contain sensitive information including hashed domain and/or local credentials.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "NTDS or SAM Database File Copied", + "note": "## Triage and analysis\n\n### Investigating NTDS or SAM Database File Copied\n\nThe Active Directory Domain Database (ntds.dit) and Security Account Manager (SAM) files are critical components in Windows environments, containing sensitive information such as hashed domain and local credentials.\n\nThis rule identifies copy operations of these files using specific command-line tools, such as Cmd.Exe, PowerShell.EXE, XCOPY.EXE, and esentutl.exe. By monitoring for the presence of these tools and their associated arguments, the rule aims to detect potential credential access activities.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, command lines, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check for any recent changes in user account privileges or group memberships that may have allowed the unauthorized access.\n- Determine whether the file was potentially exfiltrated from the subject host.\n- Scope compromised credentials and disable the accounts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process's `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Look for the presence of relevant artifacts on other systems. Identify commonalities and differences between potentially compromised systems.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restore the affected system to its operational state by applying any necessary patches, updates, or configuration changes.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n ((?process.pe.original_file_name in (\"Cmd.Exe\", \"PowerShell.EXE\", \"XCOPY.EXE\") or process.name : (\"Cmd.Exe\", \"PowerShell.EXE\", \"XCOPY.EXE\")) and\n process.args : (\"copy\", \"xcopy\", \"Copy-Item\", \"move\", \"cp\", \"mv\")\n ) or\n ((?process.pe.original_file_name : \"esentutl.exe\" or process.name : \"esentutl.exe\") and process.args : (\"*/y*\", \"*/vss*\", \"*/d*\"))\n ) and\n process.command_line : (\"*\\\\ntds.dit*\", \"*\\\\config\\\\SAM*\", \"*\\\\*\\\\GLOBALROOT\\\\Device\\\\HarddiskVolumeShadowCopy*\\\\*\", \"*/system32/config/SAM*\", \"*\\\\User Data\\\\*\")\n", + "references": [ + "https://thedfirreport.com/2020/11/23/pysa-mespinoza-ransomware/", + "https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.002/T1003.002.md#atomic-test-3---esentutlexe-sam-copy", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "3bc6deaa-fbd4-433a-ae21-3e892f95624f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + }, + { + "id": "T1003.003", + "name": "NTDS", + "reference": "https://attack.mitre.org/techniques/T1003/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "3bc6deaa-fbd4-433a-ae21-3e892f95624f_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3d3aa8f9-12af-441f-9344-9f31053e316d_5.json b/packages/security_detection_engine/kibana/security_rule/3d3aa8f9-12af-441f-9344-9f31053e316d_5.json new file mode 100644 index 00000000000..68b7abcd2dd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3d3aa8f9-12af-441f-9344-9f31053e316d_5.json @@ -0,0 +1,114 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to Windows event log deletion activities. This is often done by attackers in an attempt to evade detection or destroy forensic evidence on a system.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Log Clear Capabilities", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"Clear-EventLog\" or\n \"Remove-EventLog\" or\n (\"Eventing.Reader.EventLogSession\" and \".ClearLog\") or\n (\"Diagnostics.EventLog\" and \".Clear\")\n ) and\n not file.path : (\n ?\\:\\\\\\\\*\\\\\\\\system32\\\\\\\\WindowsPowerShell\\\\\\\\v1.0\\\\\\\\Modules\\\\\\\\Microsoft.PowerShell.Management\\\\\\\\*.psd1\n ) and\n not powershell.file.script_block_text : (\n \"CmdletsToExport=@(\\\"Add-Content\\\"\"\n )\n", + "references": [ + "https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.eventlog.clear", + "https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.eventing.reader.eventlogsession.clearlog" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "3d3aa8f9-12af-441f-9344-9f31053e316d", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.001", + "name": "Clear Windows Event Logs", + "reference": "https://attack.mitre.org/techniques/T1070/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 5 + }, + "id": "3d3aa8f9-12af-441f-9344-9f31053e316d_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3e0561b5-3fac-4461-84cc-19163b9aaa61_3.json b/packages/security_detection_engine/kibana/security_rule/3e0561b5-3fac-4461-84cc-19163b9aaa61_3.json new file mode 100644 index 00000000000..2806dcf5f09 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3e0561b5-3fac-4461-84cc-19163b9aaa61_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a high count of destination IPs establishing an RDP connection with a single source IP. Once an attacker has gained access to one system, they might attempt to access more in the network in search of valuable assets, data, or further access points.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_rdp_distinct_count_destination_ip_for_source", + "name": "Spike in Number of Connections Made from a Source IP", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "3e0561b5-3fac-4461-84cc-19163b9aaa61", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "3e0561b5-3fac-4461-84cc-19163b9aaa61_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3e3d15c6-1509-479a-b125-21718372157e_106.json b/packages/security_detection_engine/kibana/security_rule/3e3d15c6-1509-479a-b125-21718372157e_106.json new file mode 100644 index 00000000000..48586fba481 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3e3d15c6-1509-479a-b125-21718372157e_106.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a suspicious child process of the Event Monitor Daemon (emond). Adversaries may abuse this service by writing a rule to execute commands when a defined event occurs, such as system start up or user authentication.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Emond Child Process", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.parent.name : \"emond\" and\n process.name : (\n \"bash\",\n \"dash\",\n \"sh\",\n \"tcsh\",\n \"csh\",\n \"zsh\",\n \"ksh\",\n \"fish\",\n \"Python\",\n \"python*\",\n \"perl*\",\n \"php*\",\n \"osascript\",\n \"pwsh\",\n \"curl\",\n \"wget\",\n \"cp\",\n \"mv\",\n \"touch\",\n \"echo\",\n \"base64\",\n \"launchctl\")\n", + "references": [ + "https://www.xorrior.com/emond-persistence/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3e3d15c6-1509-479a-b125-21718372157e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.014", + "name": "Emond", + "reference": "https://attack.mitre.org/techniques/T1546/014/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "3e3d15c6-1509-479a-b125-21718372157e_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3ecbdc9e-e4f2-43fa-8cca-63802125e582_109.json b/packages/security_detection_engine/kibana/security_rule/3ecbdc9e-e4f2-43fa-8cca-63802125e582_109.json new file mode 100644 index 00000000000..8e24ee5f3cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3ecbdc9e-e4f2-43fa-8cca-63802125e582_109.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a privilege escalation attempt via named pipe impersonation. An adversary may abuse this technique by utilizing a framework such Metasploit's meterpreter getsystem command.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via Named Pipe Impersonation", + "note": "## Triage and analysis\n\n### Investigating Privilege Escalation via Named Pipe Impersonation\n\nA named pipe is a type of inter-process communication (IPC) mechanism used in operating systems like Windows, which allows two or more processes to communicate with each other by sending and receiving data through a well-known point.\n\nAttackers can abuse named pipes to elevate their privileges by impersonating the security context in which they execute code. Metasploit, for example, creates a service and a random pipe, and then uses the service to connect to the pipe and impersonate the service security context, which is SYSTEM.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - If any suspicious processes were found, examine the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : (\"Cmd.Exe\", \"PowerShell.EXE\") or ?process.pe.original_file_name in (\"Cmd.Exe\", \"PowerShell.EXE\")) and\n process.args : \"echo\" and process.args : \">\" and process.args : \"\\\\\\\\.\\\\pipe\\\\*\"\n", + "references": [ + "https://www.ired.team/offensive-security/privilege-escalation/windows-namedpipes-privilege-escalation", + "https://www.cobaltstrike.com/blog/what-happens-when-i-type-getsystem/", + "https://redcanary.com/blog/getsystem-offsec/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "3ecbdc9e-e4f2-43fa-8cca-63802125e582", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "3ecbdc9e-e4f2-43fa-8cca-63802125e582_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3ed032b2-45d8-4406-bc79-7ad1eabb2c72_208.json b/packages/security_detection_engine/kibana/security_rule/3ed032b2-45d8-4406-bc79-7ad1eabb2c72_208.json new file mode 100644 index 00000000000..901de40cbb5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3ed032b2-45d8-4406-bc79-7ad1eabb2c72_208.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a process is created and immediately accessed from an unknown memory code region and by the same parent process. This may indicate a code injection attempt.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Process Creation CallTrace", + "note": "## Triage and analysis\n\n### Investigating Suspicious Process Creation CallTrace\n\nAttackers may inject code into child processes' memory to hide their actual activity, evade detection mechanisms, and decrease discoverability during forensics. This rule looks for a spawned process by Microsoft Office, scripting, and command line applications, followed by a process access event for an unknown memory region by the parent process, which can indicate a code injection attempt.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Create a memory dump of the child process for analysis.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id with maxspan=1m\n [process where host.os.type == \"windows\" and event.code == \"1\" and\n /* sysmon process creation */\n process.parent.name : (\"winword.exe\", \"excel.exe\", \"outlook.exe\", \"powerpnt.exe\", \"eqnedt32.exe\", \"fltldr.exe\",\n \"mspub.exe\", \"msaccess.exe\",\"cscript.exe\", \"wscript.exe\", \"rundll32.exe\", \"regsvr32.exe\",\n \"mshta.exe\", \"wmic.exe\", \"cmstp.exe\", \"msxsl.exe\") and\n\n /* noisy FP patterns */\n not (process.parent.name : \"EXCEL.EXE\" and process.executable : \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\Office*\\\\ADDINS\\\\*.exe\") and\n not (process.executable : \"?:\\\\Windows\\\\splwow64.exe\" and process.args in (\"8192\", \"12288\") and process.parent.name : (\"winword.exe\", \"excel.exe\", \"outlook.exe\", \"powerpnt.exe\")) and\n not (process.parent.name : \"rundll32.exe\" and process.parent.args : (\"?:\\\\WINDOWS\\\\Installer\\\\MSI*.tmp,zzzzInvokeManagedCustomActionOutOfProc\", \"--no-sandbox\")) and\n not (process.executable :\n (\"?:\\\\Program Files (x86)\\\\Microsoft\\\\EdgeWebView\\\\Application\\\\*\\\\msedgewebview2.exe\",\n \"?:\\\\Program Files\\\\Adobe\\\\Acrobat DC\\\\Acrobat\\\\Acrobat.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\DWWIN.EXE\") and\n process.parent.name : (\"winword.exe\", \"excel.exe\", \"outlook.exe\", \"powerpnt.exe\")) and\n not (process.parent.name : \"regsvr32.exe\" and process.parent.args : (\"?:\\\\Program Files\\\\*\", \"?:\\\\Program Files (x86)\\\\*\"))\n ] by process.parent.entity_id, process.entity_id\n [process where host.os.type == \"windows\" and event.code == \"10\" and\n /* Sysmon process access event from unknown module */\n winlog.event_data.CallTrace : \"*UNKNOWN*\"] by process.entity_id, winlog.event_data.TargetProcessGUID\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetProcessGUID", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3ed032b2-45d8-4406-bc79-7ad1eabb2c72", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "type": "eql", + "version": 208 + }, + "id": "3ed032b2-45d8-4406-bc79-7ad1eabb2c72_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3efee4f0-182a-40a8-a835-102c68a4175d_106.json b/packages/security_detection_engine/kibana/security_rule/3efee4f0-182a-40a8-a835-102c68a4175d_106.json new file mode 100644 index 00000000000..00bab701390 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3efee4f0-182a-40a8-a835-102c68a4175d_106.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a high number (25) of failed Microsoft 365 user authentication attempts from a single IP address within 30 minutes, which could be indicative of a password spraying attack. An adversary may attempt a password spraying attack to obtain unauthorized access to user accounts.", + "false_positives": [ + "Automated processes that attempt to authenticate using expired credentials and unbounded retries may lead to false positives." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Password Spraying of Microsoft 365 User Accounts", + "note": "", + "query": "event.dataset:o365.audit and event.provider:(Exchange or AzureActiveDirectory) and event.category:authentication and\nevent.action:(\"UserLoginFailed\" or \"PasswordLogonInitialAuthUsingPassword\")\n", + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "3efee4f0-182a-40a8-a835-102c68a4175d", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "high", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/" + } + ] + } + ], + "threshold": { + "field": [ + "source.ip" + ], + "value": 25 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 106 + }, + "id": "3efee4f0-182a-40a8-a835-102c68a4175d_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5.json b/packages/security_detection_engine/kibana/security_rule/3f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5.json new file mode 100644 index 00000000000..58320c817f2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for common command line flags leveraged by the Chisel client utility followed by a connection attempt. Chisel is a command-line utility used for creating and managing TCP and UDP tunnels, enabling port forwarding and secure communication between machines. Attackers can abuse the Chisel utility to establish covert communication channels, bypass network restrictions, and carry out malicious activities by creating tunnels that allow unauthorized access to internal systems.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Protocol Tunneling via Chisel Client", + "note": "## Triage and analysis\n\n### Investigating Potential Protocol Tunneling via Chisel Client\n\nAttackers can leverage `chisel` to clandestinely tunnel network communications and evade security measures, potentially gaining unauthorized access to sensitive systems.\n\nThis rule looks for a sequence of command line arguments that are consistent with `chisel` client tunneling behavior, followed by a network event by an uncommon process. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate protocol tunneling. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.args == \"client\" and process.args : (\"R*\", \"*:*\", \"*socks*\", \"*.*\") and process.args_count >= 4 and \n process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")]\n [network where host.os.type == \"linux\" and event.action == \"connection_attempted\" and event.type == \"start\" and \n destination.ip != null and destination.ip != \"127.0.0.1\" and destination.ip != \"::1\" and \n not process.name : (\n \"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\", \"java\", \"telnet\",\n \"ftp\", \"socat\", \"curl\", \"wget\", \"dpkg\", \"docker\", \"dockerd\", \"yum\", \"apt\", \"rpm\", \"dnf\", \"ssh\", \"sshd\")]\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform", + "https://book.hacktricks.xyz/generic-methodologies-and-resources/tunneling-and-port-forwarding" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "3f12325a-4cc6-410b-8d4c-9fbbeb744cfd", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "type": "eql", + "version": 5 + }, + "id": "3f12325a-4cc6-410b-8d4c-9fbbeb744cfd_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3f3f9fe2-d095-11ec-95dc-f661ea17fbce_110.json b/packages/security_detection_engine/kibana/security_rule/3f3f9fe2-d095-11ec-95dc-f661ea17fbce_110.json new file mode 100644 index 00000000000..ab13094f8fb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3f3f9fe2-d095-11ec-95dc-f661ea17fbce_110.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a binary by root in Linux shared memory directories: (/dev/shm/, /run/shm/, /var/run/, /var/lock/). This activity is to be considered highly abnormal and should be investigated. Threat actors have placed executables used for persistence on high-uptime servers in these directories as system backdoors.", + "false_positives": [ + "Directories /dev/shm and /run/shm are temporary file storage directories in Linux. They are intended to appear as a mounted file system, but uses virtual memory instead of a persistent storage device and thus are used for mounting file systems in legitimate purposes." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Binary Executed from Shared Memory Directory", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nuser.id == \"0\" and process.executable : (\"/dev/shm/*\", \"/run/shm/*\", \"/var/run/*\", \"/var/lock/*\") and\nnot process.executable : (\"/var/run/docker/*\", \"/var/run/utsns/*\", \"/var/run/s6/*\", \"/var/run/cloudera-scm-agent/*\", \n\"/var/run/argo/argoexec\") and not process.parent.command_line : \"/usr/bin/runc init\"\n", + "references": [ + "https://linuxsecurity.com/features/fileless-malware-on-linux", + "https://twitter.com/GossiTheDog/status/1522964028284411907", + "https://www.elastic.co/security-labs/a-peek-behind-the-bpfdoor" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "3f3f9fe2-d095-11ec-95dc-f661ea17fbce", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Threat: BPFDoor", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "3f3f9fe2-d095-11ec-95dc-f661ea17fbce_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3f4d7734-2151-4481-b394-09d7c6c91f75_3.json b/packages/security_detection_engine/kibana/security_rule/3f4d7734-2151-4481-b394-09d7c6c91f75_3.json new file mode 100644 index 00000000000..a9668233e62 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3f4d7734-2151-4481-b394-09d7c6c91f75_3.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of built-in tools attackers can use to discover running processes on an endpoint.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Process Discovery via Built-In Applications", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and process.name in (\n \"ps\", \"pstree\", \"htop\", \"pgrep\"\n) and \nnot process.parent.name in (\"amazon-ssm-agent\", \"snap\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "3f4d7734-2151-4481-b394-09d7c6c91f75", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + }, + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/", + "subtechnique": [ + { + "id": "T1518.001", + "name": "Security Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "3f4d7734-2151-4481-b394-09d7c6c91f75_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/3f4e2dba-828a-452a-af35-fe29c5e78969_3.json b/packages/security_detection_engine/kibana/security_rule/3f4e2dba-828a-452a-af35-fe29c5e78969_3.json new file mode 100644 index 00000000000..694071faabd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/3f4e2dba-828a-452a-af35-fe29c5e78969_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected an RDP session started at an usual time or weekday. An RDP session at an unusual time could be followed by other suspicious activities, so catching this is a good first step in detecting a larger attack.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_unusual_time_weekday_rdp_session_start", + "name": "Unusual Time or Day for an RDP Session", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "3f4e2dba-828a-452a-af35-fe29c5e78969", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "3f4e2dba-828a-452a-af35-fe29c5e78969_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/40155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3.json b/packages/security_detection_engine/kibana/security_rule/40155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3.json new file mode 100644 index 00000000000..6275b7a1af5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/40155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a suspicious Windows process. This process has been classified as malicious in two ways. It was predicted to be malicious by the ProblemChild supervised ML model, and it was found to be suspicious given that its user context is unusual and does not commonly manifest malicious activity,by an unsupervised ML model. Such a process may be an instance of suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_rare_process_by_user", + "name": "Unusual Process Spawned by a User", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "40155ee4-1e6a-4e4d-a63b-e8ba16980cfb", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "40155ee4-1e6a-4e4d-a63b-e8ba16980cfb_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/403ef0d3-8259-40c9-a5b6-d48354712e49_107.json b/packages/security_detection_engine/kibana/security_rule/403ef0d3-8259-40c9-a5b6-d48354712e49_107.json new file mode 100644 index 00000000000..852ad4d40c0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/403ef0d3-8259-40c9-a5b6-d48354712e49_107.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies processes modifying the services registry key directly, instead of through the expected Windows APIs. This could be an indication of an adversary attempting to stealthily persist through abnormal service creation or modification of an existing service.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Persistence via Services Registry", + "query": "registry where host.os.type == \"windows\" and event.type == \"change\" and\n registry.path : (\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ServiceDLL\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ImagePath\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ServiceDLL\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\ControlSet*\\\\Services\\\\*\\\\ImagePath\"\n ) and not registry.data.strings : (\n \"?:\\\\windows\\\\system32\\\\Drivers\\\\*.sys\",\n \"\\\\SystemRoot\\\\System32\\\\drivers\\\\*.sys\",\n \"\\\\??\\\\?:\\\\Windows\\\\system32\\\\Drivers\\\\*.SYS\",\n \"system32\\\\DRIVERS\\\\USBSTOR\") and\n not (process.name : \"procexp??.exe\" and registry.data.strings : \"?:\\\\*\\\\procexp*.sys\") and\n not process.executable : (\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\winsxs\\\\*\\\\TiWorker.exe\",\n \"?:\\\\Windows\\\\System32\\\\drvinst.exe\",\n \"?:\\\\Windows\\\\System32\\\\services.exe\",\n \"?:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\System32\\\\regsvr32.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "403ef0d3-8259-40c9-a5b6-d48354712e49", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "403ef0d3-8259-40c9-a5b6-d48354712e49_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/40ddbcc8-6561-44d9-afc8-eefdbfe0cccd_107.json b/packages/security_detection_engine/kibana/security_rule/40ddbcc8-6561-44d9-afc8-eefdbfe0cccd_107.json new file mode 100644 index 00000000000..a93133b9fa9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/40ddbcc8-6561-44d9-afc8-eefdbfe0cccd_107.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Detects file events involving kernel modules in modprobe configuration files, which may indicate unauthorized access or manipulation of critical kernel modules. Attackers may tamper with the modprobe files to load malicious or unauthorized kernel modules, potentially bypassing security measures, escalating privileges, or hiding their activities within the system.", + "from": "now-119m", + "history_window_start": "now-14d", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Modprobe File Event", + "new_terms_fields": [ + "host.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:file and event.action:\"opened-file\" and\nfile.path : (\"/etc/modprobe.conf\" or \"/etc/modprobe.d\" or /etc/modprobe.d/*) and not process.name:(\n cp or dpkg or dockerd or lynis or mkinitramfs or snapd or systemd-udevd or grep or borg or auditbeat or lspci or\n aide or modprobe or python*\n)\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "40ddbcc8-6561-44d9-afc8-eefdbfe0cccd", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n```\n-w /etc/modprobe.conf -p wa -k modprobe\n-w /etc/modprobe.d -p wa -k modprobe\n```\n\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "low", + "tags": [ + "Data Source: Auditd Manager", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 107 + }, + "id": "40ddbcc8-6561-44d9-afc8-eefdbfe0cccd_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/41284ba3-ed1a-4598-bfba-a97f75d9aba2_2.json b/packages/security_detection_engine/kibana/security_rule/41284ba3-ed1a-4598-bfba-a97f75d9aba2_2.json new file mode 100644 index 00000000000..07df7600a36 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/41284ba3-ed1a-4598-bfba-a97f75d9aba2_2.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "This rule monitors for inter-process communication via Unix sockets. Adversaries may attempt to communicate with local Unix sockets to enumerate application details, find vulnerabilities/configuration mistakes and potentially escalate privileges or set up malicious communication channels via Unix sockets for inter-process communication to attempt to evade detection.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unix Socket Connection", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and (\n (process.name in (\"nc\", \"ncat\", \"netcat\", \"nc.openbsd\") and \n process.args == \"-U\" and process.args : (\"/usr/local/*\", \"/run/*\", \"/var/run/*\")) or\n (process.name == \"socat\" and \n process.args == \"-\" and process.args : (\"UNIX-CLIENT:/usr/local/*\", \"UNIX-CLIENT:/run/*\", \"UNIX-CLIENT:/var/run/*\"))\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "41284ba3-ed1a-4598-bfba-a97f75d9aba2", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Rule Type: BBR", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "41284ba3-ed1a-4598-bfba-a97f75d9aba2_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/416697ae-e468-4093-a93d-59661fa619ec_110.json b/packages/security_detection_engine/kibana/security_rule/416697ae-e468-4093-a93d-59661fa619ec_110.json new file mode 100644 index 00000000000..105c0f9f3c9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/416697ae-e468-4093-a93d-59661fa619ec_110.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies unusual instances of Control Panel with suspicious keywords or paths in the process command line value. Adversaries may abuse control.exe to proxy execution of malicious code.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Control Panel Process with Unusual Arguments", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.executable : (\"?:\\\\Windows\\\\SysWOW64\\\\control.exe\", \"?:\\\\Windows\\\\System32\\\\control.exe\") and\n process.command_line :\n (\"*.jpg*\",\n \"*.png*\",\n \"*.gif*\",\n \"*.bmp*\",\n \"*.jpeg*\",\n \"*.TIFF*\",\n \"*.inf*\",\n \"*.cpl:*/*\",\n \"*../../..*\",\n \"*/AppData/Local/*\",\n \"*:\\\\Users\\\\Public\\\\*\",\n \"*\\\\AppData\\\\Local\\\\*\")\n", + "references": [ + "https://www.joesandbox.com/analysis/476188/1/html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "416697ae-e468-4093-a93d-59661fa619ec", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.002", + "name": "Control Panel", + "reference": "https://attack.mitre.org/techniques/T1218/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "416697ae-e468-4093-a93d-59661fa619ec_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/41b638a1-8ab6-4f8e-86d9-466317ef2db5_106.json b/packages/security_detection_engine/kibana/security_rule/41b638a1-8ab6-4f8e-86d9-466317ef2db5_106.json new file mode 100644 index 00000000000..714d671c8ef --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/41b638a1-8ab6-4f8e-86d9-466317ef2db5_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to create a local account that will be hidden from the macOS logon window. This may indicate an attempt to evade user attention while maintaining persistence using a separate local account.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Hidden Local User Account Creation", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:dscl and process.args:(IsHidden and create and (true or 1 or yes))\n", + "references": [ + "https://support.apple.com/en-us/HT203998" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "41b638a1-8ab6-4f8e-86d9-466317ef2db5", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "41b638a1-8ab6-4f8e-86d9-466317ef2db5_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/42eeee3d-947f-46d3-a14d-7036b962c266_9.json b/packages/security_detection_engine/kibana/security_rule/42eeee3d-947f-46d3-a14d-7036b962c266_9.json new file mode 100644 index 00000000000..c057e970864 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/42eeee3d-947f-46d3-a14d-7036b962c266_9.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies process creation with alternate credentials. Adversaries may create a new process with a different token to escalate privileges and bypass access controls.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Process Creation via Secondary Logon", + "query": "sequence by winlog.computer_name with maxspan=1m\n\n[authentication where event.action:\"logged-in\" and\n event.outcome == \"success\" and user.id : (\"S-1-5-21-*\", \"S-1-12-1-*\") and\n\n /* seclogon service */\n process.name == \"svchost.exe\" and\n winlog.event_data.LogonProcessName : \"seclogo*\" and source.ip == \"::1\" ] by winlog.event_data.TargetLogonId\n\n[process where event.type == \"start\"] by winlog.event_data.TargetLogonId\n", + "references": [ + "https://attack.mitre.org/techniques/T1134/002/" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.LogonProcessName", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetLogonId", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "42eeee3d-947f-46d3-a14d-7036b962c266", + "setup": "## Setup\n\nAudit events 4624 and 4688 are needed to trigger this rule.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/", + "subtechnique": [ + { + "id": "T1134.002", + "name": "Create Process with Token", + "reference": "https://attack.mitre.org/techniques/T1134/002/" + }, + { + "id": "T1134.003", + "name": "Make and Impersonate Token", + "reference": "https://attack.mitre.org/techniques/T1134/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 9 + }, + "id": "42eeee3d-947f-46d3-a14d-7036b962c266_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/43d6ec12-2b1c-47b5-8f35-e9de65551d3b_6.json b/packages/security_detection_engine/kibana/security_rule/43d6ec12-2b1c-47b5-8f35-e9de65551d3b_6.json new file mode 100644 index 00000000000..c2c07eb608b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/43d6ec12-2b1c-47b5-8f35-e9de65551d3b_6.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to add a user to a privileged group. Attackers may add users to a privileged group in order to establish persistence on a system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux User Added to Privileged Group", + "note": "## Triage and analysis\n\n### Investigating Linux User User Added to Privileged Group\n\nThe `usermod`, `adduser`, and `gpasswd` commands can be used to assign user accounts to new groups in Linux-based operating systems.\n\nAttackers may add users to a privileged group in order to escalate privileges or establish persistence on a system or domain.\n\nThis rule identifies the usages of `usermod`, `adduser` and `gpasswd` to assign user accounts to a privileged group.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Investigate whether the user was succesfully added to the privileged group.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Retrieve information about the privileged group to which the user was added.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific Group\",\"query\":\"SELECT * FROM groups WHERE groupname = {{group.name}}\"}}\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- Adding accounts to a group is a common administrative task, so there is a high chance of the activity being legitimate. Before investigating further, verify that this activity is not benign.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Delete the account that seems to be involved in malicious activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.args in (\n \"root\", \"admin\", \"wheel\", \"staff\", \"sudo\",\"disk\", \"video\", \"shadow\", \"lxc\", \"lxd\"\n) and\n(\n process.name in (\"usermod\", \"adduser\") or\n process.name == \"gpasswd\" and \n process.args in (\"-a\", \"--add\", \"-M\", \"--members\") \n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "43d6ec12-2b1c-47b5-8f35-e9de65551d3b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "43d6ec12-2b1c-47b5-8f35-e9de65551d3b_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/440e2db4-bc7f-4c96-a068-65b78da59bde_109.json b/packages/security_detection_engine/kibana/security_rule/440e2db4-bc7f-4c96-a068-65b78da59bde_109.json new file mode 100644 index 00000000000..98b600b4a5f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/440e2db4-bc7f-4c96-a068-65b78da59bde_109.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies files written to or modified in the startup folder by commonly abused processes. Adversaries may use this technique to maintain persistence.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Startup Persistence by a Suspicious Process", + "note": "## Triage and analysis\n\n### Investigating Startup Persistence by a Suspicious Process\n\nThe Windows Startup folder is a special folder in Windows. Programs added to this folder are executed during account logon, without user interaction, providing an excellent way for attackers to maintain persistence.\n\nThis rule monitors for commonly abused processes writing to the Startup folder locations.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- Administrators may add programs to this mechanism via command-line shells. Before the further investigation, verify that this activity is not benign.\n\n### Related rules\n\n- Suspicious Startup Shell Folder Modification - c8b150f0-0164-475b-a75e-74b47800a9ff\n- Persistent Scripts in the Startup Directory - f7c4dc5a-a58d-491d-9f14-9b66507121c0\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n user.domain != \"NT AUTHORITY\" and\n file.path : (\"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\*\",\n \"C:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\StartUp\\\\*\") and\n process.name : (\"cmd.exe\",\n \"powershell.exe\",\n \"wmic.exe\",\n \"mshta.exe\",\n \"pwsh.exe\",\n \"cscript.exe\",\n \"wscript.exe\",\n \"regsvr32.exe\",\n \"RegAsm.exe\",\n \"rundll32.exe\",\n \"EQNEDT32.EXE\",\n \"WINWORD.EXE\",\n \"EXCEL.EXE\",\n \"POWERPNT.EXE\",\n \"MSPUB.EXE\",\n \"MSACCESS.EXE\",\n \"iexplore.exe\",\n \"InstallUtil.exe\")\n", + "references": [ + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-1" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "440e2db4-bc7f-4c96-a068-65b78da59bde", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "440e2db4-bc7f-4c96-a068-65b78da59bde_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/44fc462c-1159-4fa8-b1b7-9b6296ab4f96_10.json b/packages/security_detection_engine/kibana/security_rule/44fc462c-1159-4fa8-b1b7-9b6296ab4f96_10.json new file mode 100644 index 00000000000..08eb2705e46 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/44fc462c-1159-4fa8-b1b7-9b6296ab4f96_10.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Windows Credential Manager allows you to create, view, or delete saved credentials for signing into websites, connected applications, and networks. An adversary may abuse this to list or dump credentials stored in the Credential Manager for saved usernames and passwords. This may also be performed in preparation of lateral movement.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Multiple Vault Web Credentials Read", + "query": "sequence by winlog.computer_name, winlog.process.pid with maxspan=1s\n\n /* 2 consecutive vault reads from same pid for web creds */\n\n [any where event.code : \"5382\" and\n (winlog.event_data.SchemaFriendlyName : \"Windows Web Password Credential\" and winlog.event_data.Resource : \"http*\") and\n not winlog.event_data.SubjectLogonId : \"0x3e7\" and \n not winlog.event_data.Resource : \"http://localhost/\"]\n\n [any where event.code : \"5382\" and\n (winlog.event_data.SchemaFriendlyName : \"Windows Web Password Credential\" and winlog.event_data.Resource : \"http*\") and\n not winlog.event_data.SubjectLogonId : \"0x3e7\" and \n not winlog.event_data.Resource : \"http://localhost/\"]\n", + "references": [ + "https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=5382", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Resource", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SchemaFriendlyName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectLogonId", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.process.pid", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "44fc462c-1159-4fa8-b1b7-9b6296ab4f96", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.004", + "name": "Windows Credential Manager", + "reference": "https://attack.mitre.org/techniques/T1555/004/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 10 + }, + "id": "44fc462c-1159-4fa8-b1b7-9b6296ab4f96_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/45d273fb-1dca-457d-9855-bcb302180c21_110.json b/packages/security_detection_engine/kibana/security_rule/45d273fb-1dca-457d-9855-bcb302180c21_110.json new file mode 100644 index 00000000000..af27c248616 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/45d273fb-1dca-457d-9855-bcb302180c21_110.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of WinRar or 7z to create an encrypted files. Adversaries will often compress and encrypt data in preparation for exfiltration.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Encrypting Files with WinRar or 7z", + "note": "## Triage and analysis\n\n### Investigating Encrypting Files with WinRar or 7z\n\nAttackers may compress and/or encrypt data collected before exfiltration. Compressing the data can help obfuscate the collected data and minimize the amount of data sent over the network. Encryption can be used to hide information that is being exfiltrated from detection or make exfiltration less apparent upon inspection by a defender.\n\nThese steps are usually done in preparation for exfiltration, meaning the attack may be in its final stages.\n\n#### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Retrieve the encrypted file.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check if the password used in the encryption was included in the command line.\n- Decrypt the `.rar`/`.zip` and check if the information is sensitive.\n- If the password is not available, and the format is `.zip` or the option used in WinRAR is not the `-hp`, list the file names included in the encrypted file.\n- Investigate if the file was transferred to an attacker-controlled server.\n\n### False positive analysis\n\n- Backup software can use these utilities. Check the `process.parent.executable` and `process.parent.command_line` fields to determine what triggered the encryption.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Prioritize cases that involve personally identifiable information (PII) or other classified data.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n (\n (\n process.name:\"rar.exe\" or ?process.code_signature.subject_name == \"win.rar GmbH\" or\n ?process.pe.original_file_name == \"Command line RAR\"\n ) and\n process.args == \"a\" and process.args : (\"-hp*\", \"-p*\", \"/hp*\", \"/p*\")\n ) or\n (\n ?process.pe.original_file_name in (\"7z.exe\", \"7za.exe\") and\n process.args == \"a\" and process.args : \"-p*\"\n )\n) and\n not process.parent.executable : (\n \"C:\\\\Program Files\\\\*.exe\",\n \"C:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\ManageEngine\\\\*\\\\jre\\\\bin\\\\java.exe\",\n \"?:\\\\Nox\\\\bin\\\\Nox.exe\"\n )\n", + "references": [ + "https://www.welivesecurity.com/2020/12/02/turla-crutch-keeping-back-door-open/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "45d273fb-1dca-457d-9855-bcb302180c21", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1560", + "name": "Archive Collected Data", + "reference": "https://attack.mitre.org/techniques/T1560/", + "subtechnique": [ + { + "id": "T1560.001", + "name": "Archive via Utility", + "reference": "https://attack.mitre.org/techniques/T1560/001/" + } + ] + }, + { + "id": "T1005", + "name": "Data from Local System", + "reference": "https://attack.mitre.org/techniques/T1005/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "45d273fb-1dca-457d-9855-bcb302180c21_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4682fd2c-cfae-47ed-a543-9bed37657aa6_108.json b/packages/security_detection_engine/kibana/security_rule/4682fd2c-cfae-47ed-a543-9bed37657aa6_108.json new file mode 100644 index 00000000000..17bd4da619a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4682fd2c-cfae-47ed-a543-9bed37657aa6_108.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempt to coerce a local NTLM authentication via HTTP using the Windows Printer Spooler service as a target. An adversary may use this primitive in combination with other techniques to elevate privileges on a compromised system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Local NTLM Relay via HTTP", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"rundll32.exe\" and\n\n /* Rundll32 WbeDav Client */\n process.args : (\"?:\\\\Windows\\\\System32\\\\davclnt.dll,DavSetCookie\", \"?:\\\\Windows\\\\SysWOW64\\\\davclnt.dll,DavSetCookie\") and\n\n /* Access to named pipe via http */\n process.args : (\"http*/print/pipe/*\", \"http*/pipe/spoolss\", \"http*/pipe/srvsvc\")\n", + "references": [ + "https://github.com/med0x2e/NTLMRelay2Self", + "https://github.com/topotam/PetitPotam", + "https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "4682fd2c-cfae-47ed-a543-9bed37657aa6", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1212", + "name": "Exploitation for Credential Access", + "reference": "https://attack.mitre.org/techniques/T1212/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "4682fd2c-cfae-47ed-a543-9bed37657aa6_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/474fd20e-14cc-49c5-8160-d9ab4ba16c8b_9.json b/packages/security_detection_engine/kibana/security_rule/474fd20e-14cc-49c5-8160-d9ab4ba16c8b_9.json new file mode 100644 index 00000000000..37422a0a311 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/474fd20e-14cc-49c5-8160-d9ab4ba16c8b_9.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Files that are placed in the /etc/init.d/ directory in Unix can be used to start custom applications, services, scripts or commands during start-up. Init.d has been mostly replaced in favor of Systemd. However, the \"systemd-sysv-generator\" can convert init.d files to service unit files that run at boot. Adversaries may add or alter files located in the /etc/init.d/ directory to execute malicious code upon boot in order to gain persistence on the system.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence Through init.d Detected", + "new_terms_fields": [ + "file.path", + "process.name", + "host.id" + ], + "note": "## Triage and analysis\n\n### Investigating Potential Persistence Through init.d Detected\n\nThe `/etc/init.d` directory is used in Linux systems to store the initialization scripts for various services and daemons that are executed during system startup and shutdown.\n\nAttackers can abuse files within the `/etc/init.d/` directory to run scripts, commands or malicious software every time a system is rebooted by converting an executable file into a service file through the `systemd-sysv-generator`. After conversion, a unit file is created within the `/run/systemd/generator.late/` directory.\n\nThis rule looks for the creation of new files within the `/etc/init.d/` directory. Executable files in these directories will automatically run at boot with root privileges.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n#### Possible Investigation Steps\n\n- Investigate the file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate whether any other files in the `/etc/init.d/` or `/run/systemd/generator.late/` directories have been altered.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (path LIKE '/etc/init.d/%' OR path LIKE '/run/systemd/generator.late/%')\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (path LIKE '/etc/init.d/%' OR path LIKE '/run/systemd/generator.late/%')\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate syslog through the `sudo cat /var/log/syslog | grep 'LSB'` command to find traces of the LSB header of the script (if present). If syslog is being ingested into Elasticsearch, the same can be accomplished through Kibana.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate whether this activity is related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses init.d for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Suspicious File Creation in /etc for Persistence - 1c84dd64-7e6c-4bad-ac73-a5014ee37042\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the maliciously created service/init.d files or restore it to the original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type :\"linux\" and event.action:(\"creation\" or \"file_create_event\" or \"rename\" or \"file_rename_event\") and \nfile.path : /etc/init.d/* and not (\n (process.name : (\"dpkg\" or \"dockerd\" or \"rpm\" or \"dnf\" or \"chef-client\" or \"apk\" or \"yum\" or \"rpm\" or\n \"vmis-launcher\" or \"exe\" or \"platform-python\" or \"executor\" or \"podman\")) or\n (file.extension : (\"swp\" or \"swpx\")) or\n (process.name:mv and file.name:*.dpkg-remove) or\n (process.name:sed and file.name:sed*) or\n (process.name:systemd and file.name:*.dpkg-new)\n)\n", + "references": [ + "https://www.intezer.com/blog/malware-analysis/hiddenwasp-malware-targeting-linux-systems/", + "https://pberba.github.io/security/2022/02/06/linux-threat-hunting-for-persistence-initialization-scripts-and-shell-configuration/#8-boot-or-logon-initialization-scripts-rc-scripts", + "https://www.cyberciti.biz/faq/how-to-enable-rc-local-shell-script-on-systemd-while-booting-linux-system/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "474fd20e-14cc-49c5-8160-d9ab4ba16c8b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 9 + }, + "id": "474fd20e-14cc-49c5-8160-d9ab4ba16c8b_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/47e22836-4a16-4b35-beee-98f6c4ee9bf2_110.json b/packages/security_detection_engine/kibana/security_rule/47e22836-4a16-4b35-beee-98f6c4ee9bf2_110.json new file mode 100644 index 00000000000..da27b5115f6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/47e22836-4a16-4b35-beee-98f6c4ee9bf2_110.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote access to the registry using an account with Backup Operators group membership. This may indicate an attempt to exfiltrate credentials by dumping the Security Account Manager (SAM) registry hive in preparation for credential access and privileges elevation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Remote Registry Access via SeBackupPrivilege", + "note": "## Triage and analysis\n\n### Investigating Suspicious Remote Registry Access via SeBackupPrivilege\n\nSeBackupPrivilege is a privilege that allows file content retrieval, designed to enable users to create backup copies of the system. Since it is impossible to make a backup of something you cannot read, this privilege comes at the cost of providing the user with full read access to the file system. This privilege must bypass any access control list (ACL) placed in the system.\n\nThis rule identifies remote access to the registry using an account with Backup Operators group membership. This may indicate an attempt to exfiltrate credentials by dumping the Security Account Manager (SAM) registry hive in preparation for credential access and privileges elevation.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the activities done by the subject user the login session. The field `winlog.event_data.SubjectLogonId` can be used to get this data.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate abnormal behaviors observed by the subject user such as network connections, registry or file modifications, and processes created.\n- Investigate if the registry file was retrieved or exfiltrated.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Limit or disable the involved user account to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by winlog.computer_name, winlog.event_data.SubjectLogonId with maxspan=1m\n [iam where event.action == \"logged-in-special\" and\n winlog.event_data.PrivilegeList : \"SeBackupPrivilege\" and\n\n /* excluding accounts with existing privileged access */\n not winlog.event_data.PrivilegeList : \"SeDebugPrivilege\"]\n [any where event.action == \"Detailed File Share\" and winlog.event_data.RelativeTargetName : \"winreg\"]\n", + "references": [ + "https://github.com/mpgn/BackupOperatorToDA", + "https://raw.githubusercontent.com/Wh04m1001/Random/main/BackupOperators.cpp", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.PrivilegeList", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.RelativeTargetName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectLogonId", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "47e22836-4a16-4b35-beee-98f6c4ee9bf2", + "setup": "## Setup\n\nThe 'Audit Detailed File Share' audit policy is required be configured (Success) on Domain Controllers and Sensitive Windows Servers.\nSteps to implement the logging policy with Advanced Audit Configuration:\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nObject Access >\nAudit Detailed File Share (Success)\n```\n\nThe 'Special Logon' audit policy must be configured (Success).\nSteps to implement the logging policy with Advanced Audit Configuration:\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nLogon/Logoff >\nSpecial Logon (Success)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + }, + { + "id": "T1003.004", + "name": "LSA Secrets", + "reference": "https://attack.mitre.org/techniques/T1003/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "type": "eql", + "version": 110 + }, + "id": "47e22836-4a16-4b35-beee-98f6c4ee9bf2_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/47f76567-d58a-4fed-b32b-21f571e28910_106.json b/packages/security_detection_engine/kibana/security_rule/47f76567-d58a-4fed-b32b-21f571e28910_106.json new file mode 100644 index 00000000000..052a12d8585 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/47f76567-d58a-4fed-b32b-21f571e28910_106.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects execution via the Apple script interpreter (osascript) followed by a network connection from the same process within a short time period. Adversaries may use malicious scripts for execution and command and control.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Apple Script Execution followed by Network Connection", + "query": "sequence by host.id, process.entity_id with maxspan=30s\n [process where host.os.type == \"macos\" and event.type == \"start\" and process.name == \"osascript\"]\n [network where host.os.type == \"macos\" and event.type != \"end\" and process.name == \"osascript\" and destination.ip != \"::1\" and\n not cidrmatch(destination.ip,\n \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\", \"192.0.0.8/32\",\n \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\", \"192.31.196.0/24\",\n \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\", \"192.175.48.0/24\",\n \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\", \"FF00::/8\")]\n", + "references": [ + "https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html", + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "47f76567-d58a-4fed-b32b-21f571e28910", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.002", + "name": "AppleScript", + "reference": "https://attack.mitre.org/techniques/T1059/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "47f76567-d58a-4fed-b32b-21f571e28910_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/483c4daf-b0c6-49e0-adf3-0bfa93231d6b_108.json b/packages/security_detection_engine/kibana/security_rule/483c4daf-b0c6-49e0-adf3-0bfa93231d6b_108.json new file mode 100644 index 00000000000..b0483a7b717 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/483c4daf-b0c6-49e0-adf3-0bfa93231d6b_108.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies suspicious processes being spawned by the Microsoft Exchange Server Unified Messaging (UM) service. This activity has been observed exploiting CVE-2021-26857.", + "false_positives": [ + "Legitimate processes may be spawned from the Microsoft Exchange Server Unified Messaging (UM) service. If known processes are causing false positives, they can be exempted from the rule." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Exchange Server UM Spawning Suspicious Processes", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\"UMService.exe\", \"UMWorkerProcess.exe\") and\n not process.executable :\n (\"?:\\\\Windows\\\\System32\\\\werfault.exe\",\n \"?:\\\\Windows\\\\System32\\\\wermgr.exe\",\n \"?:\\\\Program Files\\\\Microsoft\\\\Exchange Server\\\\V??\\\\Bin\\\\UMWorkerProcess.exe\",\n \"?:\\\\Program Files\\\\Microsoft\\\\Exchange Server\\\\Bin\\\\UMWorkerProcess.exe\",\n \"D:\\\\Exchange 2016\\\\Bin\\\\UMWorkerProcess.exe\",\n \"E:\\\\ExchangeServer\\\\Bin\\\\UMWorkerProcess.exe\",\n \"D:\\\\Exchange\\\\Bin\\\\UMWorkerProcess.exe\",\n \"D:\\\\Exchange Server\\\\Bin\\\\UMWorkerProcess.exe\",\n \"E:\\\\Exchange Server\\\\V15\\\\Bin\\\\UMWorkerProcess.exe\")\n", + "references": [ + "https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers", + "https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "483c4daf-b0c6-49e0-adf3-0bfa93231d6b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "483c4daf-b0c6-49e0-adf3-0bfa93231d6b_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/48819484-9826-4083-9eba-1da74cd0eaf2_4.json b/packages/security_detection_engine/kibana/security_rule/48819484-9826-4083-9eba-1da74cd0eaf2_4.json new file mode 100644 index 00000000000..5d6aeb11de5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/48819484-9826-4083-9eba-1da74cd0eaf2_4.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a Microsoft 365 Mailbox is accessed by a ClientAppId that was observed for the fist time during the last 10 days.", + "false_positives": [ + "User using a new mail client." + ], + "from": "now-30m", + "history_window_start": "now-10d", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Microsoft 365 Mail Access by ClientAppId", + "new_terms_fields": [ + "o365.audit.ClientAppId", + "user.id" + ], + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:MailItemsAccessed and event.outcome:success\n", + "references": [ + "https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-193a" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "48819484-9826-4083-9eba-1da74cd0eaf2", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 4 + }, + "id": "48819484-9826-4083-9eba-1da74cd0eaf2_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/48b3d2e3-f4e8-41e6-95e6-9b2091228db3_8.json b/packages/security_detection_engine/kibana/security_rule/48b3d2e3-f4e8-41e6-95e6-9b2091228db3_8.json new file mode 100644 index 00000000000..a4336de5236 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/48b3d2e3-f4e8-41e6-95e6-9b2091228db3_8.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies suspicious network traffic patterns associated with TCP reverse shell activity. This activity consists of a parent-child relationship where a network event is followed by the creation of a shell process. An attacker may establish a Linux TCP reverse shell to gain remote access to a target system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell", + "query": "sequence by host.id with maxspan=5s\n [network where event.type == \"start\" and event.action in (\"connection_attempted\", \"connection_accepted\") and \n process.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"socat\") and destination.ip != null and \n not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")] by process.entity_id\n [process where event.type == \"start\" and event.action in (\"exec\", \"fork\") and \n process.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and (\n (process.args : (\"-i\", \"-l\")) or (process.parent.name == \"socat\" and process.parent.args : \"*exec*\")\n )] by process.parent.entity_id\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "48b3d2e3-f4e8-41e6-95e6-9b2091228db3", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 8 + }, + "id": "48b3d2e3-f4e8-41e6-95e6-9b2091228db3_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/48b6edfc-079d-4907-b43c-baffa243270d_9.json b/packages/security_detection_engine/kibana/security_rule/48b6edfc-079d-4907-b43c-baffa243270d_9.json new file mode 100644 index 00000000000..71351da26d4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/48b6edfc-079d-4907-b43c-baffa243270d_9.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple consecutive logon failures from the same source address and within a short time interval. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to accounts.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.security*", + "logs-windows.forwarded*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Multiple Logon Failure from the same Source Address", + "note": "## Triage and analysis\n\n### Investigating Multiple Logon Failure from the same Source Address\n\nAdversaries with no prior knowledge of legitimate credentials within the system or environment may guess passwords to attempt access to accounts. Without knowledge of the password for an account, an adversary may opt to guess the password using a repetitive or iterative mechanism systematically. More details can be found [here](https://attack.mitre.org/techniques/T1110/001/).\n\nThis rule identifies potential password guessing/brute force activity from a single address.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the logon failure reason code and the targeted user names.\n - Prioritize the investigation if the account is critical or has administrative privileges over the domain.\n- Investigate the source IP address of the failed Network Logon attempts.\n - Identify whether these attempts are coming from the internet or are internal.\n- Investigate other alerts associated with the involved users and source host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n- Check whether the involved credentials are used in automation or scheduled tasks.\n- If this activity is suspicious, contact the account owner and confirm whether they are aware of it.\n- Examine the source host for derived artifacts that indicate compromise:\n - Observe and collect information about the following activities in the alert source host:\n - Attempts to contact external domains and addresses.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the host which is the source of this activity\n\n### False positive analysis\n\n- Understand the context of the authentications by contacting the asset owners. This activity can be related to a new or existing automation or business process that is in a failing state.\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Domain trust relationship issues.\n- Infrastructure or availability issues.\n\n### Related rules\n\n- Multiple Logon Failure Followed by Logon Success - 4e85dc8a-3e41-40d8-bc28-91af7ac6cf60\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the source host to prevent further post-compromise behavior.\n- If the asset is exposed to the internet with RDP or other remote services available, take the necessary measures to restrict access to the asset. If not possible, limit the access via the firewall to only the needed IP addresses. Also, ensure the system uses robust authentication mechanisms and is patched regularly.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by winlog.computer_name, source.ip with maxspan=10s\n [authentication where event.action == \"logon-failed\" and\n /* event 4625 need to be logged */\n winlog.logon.type : \"Network\" and\n source.ip != null and source.ip != \"127.0.0.1\" and source.ip != \"::1\" and\n not user.name : (\"ANONYMOUS LOGON\", \"-\", \"*$\") and not user.domain == \"NT AUTHORITY\" and\n\n /*\n noisy failure status codes often associated to authentication misconfiguration :\n 0xC000015B - The user has not been granted the requested logon type (also called the logon right) at this machine.\n 0XC000005E\t- There are currently no logon servers available to service the logon request.\n 0XC0000133\t- Clocks between DC and other computer too far out of sync.\n 0XC0000192\tAn attempt was made to logon, but the Netlogon service was not started.\n */\n not winlog.event_data.Status : (\"0xC000015B\", \"0XC000005E\", \"0XC0000133\", \"0XC0000192\")] with runs=10\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4625", + "https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=4624", + "https://social.technet.microsoft.com/Forums/ie/en-US/c82ac4f3-a235-472c-9fd3-53aa646cfcfd/network-information-missing-in-event-id-4624?forum=winserversecurity", + "https://serverfault.com/questions/379092/remote-desktop-failed-logon-event-4625-not-logging-ip-address-on-2008-terminal-s/403638#403638" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Status", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.logon.type", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "48b6edfc-079d-4907-b43c-baffa243270d", + "setup": "## Setup\n\n- In some cases the source network address in Windows events 4625/4624 is not populated due to Microsoft logging limitations (examples in the references links). This edge case will break the rule condition and it won't trigger an alert.\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 9 + }, + "id": "48b6edfc-079d-4907-b43c-baffa243270d_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/48d7f54d-c29e-4430-93a9-9db6b5892270_107.json b/packages/security_detection_engine/kibana/security_rule/48d7f54d-c29e-4430-93a9-9db6b5892270_107.json new file mode 100644 index 00000000000..1d265d25b51 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/48d7f54d-c29e-4430-93a9-9db6b5892270_107.json @@ -0,0 +1,84 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a child process is spawned by the screensaver engine process, which is consistent with an attacker's malicious payload being executed after the screensaver activated on the endpoint. An adversary can maintain persistence on a macOS endpoint by creating a malicious screensaver (.saver) file and configuring the screensaver plist file to execute code each time the screensaver is activated.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unexpected Child Process of macOS Screensaver Engine", + "note": "## Triage and analysis\n\n- Analyze the descendant processes of the ScreenSaverEngine process for malicious code and suspicious behavior such\nas a download of a payload from a server.\n- Review the installed and activated screensaver on the host. Triage the screensaver (.saver) file that was triggered to\nidentify whether the file is malicious or not.\n", + "query": "process where host.os.type == \"macos\" and event.type == \"start\" and process.parent.name == \"ScreenSaverEngine\"\n", + "references": [ + "https://posts.specterops.io/saving-your-access-d562bf5bf90b", + "https://github.com/D00MFist/PersistentJXA" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "48d7f54d-c29e-4430-93a9-9db6b5892270", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.002", + "name": "Screensaver", + "reference": "https://attack.mitre.org/techniques/T1546/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "48d7f54d-c29e-4430-93a9-9db6b5892270_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/48ec9452-e1fd-4513-a376-10a1a26d2c83_106.json b/packages/security_detection_engine/kibana/security_rule/48ec9452-e1fd-4513-a376-10a1a26d2c83_106.json new file mode 100644 index 00000000000..87ad75297c7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/48ec9452-e1fd-4513-a376-10a1a26d2c83_106.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of the default configuration for periodic tasks. Adversaries may abuse periodic tasks to execute malicious code or maintain persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence via Periodic Tasks", + "query": "event.category:file and host.os.type:macos and not event.type:\"deletion\" and\n file.path:(/private/etc/periodic/* or /private/etc/defaults/periodic.conf or /private/etc/periodic.conf)\n", + "references": [ + "https://opensource.apple.com/source/crontabs/crontabs-13/private/etc/defaults/periodic.conf.auto.html", + "https://www.oreilly.com/library/view/mac-os-x/0596003706/re328.html", + "https://github.com/D00MFist/PersistentJXA/blob/master/PeriodicPersist.js" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "48ec9452-e1fd-4513-a376-10a1a26d2c83", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "48ec9452-e1fd-4513-a376-10a1a26d2c83_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/494ebba4-ecb7-4be4-8c6f-654c686549ad_6.json b/packages/security_detection_engine/kibana/security_rule/494ebba4-ecb7-4be4-8c6f-654c686549ad_6.json new file mode 100644 index 00000000000..de6bf70a3f4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/494ebba4-ecb7-4be4-8c6f-654c686549ad_6.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the attempt to create a new backdoor user by setting the user's UID to 0. Attackers may alter a user's UID to 0 to establish persistence on a system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Backdoor User Account Creation", + "note": "## Triage and analysis\n\n### Investigating Potential Linux Backdoor User Account Creation\n\nThe `usermod` command is used to modify user account attributes and settings in Linux-based operating systems.\n\nAttackers may create new accounts with a UID of 0 to maintain root access to target systems without leveraging the root user account.\n\nThis rule identifies the usage of the `usermod` command to set a user's UID to 0, indicating that the user becomes a root account. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n- Investigate the user account that got assigned a uid of 0, and analyze its corresponding attributes.\n - !{osquery{\"label\":\"Osquery - Retrieve User Accounts with a UID of 0\",\"query\":\"SELECT description, gid, gid_signed, shell, uid, uid_signed, username FROM users WHERE username != 'root' AND uid LIKE '0'\"}}\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Identify if the account was added to privileged groups or assigned special privileges after creation.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific Group\",\"query\":\"SELECT * FROM groups WHERE groupname = {{group.name}}\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Delete the created account.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"usermod\" and process.args : \"-u\" and process.args : \"0\" and process.args : \"-o\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "494ebba4-ecb7-4be4-8c6f-654c686549ad", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "494ebba4-ecb7-4be4-8c6f-654c686549ad_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4a99ac6f-9a54-4ba5-a64f-6eb65695841b_5.json b/packages/security_detection_engine/kibana/security_rule/4a99ac6f-9a54-4ba5-a64f-6eb65695841b_5.json new file mode 100644 index 00000000000..aff4c58545e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4a99ac6f-9a54-4ba5-a64f-6eb65695841b_5.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of the \"chown\" and \"chmod\" commands with command line flags that could indicate a wildcard injection attack. Linux wildcard injection is a type of security vulnerability where attackers manipulate commands or input containing wildcards (e.g., *, ?, []) to execute unintended operations or access sensitive data by tricking the system into interpreting the wildcard characters in unexpected ways.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Unauthorized Access via Wildcard Injection Detected", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\"chown\", \"chmod\") and process.args == \"-R\" and process.args : \"--reference=*\"\n", + "references": [ + "https://www.exploit-db.com/papers/33930" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "4a99ac6f-9a54-4ba5-a64f-6eb65695841b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.008", + "name": "/etc/passwd and /etc/shadow", + "reference": "https://attack.mitre.org/techniques/T1003/008/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "4a99ac6f-9a54-4ba5-a64f-6eb65695841b_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4b438734-3793-4fda-bd42-ceeada0be8f9_109.json b/packages/security_detection_engine/kibana/security_rule/4b438734-3793-4fda-bd42-ceeada0be8f9_109.json new file mode 100644 index 00000000000..a902564c7c6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4b438734-3793-4fda-bd42-ceeada0be8f9_109.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the netsh.exe to disable or weaken the local firewall. Attackers will use this command line tool to disable the firewall during troubleshooting or to enable network mobility.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Disable Windows Firewall Rules via Netsh", + "note": "## Triage and analysis\n\n### Investigating Disable Windows Firewall Rules via Netsh\n\nThe Windows Defender Firewall is a native component which provides host-based, two-way network traffic filtering for a device, and blocks unauthorized network traffic flowing into or out of the local device.\n\nAttackers can disable the Windows firewall or its rules to enable lateral movement and command and control activity.\n\nThis rule identifies patterns related to disabling the Windows firewall or its rules using the `netsh.exe` utility.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the user to check if they are aware of the operation.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Check whether the user is an administrator and is legitimately performing troubleshooting.\n- In case of an allowed benign true positive (B-TP), assess adding rules to allow needed traffic and re-enable the firewall.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"netsh.exe\" and\n (\n (process.args : \"disable\" and process.args : \"firewall\" and process.args : \"set\") or\n (process.args : \"advfirewall\" and process.args : \"off\" and process.args : \"state\")\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "4b438734-3793-4fda-bd42-ceeada0be8f9", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.004", + "name": "Disable or Modify System Firewall", + "reference": "https://attack.mitre.org/techniques/T1562/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "4b438734-3793-4fda-bd42-ceeada0be8f9_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4.json b/packages/security_detection_engine/kibana/security_rule/4b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4.json new file mode 100644 index 00000000000..4bb18b56908 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of the ProxyChains utility. ProxyChains is a command-line tool that enables the routing of network connections through intermediary proxies, enhancing anonymity and enabling access to restricted resources. Attackers can exploit the ProxyChains utility to hide their true source IP address, evade detection, and perform malicious activities through a chain of proxy servers, potentially masking their identity and intentions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "ProxyChains Activity", + "note": "## Triage and analysis\n\n### Investigating ProxyChains Activity\n\nAttackers can leverage `proxychains` to obfuscate their origin and bypass network defenses by routing their malicious traffic through multiple intermediary servers.\n\nThis rule looks for processes spawned through `proxychains` by analyzing `proxychains` process execution.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate network obfuscation. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Suspicious Utility Launched via ProxyChains - 6ace94ba-f02c-4d55-9f53-87d99b6f9af4\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses this utility for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"proxychains\"\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "4b868f1f-15ff-4ba3-8c11-d5a7a6356d37", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "4b868f1f-15ff-4ba3-8c11-d5a7a6356d37_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4b95ecea-7225-4690-9938-2a2c0bad9c99_3.json b/packages/security_detection_engine/kibana/security_rule/4b95ecea-7225-4690-9938-2a2c0bad9c99_3.json new file mode 100644 index 00000000000..90028a29094 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4b95ecea-7225-4690-9938-2a2c0bad9c99_3.json @@ -0,0 +1,60 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a rare process writing data to an external device. Malicious actors often use benign-looking processes to mask their data exfiltration activities. The discovery of such a process that has no legitimate reason to write data to external devices can indicate exfiltration.", + "from": "now-2h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_rare_process_writing_to_external_device", + "name": "Unusual Process Writing Data to an External Device", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "4b95ecea-7225-4690-9938-2a2c0bad9c99", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the Elastic Defend integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1052", + "name": "Exfiltration Over Physical Medium", + "reference": "https://attack.mitre.org/techniques/T1052/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "4b95ecea-7225-4690-9938-2a2c0bad9c99_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4bd1c1af-79d4-4d37-9efa-6e0240640242_108.json b/packages/security_detection_engine/kibana/security_rule/4bd1c1af-79d4-4d37-9efa-6e0240640242_108.json new file mode 100644 index 00000000000..bc19b900a3e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4bd1c1af-79d4-4d37-9efa-6e0240640242_108.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies processes running from an Alternate Data Stream. This is uncommon for legitimate processes and sometimes done by adversaries to hide malware.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Process Execution Path - Alternate Data Stream", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.args : \"?:\\\\*:*\" and process.args_count == 1\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "4bd1c1af-79d4-4d37-9efa-6e0240640242", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.004", + "name": "NTFS File Attributes", + "reference": "https://attack.mitre.org/techniques/T1564/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "4bd1c1af-79d4-4d37-9efa-6e0240640242_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4c59cff1-b78a-41b8-a9f1-4231984d1fb6_9.json b/packages/security_detection_engine/kibana/security_rule/4c59cff1-b78a-41b8-a9f1-4231984d1fb6_9.json new file mode 100644 index 00000000000..92f0b4b6838 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4c59cff1-b78a-41b8-a9f1-4231984d1fb6_9.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects scripts that contain PowerShell functions, structures, or Windows API functions related to windows share enumeration activities. Attackers, mainly ransomware groups, commonly identify and inspect network shares, looking for critical information for encryption and/or exfiltration.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Share Enumeration Script", + "note": "## Triage and analysis\n\n### Investigating PowerShell Share Enumeration Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can use PowerShell to enumerate shares to search for sensitive data like documents, scripts, and other kinds of valuable data for encryption, exfiltration, and lateral movement.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Check for additional PowerShell and command line logs that indicate that imported functions were run.\n - Evaluate which information was potentially mapped and accessed by the attacker.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text:(\n \"Invoke-ShareFinder\" or\n \"Invoke-ShareFinderThreaded\" or\n (\n \"shi1_netname\" and\n \"shi1_remark\"\n ) or\n (\n \"NetShareEnum\" and\n \"NetApiBufferFree\"\n )\n ) and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://www.advintel.io/post/hunting-for-corporate-insurance-policies-indicators-of-ransom-exfiltrations", + "https://thedfirreport.com/2022/04/04/stolen-images-campaign-ends-in-conti-ransomware/", + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "4c59cff1-b78a-41b8-a9f1-4231984d1fb6", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be configured (Enable).\n\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Collection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1135", + "name": "Network Share Discovery", + "reference": "https://attack.mitre.org/techniques/T1135/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1039", + "name": "Data from Network Shared Drive", + "reference": "https://attack.mitre.org/techniques/T1039/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 9 + }, + "id": "4c59cff1-b78a-41b8-a9f1-4231984d1fb6_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6.json b/packages/security_detection_engine/kibana/security_rule/4d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6.json new file mode 100644 index 00000000000..ffaaca8c9bd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies the usage of kexec, helping to uncover unauthorized kernel replacements and potential compromise of the system's integrity. Kexec is a Linux feature that enables the loading and execution of a different kernel without going through the typical boot process. Malicious actors can abuse kexec to bypass security measures, escalate privileges, establish persistence or hide their activities by loading a malicious kernel, enabling them to tamper with the system's trusted state, allowing e.g. a VM Escape.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Kernel Load or Unload via Kexec Detected", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"kexec\" and process.args in (\"--exec\", \"-e\", \"--load\", \"-l\", \"--unload\", \"-u\")\n", + "references": [ + "https://www.crowdstrike.com/blog/venom-vulnerability-details/", + "https://www.makeuseof.com/what-is-venom-vulnerability/", + "https://madaidans-insecurities.github.io/guides/linux-hardening.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "4d4c35f4-414e-4d0c-bb7e-6db7c80a6957", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1611", + "name": "Escape to Host", + "reference": "https://attack.mitre.org/techniques/T1611/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1601", + "name": "Modify System Image", + "reference": "https://attack.mitre.org/techniques/T1601/", + "subtechnique": [ + { + "id": "T1601.001", + "name": "Patch System Image", + "reference": "https://attack.mitre.org/techniques/T1601/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "4d4c35f4-414e-4d0c-bb7e-6db7c80a6957_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4da13d6e-904f-4636-81d8-6ab14b4e6ae9_106.json b/packages/security_detection_engine/kibana/security_rule/4da13d6e-904f-4636-81d8-6ab14b4e6ae9_106.json new file mode 100644 index 00000000000..be7b0b176f9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4da13d6e-904f-4636-81d8-6ab14b4e6ae9_106.json @@ -0,0 +1,81 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to disable Gatekeeper on macOS. Gatekeeper is a security feature that's designed to ensure that only trusted software is run. Adversaries may attempt to disable Gatekeeper before executing malicious code.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Attempt to Disable Gatekeeper", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.args:(spctl and \"--master-disable\")\n", + "references": [ + "https://support.apple.com/en-us/HT202491", + "https://community.carbonblack.com/t5/Threat-Advisories-Documents/TAU-TIN-Shlayer-OSX/ta-p/68397" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "4da13d6e-904f-4636-81d8-6ab14b4e6ae9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "4da13d6e-904f-4636-81d8-6ab14b4e6ae9_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4de76544-f0e5-486a-8f84-eae0b6063cdc_111.json b/packages/security_detection_engine/kibana/security_rule/4de76544-f0e5-486a-8f84-eae0b6063cdc_111.json new file mode 100644 index 00000000000..27fbe89f929 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4de76544-f0e5-486a-8f84-eae0b6063cdc_111.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Ivan Ninichuck", + "Austin Songer" + ], + "description": "Identifies attempts to disable EventLog via the logman Windows utility, PowerShell, or auditpol. This is often done by attackers in an attempt to evade detection on a system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Disable Windows Event and Security Logs Using Built-in Tools", + "note": "## Triage and analysis\n\n### Investigating Disable Windows Event and Security Logs Using Built-in Tools\n\nWindows event logs are a fundamental data source for security monitoring, forensics, and incident response. Adversaries can tamper, clear, and delete this data to break SIEM detections, cover their tracks, and slow down incident response.\n\nThis rule looks for the usage of different utilities to disable the EventLog service or specific event logs.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - Verify if any other anti-forensics behaviors were observed.\n- Investigate the event logs prior to the action for suspicious behaviors that an attacker may be trying to cover up.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Re-enable affected logging components, services, and security monitoring.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n ((process.name:\"logman.exe\" or ?process.pe.original_file_name == \"Logman.exe\") and\n process.args : \"EventLog-*\" and process.args : (\"stop\", \"delete\")) or\n\n ((process.name : (\"pwsh.exe\", \"powershell.exe\", \"powershell_ise.exe\") or ?process.pe.original_file_name in\n (\"pwsh.exe\", \"powershell.exe\", \"powershell_ise.exe\")) and\n\tprocess.args : \"Set-Service\" and process.args: \"EventLog\" and process.args : \"Disabled\") or\n\n ((process.name:\"auditpol.exe\" or ?process.pe.original_file_name == \"AUDITPOL.EXE\") and process.args : \"/success:disable\")\n)\n", + "references": [ + "https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/logman", + "https://medium.com/palantir/tampering-with-windows-event-tracing-background-offense-and-defense-4be7ac62ac63" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "4de76544-f0e5-486a-8f84-eae0b6063cdc", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.001", + "name": "Clear Windows Event Logs", + "reference": "https://attack.mitre.org/techniques/T1070/001/" + } + ] + }, + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.002", + "name": "Disable Windows Event Logging", + "reference": "https://attack.mitre.org/techniques/T1562/002/" + }, + { + "id": "T1562.006", + "name": "Indicator Blocking", + "reference": "https://attack.mitre.org/techniques/T1562/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "4de76544-f0e5-486a-8f84-eae0b6063cdc_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4e85dc8a-3e41-40d8-bc28-91af7ac6cf60_10.json b/packages/security_detection_engine/kibana/security_rule/4e85dc8a-3e41-40d8-bc28-91af7ac6cf60_10.json new file mode 100644 index 00000000000..8e017e793de --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4e85dc8a-3e41-40d8-bc28-91af7ac6cf60_10.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple logon failures followed by a successful one from the same source address. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to accounts.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.security*", + "logs-windows.forwarded*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Multiple Logon Failure Followed by Logon Success", + "note": "## Triage and analysis\n\n### Investigating Multiple Logon Failure Followed by Logon Success\n\nAdversaries with no prior knowledge of legitimate credentials within the system or environment may guess passwords to attempt access to accounts. Without knowledge of the password for an account, an adversary may opt to guess the password using a repetitive or iterative mechanism systematically. More details can be found [here](https://attack.mitre.org/techniques/T1110/001/).\n\nThis rule identifies potential password guessing/brute force activity from a single address, followed by a successful logon, indicating that an attacker potentially successfully compromised the account.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the logon failure reason code and the targeted user name.\n - Prioritize the investigation if the account is critical or has administrative privileges over the domain.\n- Investigate the source IP address of the failed Network Logon attempts.\n - Identify whether these attempts are coming from the internet or are internal.\n- Investigate other alerts associated with the involved users and source host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n- Check whether the involved credentials are used in automation or scheduled tasks.\n- If this activity is suspicious, contact the account owner and confirm whether they are aware of it.\n- Examine the source host for derived artifacts that indicate compromise:\n - Observe and collect information about the following activities in the alert source host:\n - Attempts to contact external domains and addresses.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the host which is the source of this activity.\n\n### False positive analysis\n\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Domain trust relationship issues.\n- Infrastructure or availability issues.\n\n### Related rules\n\n- Multiple Logon Failure from the same Source Address - 48b6edfc-079d-4907-b43c-baffa243270d\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the source host to prevent further post-compromise behavior.\n- If the asset is exposed to the internet with RDP or other remote services available, take the necessary measures to restrict access to the asset. If not possible, limit the access via the firewall to only the needed IP addresses. Also, ensure the system uses robust authentication mechanisms and is patched regularly.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by winlog.computer_name, source.ip with maxspan=5s\n [authentication where event.action == \"logon-failed\" and\n /* event 4625 need to be logged */\n winlog.logon.type : \"Network\" and user.id != null and \n source.ip != null and source.ip != \"127.0.0.1\" and source.ip != \"::1\" and \n not winlog.event_data.TargetUserSid : \"S-1-0-0\" and not user.id : \"S-1-0-0\" and \n not user.name : (\"ANONYMOUS LOGON\", \"-\", \"*$\") and not user.domain == \"NT AUTHORITY\" and\n\n /* noisy failure status codes often associated to authentication misconfiguration */\n not winlog.event_data.Status : (\"0xC000015B\", \"0XC000005E\", \"0XC0000133\", \"0XC0000192\")] with runs=5\n [authentication where event.action == \"logged-in\" and\n /* event 4624 need to be logged */\n winlog.logon.type : \"Network\" and\n source.ip != null and source.ip != \"127.0.0.1\" and source.ip != \"::1\" and\n not user.name : (\"ANONYMOUS LOGON\", \"-\", \"*$\") and not user.domain == \"NT AUTHORITY\"]\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4625" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Status", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetUserSid", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.logon.type", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "4e85dc8a-3e41-40d8-bc28-91af7ac6cf60", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 10 + }, + "id": "4e85dc8a-3e41-40d8-bc28-91af7ac6cf60_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4ec47004-b34a-42e6-8003-376a123ea447_8.json b/packages/security_detection_engine/kibana/security_rule/4ec47004-b34a-42e6-8003-376a123ea447_8.json new file mode 100644 index 00000000000..44aba506413 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4ec47004-b34a-42e6-8003-376a123ea447_8.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Message of the day (MOTD) is the message that is presented to the user when a user connects to a Linux server via SSH or a serial connection. Linux systems contain several default MOTD files located in the \"/etc/update-motd.d/\" and \"/usr/lib/update-notifier/\" directories. These scripts run as the root user every time a user connects over SSH or a serial connection. Adversaries may create malicious MOTD files that grant them persistence onto the target every time a user connects to the system by executing a backdoor script or command. This rule detects the execution of potentially malicious processes through the MOTD utility.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Process Spawned from MOTD Detected", + "note": "## Triage and analysis\n\n### Investigating Suspicious Process Spawned from MOTD Detected\n\nThe message-of-the-day (MOTD) is used to display a customizable system-wide message or information to users upon login in Linux.\n\nAttackers can abuse message-of-the-day (motd) files to run scripts, commands or malicious software every time a user connects to a system over SSH or a serial connection, by creating a new file within the `/etc/update-motd.d/` or `/usr/lib/update-notifier/` directory. Files in these directories will automatically run with root privileges when they are made executable.\n\nThis rule identifies the execution of potentially malicious processes from a MOTD script, which is not likely to occur as default benign behavior. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the file that was created or modified from which the suspicious process was executed.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate whether any other files in the `/etc/update-motd.d/` or `/usr/lib/update-notifier/` directories have been altered.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (path LIKE '/etc/update-motd.d/%' OR path LIKE '/usr/lib/update-notifier/%')\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (path LIKE '/etc/update-motd.d/%' OR path LIKE '/usr/lib/update-notifier/%')\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services, and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### Related Rules\n\n- Potential Persistence Through MOTD File Creation Detected - 96d11d31-9a79-480f-8401-da28b194608f\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the MOTD files or restore them to the original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where event.type == \"start\" and event.action : (\"exec\", \"exec_event\") and\nprocess.parent.executable : (\"/etc/update-motd.d/*\", \"/usr/lib/update-notifier/*\") and (\n (process.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and (\n (process.args : (\"-i\", \"-l\")) or (process.parent.name == \"socat\" and process.parent.args : \"*exec*\"))) or\n (process.name : (\"nc\", \"ncat\", \"netcat\", \"nc.openbsd\") and process.args_count >= 3 and \n not process.args : (\"-*z*\", \"-*l*\")) or\n (process.name : \"python*\" and process.args : \"-c\" and process.args : (\n \"*import*pty*spawn*\", \"*import*subprocess*call*\"\n )) or\n (process.name : \"perl*\" and process.args : \"-e\" and process.args : \"*socket*\" and process.args : (\n \"*exec*\", \"*system*\"\n )) or\n (process.name : \"ruby*\" and process.args : (\"-e\", \"-rsocket\") and process.args : (\n \"*TCPSocket.new*\", \"*TCPSocket.open*\"\n )) or\n (process.name : \"lua*\" and process.args : \"-e\" and process.args : \"*socket.tcp*\" and process.args : (\n \"*io.popen*\", \"*os.execute*\"\n )) or\n (process.name : \"php*\" and process.args : \"-r\" and process.args : \"*fsockopen*\" and process.args : \"*/bin/*sh*\") or \n (process.name : (\"awk\", \"gawk\", \"mawk\", \"nawk\") and process.args : \"*/inet/tcp/*\") or \n (process.name in (\"openssl\", \"telnet\"))\n) and \nnot (\n (process.parent.args : \"--force\") or\n (process.args : (\"/usr/games/lolcat\", \"/usr/bin/screenfetch\")) or\n (process.parent.name == \"system-crash-notification\")\n)\n", + "references": [ + "https://pberba.github.io/security/2022/02/06/linux-threat-hunting-for-persistence-initialization-scripts-and-shell-configuration/#10-boot-or-logon-initialization-scripts-motd" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "4ec47004-b34a-42e6-8003-376a123ea447", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "4ec47004-b34a-42e6-8003-376a123ea447_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4ed493fc-d637-4a36-80ff-ac84937e5461_110.json b/packages/security_detection_engine/kibana/security_rule/4ed493fc-d637-4a36-80ff-ac84937e5461_110.json new file mode 100644 index 00000000000..60c1cadc910 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4ed493fc-d637-4a36-80ff-ac84937e5461_110.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution via MSSQL xp_cmdshell stored procedure. Malicious users may attempt to elevate their privileges by using xp_cmdshell, which is disabled by default, thus, it's important to review the context of it's use.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution via MSSQL xp_cmdshell Stored Procedure", + "note": "## Triage and analysis\n\n### Investigating Execution via MSSQL xp_cmdshell Stored Procedure\n\nMicrosoft SQL Server (MSSQL) has procedures meant to extend its functionality, the Extended Stored Procedures. These procedures are external functions written in C/C++; some provide interfaces for external programs. This is the case for xp_cmdshell, which spawns a Windows command shell and passes in a string for execution. Attackers can use this to execute commands on the system running the SQL server, commonly to escalate their privileges and establish persistence.\n\nThe xp_cmdshell procedure is disabled by default, but when used, it has the same security context as the MSSQL Server service account, which is often privileged.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the command line to determine if the command executed is potentially harmful or malicious.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n\n### False positive analysis\n\n- This mechanism can be used legitimately, but it brings inherent risk. The security team must monitor any activity of it. If recurrent tasks are being executed using this mechanism, consider adding exceptions \u2014 preferably with a full command line.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Ensure that SQL servers are not directly exposed to the internet. If there is a business justification for such, use an allowlist to allow only connections from known legitimate sources.\n- Disable the xp_cmdshell stored procedure.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"sqlservr.exe\" and \n (\n (process.name : \"cmd.exe\" and \n not process.args : (\"\\\\\\\\*\", \"diskfree\", \"rmdir\", \"mkdir\", \"dir\", \"del\", \"rename\", \"bcp\", \"*XMLNAMESPACES*\", \n \"?:\\\\MSSQL\\\\Backup\\\\Jobs\\\\sql_agent_backup_job.ps1\", \"K:\\\\MSSQL\\\\Backup\\\\msdb\", \"K:\\\\MSSQL\\\\Backup\\\\Logins\")) or \n \n (process.name : \"vpnbridge.exe\" or ?process.pe.original_file_name : \"vpnbridge.exe\") or \n\n (process.name : \"certutil.exe\" or ?process.pe.original_file_name == \"CertUtil.exe\") or \n\n (process.name : \"bitsadmin.exe\" or ?process.pe.original_file_name == \"bitsadmin.exe\")\n )\n", + "references": [ + "https://thedfirreport.com/2022/07/11/select-xmrig-from-sqlserver/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "4ed493fc-d637-4a36-80ff-ac84937e5461", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1505", + "name": "Server Software Component", + "reference": "https://attack.mitre.org/techniques/T1505/", + "subtechnique": [ + { + "id": "T1505.001", + "name": "SQL Stored Procedures", + "reference": "https://attack.mitre.org/techniques/T1505/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "4ed493fc-d637-4a36-80ff-ac84937e5461_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff_107.json b/packages/security_detection_engine/kibana/security_rule/4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff_107.json new file mode 100644 index 00000000000..c0d49a0b507 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff_107.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies scrobj.dll loaded into unusual Microsoft processes. This usually means a malicious scriptlet is being executed in the target process.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.library-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Script Object Execution", + "query": "any where host.os.type == \"windows\" and \n (event.category == \"library\" or (event.category == \"process\" and event.action : \"Image loaded*\")) and \n (?dll.name : \"scrobj.dll\" or ?file.name : \"scrobj.dll\") and \n process.executable : (\"?:\\\\Windows\\\\System32\\\\*.exe\", \"?:\\\\Windows\\\\SysWOW64\\\\*.exe\") and \n not process.executable : (\n \"?:\\\\Windows\\\\System32\\\\cscript.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\cscript.exe\",\n \"?:\\\\Windows\\\\system32\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\System32\\\\smartscreen.exe\",\n \"?:\\\\Windows\\\\system32\\\\taskhostw.exe\",\n \"?:\\\\windows\\\\system32\\\\inetsrv\\\\w3wp.exe\",\n \"?:\\\\windows\\\\SysWOW64\\\\inetsrv\\\\w3wp.exe\",\n \"?:\\\\Windows\\\\system32\\\\wscript.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\wscript.exe\",\n \"?:\\\\Windows\\\\System32\\\\mshta.exe\",\n \"?:\\\\Windows\\\\system32\\\\mobsync.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\mobsync.exe\",\n \"?:\\\\Windows\\\\System32\\\\cmd.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\cmd.exe\", \n \"?:\\\\Windows\\\\System32\\\\OpenWith.exe\",\n \"?:\\\\Windows\\\\System32\\\\wbem\\\\WMIADAP.exe\",\n \"?:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.010", + "name": "Regsvr32", + "reference": "https://attack.mitre.org/techniques/T1218/010/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "4ed678a9-3a4f-41fb-9fea-f85a6e0a0dff_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/4fe9d835-40e1-452d-8230-17c147cafad8_108.json b/packages/security_detection_engine/kibana/security_rule/4fe9d835-40e1-452d-8230-17c147cafad8_108.json new file mode 100644 index 00000000000..ac6819ac923 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/4fe9d835-40e1-452d-8230-17c147cafad8_108.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution from the Remote Desktop Protocol (RDP) shared mountpoint tsclient on the target host. This may indicate a lateral movement attempt.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution via TSClient Mountpoint", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.executable : \"\\\\Device\\\\Mup\\\\tsclient\\\\*.exe\"\n", + "references": [ + "https://posts.specterops.io/revisiting-remote-desktop-lateral-movement-8fb905cb46c3" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "4fe9d835-40e1-452d-8230-17c147cafad8", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.001", + "name": "Remote Desktop Protocol", + "reference": "https://attack.mitre.org/techniques/T1021/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "4fe9d835-40e1-452d-8230-17c147cafad8_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5124e65f-df97-4471-8dcb-8e3953b3ea97_2.json b/packages/security_detection_engine/kibana/security_rule/5124e65f-df97-4471-8dcb-8e3953b3ea97_2.json new file mode 100644 index 00000000000..64ad90ebbe7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5124e65f-df97-4471-8dcb-8e3953b3ea97_2.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identify activity related where adversaries can add the 'hidden' flag to files to hide them from the user in an attempt to evade detection.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Hidden Files and Directories via Hidden Flag", + "query": "file where event.type == \"creation\" and process.name == \"chflags\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "5124e65f-df97-4471-8dcb-8e3953b3ea97", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.001", + "name": "Hidden Files and Directories", + "reference": "https://attack.mitre.org/techniques/T1564/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "5124e65f-df97-4471-8dcb-8e3953b3ea97_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/513f0ffd-b317-4b9c-9494-92ce861f22c7_107.json b/packages/security_detection_engine/kibana/security_rule/513f0ffd-b317-4b9c-9494-92ce861f22c7_107.json new file mode 100644 index 00000000000..83e52543ef0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/513f0ffd-b317-4b9c-9494-92ce861f22c7_107.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to maintain persistence by creating registry keys using AppCert DLLs. AppCert DLLs are loaded by every process using the common API functions to create processes.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Registry Persistence via AppCert DLL", + "query": "registry where host.os.type == \"windows\" and\n/* uncomment once stable length(bytes_written_string) > 0 and */\n registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Session Manager\\\\AppCertDLLs\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Session Manager\\\\AppCertDLLs\\\\*\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "513f0ffd-b317-4b9c-9494-92ce861f22c7", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.009", + "name": "AppCert DLLs", + "reference": "https://attack.mitre.org/techniques/T1546/009/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.009", + "name": "AppCert DLLs", + "reference": "https://attack.mitre.org/techniques/T1546/009/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "513f0ffd-b317-4b9c-9494-92ce861f22c7_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/514121ce-c7b6-474a-8237-68ff71672379_105.json b/packages/security_detection_engine/kibana/security_rule/514121ce-c7b6-474a-8237-68ff71672379_105.json new file mode 100644 index 00000000000..578fd0049ba --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/514121ce-c7b6-474a-8237-68ff71672379_105.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a DomainKeys Identified Mail (DKIM) signing configuration is disabled in Microsoft 365. With DKIM in Microsoft 365, messages that are sent from Exchange Online will be cryptographically signed. This will allow the receiving email system to validate that the messages were generated by a server that the organization authorized and were not spoofed.", + "false_positives": [ + "Disabling a DKIM configuration may be done by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange DKIM Signing Configuration Disabled", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Set-DkimSigningConfig\" and o365.audit.Parameters.Enabled:False and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/set-dkimsigningconfig?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.Enabled", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "514121ce-c7b6-474a-8237-68ff71672379", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1556", + "name": "Modify Authentication Process", + "reference": "https://attack.mitre.org/techniques/T1556/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "514121ce-c7b6-474a-8237-68ff71672379_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/51ce96fb-9e52-4dad-b0ba-99b54440fc9a_107.json b/packages/security_detection_engine/kibana/security_rule/51ce96fb-9e52-4dad-b0ba-99b54440fc9a_107.json new file mode 100644 index 00000000000..2aee1217d44 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/51ce96fb-9e52-4dad-b0ba-99b54440fc9a_107.json @@ -0,0 +1,155 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of Distributed Component Object Model (DCOM) to run commands from a remote host, which are launched via the MMC20 Application COM Object. This behavior may indicate an attacker abusing a DCOM application to move laterally.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Incoming DCOM Lateral Movement with MMC", + "query": "sequence by host.id with maxspan=1m\n [network where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"mmc.exe\" and source.port >= 49152 and\n destination.port >= 49152 and source.ip != \"127.0.0.1\" and source.ip != \"::1\" and\n network.direction : (\"incoming\", \"ingress\") and network.transport == \"tcp\"\n ] by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"mmc.exe\"\n ] by process.parent.entity_id\n", + "references": [ + "https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 73, + "rule_id": "51ce96fb-9e52-4dad-b0ba-99b54440fc9a", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.003", + "name": "Distributed Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1021/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.014", + "name": "MMC", + "reference": "https://attack.mitre.org/techniques/T1218/014/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "51ce96fb-9e52-4dad-b0ba-99b54440fc9a_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/521fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7.json b/packages/security_detection_engine/kibana/security_rule/521fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7.json new file mode 100644 index 00000000000..f3065e58c2b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/521fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An RDP (Remote Desktop Protocol) brute force attack involves an attacker repeatedly attempting various username and password combinations to gain unauthorized access to a remote computer via RDP, and if successful, the potential impact can include unauthorized control over the compromised system, data theft, or the ability to launch further attacks within the network, jeopardizing the security and confidentiality of the targeted system and potentially compromising the entire network infrastructure. This rule identifies multiple consecutive authentication failures targeting a specific user account within a short time interval, followed by a successful authentication.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Successful Linux RDP Brute Force Attack Detected", + "query": "sequence by host.id, related.user with maxspan=5s\n [authentication where host.os.type == \"linux\" and event.action == \"authenticated\" and\n auditd.data.terminal : \"*rdp*\" and event.outcome == \"failure\"] with runs=10\n [authentication where host.os.type == \"linux\" and event.action == \"authenticated\" and\n auditd.data.terminal : \"*rdp*\" and event.outcome == \"success\"] | tail 1\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.terminal", + "type": "unknown" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "related.user", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "521fbe5c-a78d-4b6b-a323-f978b0e4c4c0", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Auditbeat\n- Auditd Manager\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule no additional audit rules are required to be added to the integration.\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "521fbe5c-a78d-4b6b-a323-f978b0e4c4c0_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/52376a86-ee86-4967-97ae-1a05f55816f0_112.json b/packages/security_detection_engine/kibana/security_rule/52376a86-ee86-4967-97ae-1a05f55816f0_112.json new file mode 100644 index 00000000000..e54a44481fe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/52376a86-ee86-4967-97ae-1a05f55816f0_112.json @@ -0,0 +1,138 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the abuse of a Linux binary to break out of a restricted shell or environment by spawning an interactive system shell. The activity of spawning a shell from a binary is not common behavior for a user or system administrator, and may indicate an attempt to evade detection, increase capabilities or enhance the stability of an adversary.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux Restricted Shell Breakout via Linux Binary(s)", + "note": "## Triage and analysis\n\n### Investigating Shell Evasion via Linux Utilities\nDetection alerts from this rule indicate that a Linux utility has been abused to breakout of restricted shells or\nenvironments by spawning an interactive system shell.\nHere are some possible avenues of investigation:\n- Examine the entry point to the host and user in action via the Analyse View.\n - Identify the session entry leader and session user\n- Examine the contents of session leading to the abuse via the Session View.\n - Examine the command execution pattern in the session, which may lead to suspricous activities\n- Examine the execution of commands in the spawned shell.\n - Identify imment threat to the system from the executed commands\n - Take necessary incident response actions to contain any malicious behviour caused via this execution.\n\n### Related rules\n\n- A malicious spawned shell can execute any of the possible MITTRE ATT&CK vectors mainly to impair defences.\n- Hence its adviced to enable defence evasion and privilige escalation rules accordingly in your environment\n\n### Response and remediation\n\nInitiate the incident response process based on the outcome of the triage.\n\n- If the triage releaved suspicious netwrok activity from the malicious spawned shell,\n - Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware execution via the maliciously spawned shell,\n - Search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- If the triage revelaed defence evasion for imparing defenses\n - Isolate the involved host to prevent further post-compromise behavior.\n - Identified the disabled security guard components on the host and take necessary steps in renebaling the same.\n - If any tools have been disbaled / uninstalled or config tampered work towards reenabling the same.\n- If the triage revelaed addition of persistence mechanism exploit like auto start scripts\n - Isolate further login to the systems that can initae auto start scripts.\n - Identify the auto start scripts and disable and remove the same from the systems\n- If the triage revealed data crawling or data export via remote copy\n - Investigate credential exposure on systems compromised / used / decoded by the attacker during the data crawling\n - Intiate compromised credential deactivation and credential rotation process for all exposed crednetials.\n - Investiagte if any IPR data was accessed during the data crawling and take appropriate actions.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and\n(\n /* launching shell from capsh */\n (process.name == \"capsh\" and process.args == \"--\") or\n \n /* launching shells from unusual parents or parent+arg combos */\n (process.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and (\n (process.parent.name : \"*awk\" and process.parent.args : \"BEGIN {system(*)}\") or\n (process.parent.name == \"git\" and process.parent.args : (\"*PAGER*\", \"!*sh\", \"exec *sh\") or \n process.args : (\"*PAGER*\", \"!*sh\", \"exec *sh\") and not process.name == \"ssh\" ) or\n (process.parent.name : (\"byebug\", \"ftp\", \"strace\", \"zip\", \"tar\") and \n (\n process.parent.args : \"BEGIN {system(*)}\" or\n (process.parent.args : (\"*PAGER*\", \"!*sh\", \"exec *sh\") or process.args : (\"*PAGER*\", \"!*sh\", \"exec *sh\")) or\n (\n (process.parent.args : \"exec=*sh\" or (process.parent.args : \"-I\" and process.parent.args : \"*sh\")) or\n (process.args : \"exec=*sh\" or (process.args : \"-I\" and process.args : \"*sh\"))\n )\n )\n ) or\n \n /* shells specified in parent args */\n /* nice rule is broken in 8.2 */\n (process.parent.args : \"*sh\" and\n (\n (process.parent.name == \"nice\") or\n (process.parent.name == \"cpulimit\" and process.parent.args == \"-f\") or\n (process.parent.name == \"find\" and process.parent.args == \".\" and process.parent.args == \"-exec\" and \n process.parent.args == \";\" and process.parent.args : \"/bin/*sh\") or\n (process.parent.name == \"flock\" and process.parent.args == \"-u\" and process.parent.args == \"/\")\n )\n )\n )) or\n\n /* shells specified in args */\n (process.args : \"*sh\" and (\n (process.parent.name == \"crash\" and process.parent.args == \"-h\") or\n (process.name == \"sensible-pager\" and process.parent.name in (\"apt\", \"apt-get\") and process.parent.args == \"changelog\")\n /* scope to include more sensible-pager invoked shells with different parent process to reduce noise and remove false positives */\n \n )) or\n (process.name == \"busybox\" and event.action == \"exec\" and process.args_count == 2 and process.args : \"*sh\" and not \n process.executable : \"/var/lib/docker/overlay2/*/merged/bin/busybox\" and not (process.parent.args == \"init\" and\n process.parent.args == \"runc\") and not process.parent.args in (\"ls-remote\", \"push\", \"fetch\") and not process.parent.name == \"mkinitramfs\") or\n (process.name == \"env\" and process.args_count == 2 and process.args : \"*sh\") or\n (process.parent.name in (\"vi\", \"vim\") and process.parent.args == \"-c\" and process.parent.args : \":!*sh\") or\n (process.parent.name in (\"c89\", \"c99\", \"gcc\") and process.parent.args : \"*sh,-s\" and process.parent.args == \"-wrapper\") or\n (process.parent.name == \"expect\" and process.parent.args == \"-c\" and process.parent.args : \"spawn *sh;interact\") or\n (process.parent.name == \"mysql\" and process.parent.args == \"-e\" and process.parent.args : \"\\\\!*sh\") or\n (process.parent.name == \"ssh\" and process.parent.args == \"-o\" and process.parent.args : \"ProxyCommand=;*sh 0<&2 1>&2\")\n)\n", + "references": [ + "https://gtfobins.github.io/gtfobins/apt/", + "https://gtfobins.github.io/gtfobins/apt-get/", + "https://gtfobins.github.io/gtfobins/nawk/", + "https://gtfobins.github.io/gtfobins/mawk/", + "https://gtfobins.github.io/gtfobins/awk/", + "https://gtfobins.github.io/gtfobins/gawk/", + "https://gtfobins.github.io/gtfobins/busybox/", + "https://gtfobins.github.io/gtfobins/c89/", + "https://gtfobins.github.io/gtfobins/c99/", + "https://gtfobins.github.io/gtfobins/cpulimit/", + "https://gtfobins.github.io/gtfobins/crash/", + "https://gtfobins.github.io/gtfobins/env/", + "https://gtfobins.github.io/gtfobins/expect/", + "https://gtfobins.github.io/gtfobins/find/", + "https://gtfobins.github.io/gtfobins/flock/", + "https://gtfobins.github.io/gtfobins/gcc/", + "https://gtfobins.github.io/gtfobins/mysql/", + "https://gtfobins.github.io/gtfobins/nice/", + "https://gtfobins.github.io/gtfobins/ssh/", + "https://gtfobins.github.io/gtfobins/vi/", + "https://gtfobins.github.io/gtfobins/vim/", + "https://gtfobins.github.io/gtfobins/capsh/", + "https://gtfobins.github.io/gtfobins/byebug/", + "https://gtfobins.github.io/gtfobins/git/", + "https://gtfobins.github.io/gtfobins/ftp/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "52376a86-ee86-4967-97ae-1a05f55816f0", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\nSession View uses process data collected by the Elastic Defend integration, but this data is not always collected by default. Session View is available on enterprise subscription for versions 8.3 and above.\n#### To confirm that Session View data is enabled:\n- Go to \u201cManage \u2192 Policies\u201d, and edit one or more of your Elastic Defend integration policies.\n- Select the\u201d Policy settings\u201d tab, then scroll down to the \u201cLinux event collection\u201d section near the bottom.\n- Check the box for \u201cProcess events\u201d, and turn on the \u201cInclude session data\u201d toggle.\n- If you want to include file and network alerts in Session View, check the boxes for \u201cNetwork and File events\u201d.\n- If you want to enable terminal output capture, turn on the \u201cCapture terminal output\u201d toggle.\nFor more information about the additional fields collected when this setting is enabled and the usage of Session View for Analysis refer to the [helper guide](https://www.elastic.co/guide/en/security/current/session-view.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 112 + }, + "id": "52376a86-ee86-4967-97ae-1a05f55816f0_112", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/52aaab7b-b51c-441a-89ce-4387b3aea886_108.json b/packages/security_detection_engine/kibana/security_rule/52aaab7b-b51c-441a-89ce-4387b3aea886_108.json new file mode 100644 index 00000000000..bebdda8462f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/52aaab7b-b51c-441a-89ce-4387b3aea886_108.json @@ -0,0 +1,133 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies unusual instances of rundll32.exe making outbound network connections. This may indicate adversarial Command and Control activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Network Connection via RunDLL32", + "note": "## Triage and analysis\n\n### Investigating Unusual Network Connection via RunDLL32\n\nRunDLL32 is a built-in Windows utility and also a vital component used by the operating system itself. The functionality provided by RunDLL32 to execute Dynamic Link Libraries (DLLs) is widely abused by attackers, because it makes it hard to differentiate malicious activity from normal operations.\n\nThis rule looks for external network connections established using RunDLL32 when the utility is being executed with no arguments, which can potentially indicate command and control activity.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the target host that RunDLL32 is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Identify the target computer and its role in the IT environment.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id with maxspan=1m\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"rundll32.exe\" and process.args_count == 1]\n [network where host.os.type == \"windows\" and process.name : \"rundll32.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\")]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml", + "https://redcanary.com/threat-detection-report/techniques/rundll32/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "52aaab7b-b51c-441a-89ce-4387b3aea886", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Command and Control", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/", + "subtechnique": [ + { + "id": "T1071.001", + "name": "Web Protocols", + "reference": "https://attack.mitre.org/techniques/T1071/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "52aaab7b-b51c-441a-89ce-4387b3aea886_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/530178da-92ea-43ce-94c2-8877a826783d_106.json b/packages/security_detection_engine/kibana/security_rule/530178da-92ea-43ce-94c2-8877a826783d_106.json new file mode 100644 index 00000000000..22d06ceee6e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/530178da-92ea-43ce-94c2-8877a826783d_106.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to create or modify a crontab via a process that is not crontab (i.e python, osascript, etc.). This activity should not be highly prevalent and could indicate the use of cron as a persistence mechanism by a threat actor.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious CronTab Creation or Modification", + "query": "file where host.os.type == \"macos\" and event.type != \"deletion\" and process.name != null and\n file.path : \"/private/var/at/tabs/*\" and not process.executable == \"/usr/bin/crontab\"\n", + "references": [ + "https://taomm.org/PDFs/vol1/CH%200x02%20Persistence.pdf", + "https://theevilbit.github.io/beyond/beyond_0004/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "530178da-92ea-43ce-94c2-8877a826783d", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "530178da-92ea-43ce-94c2-8877a826783d_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/53617418-17b4-4e9c-8a2c-8deb8086ca4b_8.json b/packages/security_detection_engine/kibana/security_rule/53617418-17b4-4e9c-8a2c-8deb8086ca4b_8.json new file mode 100644 index 00000000000..598fce90de9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/53617418-17b4-4e9c-8a2c-8deb8086ca4b_8.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for network connectivity to the internet from a previously unknown executable located in a suspicious directory to a previously unknown destination ip. An alert from this rule can indicate the presence of potentially malicious activity, such as the execution of unauthorized or suspicious processes attempting to establish connections to unknown or suspicious destinations such as a command and control server. Detecting and investigating such behavior can help identify and mitigate potential security threats, protecting the system and its data from potential compromise.", + "from": "now-59m", + "history_window_start": "now-14d", + "index": [ + "auditbeat-*", + "filebeat-*", + "packetbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Network Activity to the Internet by Previously Unknown Executable", + "new_terms_fields": [ + "host.id", + "destination.ip", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating Suspicious Network Activity to the Internet by Previously Unknown Executable\n\nAfter being installed, malware will often call out to its command and control server to receive further instructions by its operators.\n\nThis rule leverages the new terms rule type to detect previously unknown processes, initiating network connections to external IP-addresses. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate malicious behavior. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential malicious processes, reverse shells or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Network Activity Detected via cat - afd04601-12fc-4149-9b78-9c3f8fe45d39\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:linux and event.category:network and event.action:(connection_attempted or ipv4_connection_attempt_event) and \nprocess.executable:(\n (/etc/crontab or /etc/rc.local or ./* or /boot/* or /dev/shm/* or /etc/cron.*/* or /etc/init.d/* or /etc/rc*.d/* or \n /etc/update-motd.d/* or /home/*/.* or /run/* or /srv/* or /tmp/* or /usr/lib/update-notifier/* or /var/tmp/*\n ) and not (/tmp/newroot/* or /tmp/snap.rootfs*)\n ) and \nsource.ip:(10.0.0.0/8 or 127.0.0.0/8 or 172.16.0.0/12 or 192.168.0.0/16) and \nnot process.name:(\n apt or chrome or curl or dnf or dockerd or dpkg or firefox-bin or java or kite-update or kited or node or rpm or\n saml2aws or wget or yum or ansible* or aws* or php* or pip* or python* or steam* or terraform*\n) and \nnot destination.ip:(\n 10.0.0.0/8 or 100.64.0.0/10 or 127.0.0.0/8 or 169.254.0.0/16 or 172.16.0.0/12 or 192.0.0.0/24 or 192.0.0.0/29 or \n 192.0.0.10/32 or 192.0.0.170/32 or 192.0.0.171/32 or 192.0.0.8/32 or 192.0.0.9/32 or 192.0.2.0/24 or \n 192.168.0.0/16 or 192.175.48.0/24 or 192.31.196.0/24 or 192.52.193.0/24 or 192.88.99.0/24 or 198.18.0.0/15 or \n 198.51.100.0/24 or 203.0.113.0/24 or 224.0.0.0/4 or 240.0.0.0/4 or \"::1\" or \"FE80::/10\" or \"FF00::/8\" or 0.0.0.0\n) and\nnot destination.port:(22 or 80 or 443)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + } + ], + "risk_score": 21, + "rule_id": "53617418-17b4-4e9c-8a2c-8deb8086ca4b", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n- Filebeat\n- Packetbeat\n\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n### Packetbeat Setup\nPacketbeat is a real-time network packet analyzer that you can use for application monitoring, performance analytics, and threat detection. Packetbeat works by capturing the network traffic between your application servers, decoding the application layer protocols (HTTP, MySQL, Redis, and so on), correlating the requests with the responses, and recording the interesting fields for each transaction.\n\n#### The following steps should be executed in order to add the Packetbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/packetbeat/current/setup-repositories.html).\n- To run Packetbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/packetbeat/current/running-on-docker.html).\n- For quick start information for Packetbeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-installation-configuration.html).\n- For complete \u201cSetup and Run Packetbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/packetbeat/current/setting-up-and-running.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 8 + }, + "id": "53617418-17b4-4e9c-8a2c-8deb8086ca4b_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5397080f-34e5-449b-8e9c-4c8083d7ccc6_4.json b/packages/security_detection_engine/kibana/security_rule/5397080f-34e5-449b-8e9c-4c8083d7ccc6_4.json new file mode 100644 index 00000000000..355bae4aad4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5397080f-34e5-449b-8e9c-4c8083d7ccc6_4.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A statistical model has identified command-and-control (C2) beaconing activity. Beaconing can help attackers maintain stealthy communication with their C2 servers, receive instructions and payloads, exfiltrate data and maintain persistence in a network.", + "from": "now-1h", + "index": [ + "ml_beaconing.all" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Statistical Model Detected C2 Beaconing Activity", + "query": "beacon_stats.is_beaconing: true and\nnot process.name: (\"WaAppAgent.exe\" or \"metricbeat.exe\" or \"packetbeat.exe\" or \"WindowsAzureGuestAgent.exe\" or \"HealthService.exe\" or \"Widgets.exe\" or \"lsass.exe\" or \"msedgewebview2.exe\" or \"MsMpEng.exe\" or \"OUTLOOK.EXE\" or \"msteams.exe\" or \"FileSyncHelper.exe\" or \"SearchProtocolHost.exe\" or \"Creative Cloud.exe\" or \"ms-teams.exe\" or \"ms-teamsupdate.exe\" or \"curl.exe\" or \"rundll32.exe\" or \"MsSense.exe\" or \"wermgr.exe\" or \"java\" or \"olk.exe\" or \"iexplore.exe\" or \"NetworkManager\" or \"packetbeat\" or \"Ssms.exe\" or \"NisSrv.exe\" or \"gamingservices.exe\" or \"appidcertstorecheck.exe\" or \"POWERPNT.EXE\" or \"miiserver.exe\" or \"Grammarly.Desktop.exe\" or \"SnagitEditor.exe\" or \"CRWindowsClientService.exe\")\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/beaconing", + "https://www.elastic.co/security-labs/identifying-beaconing-malware-using-elastic" + ], + "related_integrations": [ + { + "package": "beaconing", + "version": "^1.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "beacon_stats.is_beaconing", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "5397080f-34e5-449b-8e9c-4c8083d7ccc6", + "setup": "## Setup\n\nThe rule requires the Network Beaconing Identification integration assets to be installed, as well as network logs collected by the Elastic Defend or Network Packet Capture integrations.\n\n### Network Beaconing Identification Setup\nThe Network Beaconing Identification integration consists of a statistical framework to identify C2 beaconing activity in network logs.\n\n#### Prerequisite Requirements:\n- Fleet is required for Network Beaconing Identification.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Network Beaconing Identification integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Network Beaconing Identification and select the integration to see more details about it.\n- Under Settings, click \"Install Network Beaconing Identification assets\" and follow the prompts to install the assets.\n", + "severity": "low", + "tags": [ + "Domain: Network", + "Use Case: C2 Beaconing Detection", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1102", + "name": "Web Service", + "reference": "https://attack.mitre.org/techniques/T1102/", + "subtechnique": [ + { + "id": "T1102.002", + "name": "Bidirectional Communication", + "reference": "https://attack.mitre.org/techniques/T1102/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "5397080f-34e5-449b-8e9c-4c8083d7ccc6_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/53a26770-9cbd-40c5-8b57-61d01a325e14_109.json b/packages/security_detection_engine/kibana/security_rule/53a26770-9cbd-40c5-8b57-61d01a325e14_109.json new file mode 100644 index 00000000000..4c23467e472 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/53a26770-9cbd-40c5-8b57-61d01a325e14_109.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious child processes of PDF reader applications. These child processes are often launched via exploitation of PDF applications or social engineering.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious PDF Reader Child Process", + "note": "## Triage and analysis\n\n### Investigating Suspicious PDF Reader Child Process\n\nPDF is a common file type used in corporate environments and most machines have software to handle these files. This creates a vector where attackers can exploit the engines and technology behind this class of software for initial access or privilege escalation.\n\nThis rule looks for commonly abused built-in utilities spawned by a PDF reader process, which is likely a malicious behavior.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve PDF documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\"AcroRd32.exe\",\n \"Acrobat.exe\",\n \"FoxitPhantomPDF.exe\",\n \"FoxitReader.exe\") and\n process.name : (\"arp.exe\", \"dsquery.exe\", \"dsget.exe\", \"gpresult.exe\", \"hostname.exe\", \"ipconfig.exe\", \"nbtstat.exe\",\n \"net.exe\", \"net1.exe\", \"netsh.exe\", \"netstat.exe\", \"nltest.exe\", \"ping.exe\", \"qprocess.exe\",\n \"quser.exe\", \"qwinsta.exe\", \"reg.exe\", \"sc.exe\", \"systeminfo.exe\", \"tasklist.exe\", \"tracert.exe\",\n \"whoami.exe\", \"bginfo.exe\", \"cdb.exe\", \"cmstp.exe\", \"csi.exe\", \"dnx.exe\", \"fsi.exe\", \"ieexec.exe\",\n \"iexpress.exe\", \"installutil.exe\", \"Microsoft.Workflow.Compiler.exe\", \"msbuild.exe\", \"mshta.exe\",\n \"msxsl.exe\", \"odbcconf.exe\", \"rcsi.exe\", \"regsvr32.exe\", \"xwizard.exe\", \"atbroker.exe\",\n \"forfiles.exe\", \"schtasks.exe\", \"regasm.exe\", \"regsvcs.exe\", \"cmd.exe\", \"cscript.exe\",\n \"powershell.exe\", \"pwsh.exe\", \"wmic.exe\", \"wscript.exe\", \"bitsadmin.exe\", \"certutil.exe\", \"ftp.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "53a26770-9cbd-40c5-8b57-61d01a325e14", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Initial Access", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1203", + "name": "Exploitation for Client Execution", + "reference": "https://attack.mitre.org/techniques/T1203/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "53a26770-9cbd-40c5-8b57-61d01a325e14_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/54902e45-3467-49a4-8abc-529f2c8cfb80_106.json b/packages/security_detection_engine/kibana/security_rule/54902e45-3467-49a4-8abc-529f2c8cfb80_106.json new file mode 100644 index 00000000000..38482fe15e2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/54902e45-3467-49a4-8abc-529f2c8cfb80_106.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects changes to registry persistence keys that are not commonly used or modified by legitimate programs. This could be an indication of an adversary's attempt to persist in a stealthy manner.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.registry*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Uncommon Registry Persistence Change", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n length(registry.data.strings) > 0 and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Runonce\\\\*\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\Load\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\Run\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\IconServiceLib\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\AppSetup\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Taskman\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Userinit\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\VmApplet\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\Shell\",\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logoff\\\\Script\",\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logon\\\\Script\",\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Shutdown\\\\Script\",\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Startup\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\Shell\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logoff\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logon\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Shutdown\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Startup\\\\Script\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Active Setup\\\\Installed Components\\\\*\\\\ShellComponent\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows CE Services\\\\AutoStartOnConnect\\\\MicrosoftActiveSync\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows CE Services\\\\AutoStartOnDisconnect\\\\MicrosoftActiveSync\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Ctf\\\\LangBarAddin\\\\*\\\\FilePath\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Exec\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Script\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Command Processor\\\\Autorun\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Ctf\\\\LangBarAddin\\\\*\\\\FilePath\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Exec\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Command Processor\\\\Autorun\",\n \"HKEY_USERS\\\\*\\\\Control Panel\\\\Desktop\\\\scrnsave.exe\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Image File Execution Options\\\\*\\\\VerifierDlls\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\GpExtensions\\\\*\\\\DllName\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\SafeBoot\\\\AlternateShell\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Terminal Server\\\\Wds\\\\rdpwd\\\\StartupPrograms\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Terminal Server\\\\WinStations\\\\RDP-Tcp\\\\InitialProgram\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Session Manager\\\\BootExecute\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Session Manager\\\\SetupExecute\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Session Manager\\\\Execute\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\Session Manager\\\\S0InitialCommand\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\ServiceControlManagerExtension\",\n \"HKLM\\\\SYSTEM\\\\ControlSet*\\\\Control\\\\BootVerificationProgram\\\\ImagePath\",\n \"HKLM\\\\SYSTEM\\\\Setup\\\\CmdLine\",\n \"HKEY_USERS\\\\*\\\\Environment\\\\UserInitMprLogonScript\") and\n\n not registry.data.strings : (\"C:\\\\Windows\\\\system32\\\\userinit.exe\", \"cmd.exe\", \"C:\\\\Program Files (x86)\\\\*.exe\",\n \"C:\\\\Program Files\\\\*.exe\") and\n not (process.name : \"rundll32.exe\" and registry.path : \"*\\\\Software\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Script\") and\n not process.executable : (\"C:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"C:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\",\n \"C:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Platform\\\\*\\\\MsMpEng.exe\",\n \"C:\\\\Program Files\\\\*.exe\",\n \"C:\\\\Program Files (x86)\\\\*.exe\")\n", + "references": [ + "https://www.microsoftpressstore.com/articles/article.aspx?p=2762082&seqNum=2" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "54902e45-3467-49a4-8abc-529f2c8cfb80", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + }, + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.002", + "name": "Screensaver", + "reference": "https://attack.mitre.org/techniques/T1546/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timeline_id": "3e47ef71-ebfc-4520-975c-cb27fc090799", + "timeline_title": "Comprehensive Registry Timeline", + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "54902e45-3467-49a4-8abc-529f2c8cfb80_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/54a81f68-5f2a-421e-8eed-f888278bb712_8.json b/packages/security_detection_engine/kibana/security_rule/54a81f68-5f2a-421e-8eed-f888278bb712_8.json new file mode 100644 index 00000000000..2d41733c615 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/54a81f68-5f2a-421e-8eed-f888278bb712_8.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the Exchange PowerShell cmdlet, New-MailBoxExportRequest, to export the contents of a primary mailbox or archive to a .pst file. Adversaries may target user email to collect sensitive information.", + "false_positives": [ + "Legitimate exchange system administration activity." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Exchange Mailbox Export via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Exchange Mailbox Export via PowerShell\n\nThe `New-MailBoxExportRequest` cmdlet is used to begin the process of exporting contents of a primary mailbox or archive to a .pst file. Note that this is done on a per-mailbox basis and this cmdlet is available only in on-premises Exchange.\nAttackers can abuse this functionality in preparation for exfiltrating contents, which is likely to contain sensitive and strategic data.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the export operation:\n - Identify the user account that performed the action and whether it should perform this kind of action.\n - Contact the account owner and confirm whether they are aware of this activity.\n - Check if this operation was approved and performed according to the organization's change management policy.\n - Retrieve the operation status and use the `Get-MailboxExportRequest` cmdlet to review previous requests.\n - By default, no group in Exchange has the privilege to import or export mailboxes. Investigate administrators that assigned the \"Mailbox Import Export\" privilege for abnormal activity.\n- Investigate if there is a significant quantity of export requests in the alert timeframe. This operation is done on a per-mailbox basis and can be part of a mass export.\n- If the operation was completed successfully:\n - Check if the file is on the path specified in the command.\n - Investigate if the file was compressed, archived, or retrieved by the attacker for exfiltration.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and it is done with proper approval.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If the involved host is not the Exchange server, isolate the host to prevent further post-compromise behavior.\n- Use the `Remove-MailboxExportRequest` cmdlet to remove fully or partially completed export requests.\n- Prioritize cases that involve personally identifiable information (PII) or other classified data.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Review the privileges of users with the \"Mailbox Import Export\" privilege to ensure that the least privilege principle is being followed.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : \"New-MailboxExportRequest\" and\n not (\n file.path : (\n ?\\:\\\\\\\\Users\\\\\\\\*\\\\\\\\AppData\\\\\\\\Roaming\\\\\\\\Microsoft\\\\\\\\Exchange\\\\\\\\RemotePowerShell\\\\\\\\* or\n ?\\:\\\\\\\\Users\\\\\\\\*\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\tmp_????????.???\\\\\\\\tmp_????????.???.ps?1* or\n ?\\:\\\\\\\\Windows\\\\\\\\TEMP\\\\\\\\tmp_????????.???\\\\\\\\tmp_????????.???.ps?1*\n ) and file.name:(*.psd1 or *.psm1)\n )\n", + "references": [ + "https://www.volexity.com/blog/2020/12/14/dark-halo-leverages-solarwinds-compromise-to-breach-organizations/", + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-mailboxexportrequest?view=exchange-ps", + "https://www.elastic.co/security-labs/siestagraph-new-implant-uncovered-in-asean-member-foreign-ministry" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "54a81f68-5f2a-421e-8eed-f888278bb712", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1005", + "name": "Data from Local System", + "reference": "https://attack.mitre.org/techniques/T1005/" + }, + { + "id": "T1114", + "name": "Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/", + "subtechnique": [ + { + "id": "T1114.001", + "name": "Local Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/001/" + }, + { + "id": "T1114.002", + "name": "Remote Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 8 + }, + "id": "54a81f68-5f2a-421e-8eed-f888278bb712_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/54c3d186-0461-4dc3-9b33-2dc5c7473936_108.json b/packages/security_detection_engine/kibana/security_rule/54c3d186-0461-4dc3-9b33-2dc5c7473936_108.json new file mode 100644 index 00000000000..075fd62321b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/54c3d186-0461-4dc3-9b33-2dc5c7473936_108.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the modification of the network logon provider registry. Adversaries may register a rogue network logon provider module for persistence and/or credential access via intercepting the authentication credentials in clear text during user logon.", + "false_positives": [ + "Authorized third party network logon providers." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Logon Provider Registry Modification", + "note": "## Triage and analysis\n\n### Investigating Network Logon Provider Registry Modification\n\nNetwork logon providers are components in Windows responsible for handling the authentication process during a network logon.\n\nThis rule identifies the modification of the network logon provider registry. Adversaries may register a rogue network logon provider module for persistence and/or credential access via intercepting the authentication credentials in plain text during user logon.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Examine the `registry.data.strings` field to identify the DLL registered.\n- Identify the process responsible for the registry operation and the file creation and investigate their process execution chains (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n - Investigate any abnormal behavior by the subject process, such as network connections, DLLs loaded, registry or file modifications, and any spawned child processes.\n- Retrieve the file and examine if it is signed with valid digital signatures from vendors that are supposed to implement this kind of software and approved to use in the environment. Check for prevalence in the environment and whether they are located in expected locations.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the executables of the processes using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process's `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n\n### False positive analysis\n\n- False Positives can include legitimate software installations or updates that modify the network logon provider registry. These modifications may be necessary for the proper functioning of the software and are not indicative of malicious activity.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and registry.data.strings : \"?*\" and\n registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\NetworkProvider\\\\ProviderPath\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\NetworkProvider\\\\ProviderPath\"\n ) and\n /* Excluding default NetworkProviders RDPNP, LanmanWorkstation and webclient. */\n not (\n user.id : \"S-1-5-18\" and\n registry.data.strings : (\n \"%SystemRoot%\\\\System32\\\\ntlanman.dll\",\n \"%SystemRoot%\\\\System32\\\\drprov.dll\",\n \"%SystemRoot%\\\\System32\\\\davclnt.dll\",\n \"%SystemRoot%\\\\System32\\\\vmhgfs.dll\",\n \"?:\\\\Program Files (x86)\\\\Citrix\\\\ICA Client\\\\x64\\\\pnsson.dll\",\n \"?:\\\\Program Files\\\\Dell\\\\SARemediation\\\\agent\\\\DellMgmtNP.dll\",\n \"?:\\\\Program Files (x86)\\\\CheckPoint\\\\Endpoint Connect\\\\\\\\epcgina.dll\"\n )\n )\n", + "references": [ + "https://github.com/gtworek/PSBits/tree/master/PasswordStealing/NPPSpy", + "https://docs.microsoft.com/en-us/windows/win32/api/npapi/nf-npapi-nplogonnotify" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "54c3d186-0461-4dc3-9b33-2dc5c7473936", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1556", + "name": "Modify Authentication Process", + "reference": "https://attack.mitre.org/techniques/T1556/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "54c3d186-0461-4dc3-9b33-2dc5c7473936_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/55c2bf58-2a39-4c58-a384-c8b1978153c2_108.json b/packages/security_detection_engine/kibana/security_rule/55c2bf58-2a39-4c58-a384-c8b1978153c2_108.json new file mode 100644 index 00000000000..526c8fec9a7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/55c2bf58-2a39-4c58-a384-c8b1978153c2_108.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a Windows service by an unusual client process. Services may be created with administrator privileges but are executed under SYSTEM privileges, so an adversary may also use a service to escalate privileges from administrator to SYSTEM.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Windows Service Installed via an Unusual Client", + "query": "event.action:\"service-installed\" and\n (winlog.event_data.ClientProcessId:\"0\" or winlog.event_data.ParentProcessId:\"0\") and\n not winlog.event_data.ServiceFileName : (\n \"C:\\\\Windows\\\\VeeamVssSupport\\\\VeeamGuestHelper.exe\" or\n \"%SystemRoot%\\\\system32\\\\Drivers\\\\Crowdstrike\\\\17706-CsInstallerService.exe\"\n )\n", + "references": [ + "https://www.x86matthew.com/view_post?id=create_svc_rpc", + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4697", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0100_windows_audit_security_system_extension.md" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.ClientProcessId", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ParentProcessId", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ServiceFileName", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "55c2bf58-2a39-4c58-a384-c8b1978153c2", + "setup": "## Setup\n\nThe 'Audit Security System Extension' logging policy must be configured for (Success)\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nSystem >\nAudit Security System Extension (Success)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "55c2bf58-2a39-4c58-a384-c8b1978153c2_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/55d551c6-333b-4665-ab7e-5d14a59715ce_108.json b/packages/security_detection_engine/kibana/security_rule/55d551c6-333b-4665-ab7e-5d14a59715ce_108.json new file mode 100644 index 00000000000..859a031bb47 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/55d551c6-333b-4665-ab7e-5d14a59715ce_108.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the SysInternals tool PsExec.exe making a network connection. This could be an indication of lateral movement.", + "false_positives": [ + "PsExec is a dual-use tool that can be used for benign or malicious activity. It's important to baseline your environment to determine the amount of noise to expect from this tool." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "PsExec Network Connection", + "note": "## Triage and analysis\n\n### Investigating PsExec Network Connection\n\nPsExec is a remote administration tool that enables the execution of commands with both regular and SYSTEM privileges on Windows systems. Microsoft develops it as part of the Sysinternals Suite. Although commonly used by administrators, PsExec is frequently used by attackers to enable lateral movement and execute commands as SYSTEM to disable defenses and bypass security protections.\n\nThis rule identifies PsExec execution by looking for the creation of `PsExec.exe`, the default name for the utility, followed by a network connection done by the process.\n\n#### Possible investigation steps\n\n- Check if the usage of this tool complies with the organization's administration policy.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Identify the target computer and its role in the IT environment.\n- Investigate what commands were run, and assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. As long as the analyst did not identify suspicious activity related to the user or involved hosts, and the tool is allowed by the organization's policy, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - Prioritize cases involving critical servers and users.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and process.name : \"PsExec.exe\" and event.type == \"start\" and\n\n /* This flag suppresses the display of the license dialog and may\n indicate that psexec executed for the first time in the machine */\n process.args : \"-accepteula\" and\n\n not process.executable : (\"?:\\\\ProgramData\\\\Docusnap\\\\Discovery\\\\discovery\\\\plugins\\\\17\\\\Bin\\\\psexec.exe\",\n \"?:\\\\Docusnap 11\\\\Bin\\\\psexec.exe\",\n \"?:\\\\Program Files\\\\Docusnap X\\\\Bin\\\\psexec.exe\",\n \"?:\\\\Program Files\\\\Docusnap X\\\\Tools\\\\dsDNS.exe\") and\n not process.parent.executable : \"?:\\\\Program Files (x86)\\\\Cynet\\\\Cynet Scanner\\\\CynetScanner.exe\"]\n [network where host.os.type == \"windows\" and process.name : \"PsExec.exe\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "55d551c6-333b-4665-ab7e-5d14a59715ce", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Lateral Movement", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1569", + "name": "System Services", + "reference": "https://attack.mitre.org/techniques/T1569/", + "subtechnique": [ + { + "id": "T1569.002", + "name": "Service Execution", + "reference": "https://attack.mitre.org/techniques/T1569/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.002", + "name": "SMB/Windows Admin Shares", + "reference": "https://attack.mitre.org/techniques/T1021/002/" + } + ] + }, + { + "id": "T1570", + "name": "Lateral Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1570/" + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "55d551c6-333b-4665-ab7e-5d14a59715ce_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/56004189-4e69-4a39-b4a9-195329d226e9_3.json b/packages/security_detection_engine/kibana/security_rule/56004189-4e69-4a39-b4a9-195329d226e9_3.json new file mode 100644 index 00000000000..39fcf3dae97 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/56004189-4e69-4a39-b4a9-195329d226e9_3.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a suspicious Windows process. This process has been classified as suspicious in two ways. It was predicted to be suspicious by the ProblemChild supervised ML model, and it was found to be an unusual process, on a host that does not commonly manifest malicious activity. Such a process may be an instance of suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_rare_process_by_host", + "name": "Unusual Process Spawned by a Host", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "56004189-4e69-4a39-b4a9-195329d226e9", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "56004189-4e69-4a39-b4a9-195329d226e9_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/56557cde-d923-4b88-adee-c61b3f3b5dc3_104.json b/packages/security_detection_engine/kibana/security_rule/56557cde-d923-4b88-adee-c61b3f3b5dc3_104.json new file mode 100644 index 00000000000..f30ab618f17 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/56557cde-d923-4b88-adee-c61b3f3b5dc3_104.json @@ -0,0 +1,79 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A spoofing vulnerability exists in the way Windows CryptoAPI (Crypt32.dll) validates Elliptic Curve Cryptography (ECC) certificates. An attacker could exploit the vulnerability by using a spoofed code-signing certificate to sign a malicious executable, making it appear the file was from a trusted, legitimate source.", + "index": [ + "winlogbeat-*", + "logs-windows.*", + "logs-system.security*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Windows CryptoAPI Spoofing Vulnerability (CVE-2020-0601 - CurveBall)", + "query": "event.provider:\"Microsoft-Windows-Audit-CVE\" and message:\"[CVE-2020-0601]\" and host.os.type:windows\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "message", + "type": "match_only_text" + } + ], + "risk_score": 21, + "rule_id": "56557cde-d923-4b88-adee-c61b3f3b5dc3", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Use Case: Vulnerability" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/", + "subtechnique": [ + { + "id": "T1553.002", + "name": "Code Signing", + "reference": "https://attack.mitre.org/techniques/T1553/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 104 + }, + "id": "56557cde-d923-4b88-adee-c61b3f3b5dc3_104", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/565c2b44-7a21-4818-955f-8d4737967d2e_106.json b/packages/security_detection_engine/kibana/security_rule/565c2b44-7a21-4818-955f-8d4737967d2e_106.json new file mode 100644 index 00000000000..f81ddf82c84 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/565c2b44-7a21-4818-955f-8d4737967d2e_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to add an account to the admin group via the command line. This could be an indication of privilege escalation activity.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Admin Group Account Addition", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:(dscl or dseditgroup) and process.args:((\"/Groups/admin\" or admin) and (\"-a\" or \"-append\"))\n", + "references": [ + "https://managingosx.wordpress.com/2010/01/14/add-a-user-to-the-admin-group-via-command-line-3-0/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "565c2b44-7a21-4818-955f-8d4737967d2e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "565c2b44-7a21-4818-955f-8d4737967d2e_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/565d6ca5-75ba-4c82-9b13-add25353471c_107.json b/packages/security_detection_engine/kibana/security_rule/565d6ca5-75ba-4c82-9b13-add25353471c_107.json new file mode 100644 index 00000000000..a283ab14ca2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/565d6ca5-75ba-4c82-9b13-add25353471c_107.json @@ -0,0 +1,82 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may dump the content of the keychain storage data from a system to acquire credentials. Keychains are the built-in way for macOS to keep track of users' passwords and credentials for many services and features, including Wi-Fi and website passwords, secure notes, certificates, and Kerberos.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Dumping of Keychain Content via Security Command", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.args : \"dump-keychain\" and process.args : \"-d\"\n", + "references": [ + "https://ss64.com/osx/security.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "565d6ca5-75ba-4c82-9b13-add25353471c", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.001", + "name": "Keychain", + "reference": "https://attack.mitre.org/techniques/T1555/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "565d6ca5-75ba-4c82-9b13-add25353471c_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/56f2e9b5-4803-4e44-a0a4-a52dc79d57fe_110.json b/packages/security_detection_engine/kibana/security_rule/56f2e9b5-4803-4e44-a0a4-a52dc79d57fe_110.json new file mode 100644 index 00000000000..2adcb781257 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/56f2e9b5-4803-4e44-a0a4-a52dc79d57fe_110.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of PSReflect in PowerShell scripts. Attackers leverage PSReflect as a library that enables PowerShell to access win32 API functions.", + "false_positives": [ + "Legitimate PowerShell scripts that make use of PSReflect to access the win32 API" + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell PSReflect Script", + "note": "## Triage and analysis\n\n### Investigating PowerShell PSReflect Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nPSReflect is a library that enables PowerShell to access win32 API functions in an uncomplicated way. It also helps to create enums and structs easily\u2014all without touching the disk.\n\nAlthough this is an interesting project for every developer and admin out there, it is mainly used in the red team and malware tooling for its capabilities.\n\nDetecting the core implementation of PSReflect means detecting most of the tooling that uses Windows API through PowerShell, enabling defenders to discover tools being dropped in the environment.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics. The script content that may be split into multiple script blocks (you can use the field `powershell.file.script_block_id` for filtering).\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Check for additional PowerShell and command-line logs that indicate that imported functions were run.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- PowerShell Suspicious Discovery Related Windows API Functions - 61ac3638-40a3-44b2-855a-985636ca985e\n- PowerShell Keylogging Script - bd2c86a0-8b61-4457-ab38-96943984e889\n- PowerShell Suspicious Script with Audio Capture Capabilities - 2f2f4939-0b34-40c2-a0a3-844eb7889f43\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- Suspicious .NET Reflection via PowerShell - e26f042e-c590-4e82-8e05-41e81bd822ad\n- PowerShell Suspicious Payload Encoded and Compressed - 81fe9dc6-a2d7-4192-a2d8-eed98afc766a\n- PowerShell Suspicious Script with Screenshot Capabilities - 959a7353-1129-4aa7-9084-30746b256a70\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text:(\n \"New-InMemoryModule\" or\n \"Add-Win32Type\" or\n psenum or\n DefineDynamicAssembly or\n DefineDynamicModule or\n \"Reflection.TypeAttributes\" or\n \"Reflection.Emit.OpCodes\" or\n \"Reflection.Emit.CustomAttributeBuilder\" or\n \"Runtime.InteropServices.DllImportAttribute\"\n ) and\n not user.id : \"S-1-5-18\" and\n not file.path : ?\\:\\\\\\\\ProgramData\\\\\\\\MaaS360\\\\\\\\Cloud?Extender\\\\\\\\AR\\\\\\\\Scripts\\\\\\\\ASModuleCommon.ps1*\n", + "references": [ + "https://github.com/mattifestation/PSReflect/blob/master/PSReflect.psm1", + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "56f2e9b5-4803-4e44-a0a4-a52dc79d57fe", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be configured (Enable).\n\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "56f2e9b5-4803-4e44-a0a4-a52dc79d57fe_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/577ec21e-56fe-4065-91d8-45eb8224fe77_108.json b/packages/security_detection_engine/kibana/security_rule/577ec21e-56fe-4065-91d8-45eb8224fe77_108.json new file mode 100644 index 00000000000..0765db2290f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/577ec21e-56fe-4065-91d8-45eb8224fe77_108.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects PowerShell scripts capable of dumping process memory using WindowsErrorReporting or Dbghelp.dll MiniDumpWriteDump. Attackers can use this tooling to dump LSASS and get access to credentials.", + "false_positives": [ + "PowerShell scripts that use this capability for troubleshooting." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell MiniDump Script", + "note": "## Triage and analysis\n\n### Investigating PowerShell MiniDump Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can abuse Process Memory Dump capabilities to extract credentials from LSASS or to obtain other privileged information stored in the process memory.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Check if the imported function was executed and which process it targeted.\n\n### False positive analysis\n\n- Regular users do not have a business justification for using scripting utilities to dump process memory, making false positives unlikely.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and powershell.file.script_block_text:(MiniDumpWriteDump or MiniDumpWithFullMemory or pmuDetirWpmuDiniM) and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1", + "https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Get-ProcessMiniDump.ps1", + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "577ec21e-56fe-4065-91d8-45eb8224fe77", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "577ec21e-56fe-4065-91d8-45eb8224fe77_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/581add16-df76-42bb-af8e-c979bfb39a59_110.json b/packages/security_detection_engine/kibana/security_rule/581add16-df76-42bb-af8e-c979bfb39a59_110.json new file mode 100644 index 00000000000..dac0cc37dee --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/581add16-df76-42bb-af8e-c979bfb39a59_110.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the wbadmin.exe to delete the backup catalog. Ransomware and other malware may do this to prevent system recovery.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Deleting Backup Catalogs with Wbadmin", + "note": "## Triage and analysis\n\n### Investigating Deleting Backup Catalogs with Wbadmin\n\nWindows Server Backup stores the details about your backups (what volumes are backed up and where the backups are located) in a file called a backup catalog, which ransomware victims can use to recover corrupted backup files. Deleting these files is a common step in threat actor playbooks.\n\nThis rule identifies the deletion of the backup catalog using the `wbadmin.exe` utility.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Check if any files on the host machine have been encrypted.\n\n### False positive analysis\n\n- Administrators can use this command to delete corrupted catalogs, but overall the activity is unlikely to be legitimate.\n\n### Related rules\n\n- Third-party Backup Files Deleted via Unexpected Process - 11ea6bec-ebde-4d71-a8e9-784948f8e3e9\n- Volume Shadow Copy Deleted or Resized via VssAdmin - b5ea4bfe-a1b2-421f-9d47-22a75a6f2921\n- Volume Shadow Copy Deletion via PowerShell - d99a037b-c8e2-47a5-97b9-170d076827c4\n- Volume Shadow Copy Deletion via WMIC - dc9c1f74-dac3-48e3-b47f-eb79db358f57\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If any other destructive action was identified on the host, it is recommended to prioritize the investigation and look for ransomware preparation and execution activities.\n- If any backups were affected:\n - Perform data recovery locally or restore the backups from replicated copies (cloud, other servers, etc.).\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"wbadmin.exe\" or ?process.pe.original_file_name == \"WBADMIN.EXE\") and\n process.args : \"catalog\" and process.args : \"delete\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "581add16-df76-42bb-af8e-c979bfb39a59", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + }, + { + "id": "T1485", + "name": "Data Destruction", + "reference": "https://attack.mitre.org/techniques/T1485/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "581add16-df76-42bb-af8e-c979bfb39a59_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/58aa72ca-d968-4f34-b9f7-bea51d75eb50_110.json b/packages/security_detection_engine/kibana/security_rule/58aa72ca-d968-4f34-b9f7-bea51d75eb50_110.json new file mode 100644 index 00000000000..c1a64b88f3d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/58aa72ca-d968-4f34-b9f7-bea51d75eb50_110.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies registry write modifications to enable Remote Desktop Protocol (RDP) access. This could be indicative of adversary lateral movement preparation.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "RDP Enabled via Registry", + "note": "## Triage and analysis\n\n### Investigating RDP Enabled via Registry\n\nMicrosoft Remote Desktop Protocol (RDP) is a proprietary Microsoft protocol that enables remote connections to other computers, typically over TCP port 3389.\n\nAttackers can use RDP to conduct their actions interactively. Ransomware operators frequently use RDP to access victim servers, often using privileged accounts.\n\nThis rule detects modification of the fDenyTSConnections registry key to the value `0`, which specifies that remote desktop connections are enabled. Attackers can abuse remote registry, use psexec, etc., to enable RDP and move laterally.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the user to check if they are aware of the operation.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check whether it makes sense to enable RDP to this host, given its role in the environment.\n- Check if the host is directly exposed to the internet.\n- Check whether privileged accounts accessed the host shortly after the modification.\n- Review network events within a short timespan of this alert for incoming RDP connection attempts.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Check whether the user should be performing this kind of activity, whether they are aware of it, whether RDP should be open, and whether the action exposes the environment to unnecessary risks.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If RDP is needed, make sure to secure it using firewall rules:\n - Allowlist RDP traffic to specific trusted hosts.\n - Restrict RDP logins to authorized non-administrator accounts, where possible.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and \n event.type in (\"creation\", \"change\") and\n registry.path : \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Terminal Server\\\\fDenyTSConnections\" and\n registry.data.strings : (\"0\", \"0x00000000\") and\n not process.executable : (\"?:\\\\Windows\\\\System32\\\\SystemPropertiesRemote.exe\", \n \"?:\\\\Windows\\\\System32\\\\SystemPropertiesComputerName.exe\", \n \"?:\\\\Windows\\\\System32\\\\SystemPropertiesAdvanced.exe\", \n \"?:\\\\Windows\\\\System32\\\\SystemSettingsAdminFlows.exe\", \n \"?:\\\\Windows\\\\WinSxS\\\\*\\\\TiWorker.exe\", \n \"?:\\\\Windows\\\\system32\\\\svchost.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "58aa72ca-d968-4f34-b9f7-bea51d75eb50", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.001", + "name": "Remote Desktop Protocol", + "reference": "https://attack.mitre.org/techniques/T1021/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "58aa72ca-d968-4f34-b9f7-bea51d75eb50_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/58ac2aa5-6718-427c-a845-5f3ac5af00ba_103.json b/packages/security_detection_engine/kibana/security_rule/58ac2aa5-6718-427c-a845-5f3ac5af00ba_103.json new file mode 100644 index 00000000000..474d90a8e9e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/58ac2aa5-6718-427c-a845-5f3ac5af00ba_103.json @@ -0,0 +1,77 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies Zoom meetings that are created without a passcode. Meetings without a passcode are susceptible to Zoombombing. Zoombombing is carried out by taking advantage of Zoom sessions that are not protected with a passcode. Zoombombing refers to the unwanted, disruptive intrusion, generally by Internet trolls and hackers, into a video conference call. In a typical Zoombombing incident, a teleconferencing session is hijacked by the insertion of material that is lewd, obscene, racist, or antisemitic in nature, typically resulting of the shutdown of the session.", + "index": [ + "filebeat-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Zoom Meeting with no Passcode", + "query": "event.type:creation and event.module:zoom and event.dataset:zoom.webhook and\n event.action:meeting.created and not zoom.meeting.password:*\n", + "references": [ + "https://blog.zoom.us/a-message-to-our-users/", + "https://www.fbi.gov/contact-us/field-offices/boston/news/press-releases/fbi-warns-of-teleconferencing-and-online-classroom-hijacking-during-covid-19-pandemic" + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.module", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "zoom.meeting.password", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "58ac2aa5-6718-427c-a845-5f3ac5af00ba", + "setup": "## Setup\n\nThe Zoom Filebeat module or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Data Source: Zoom", + "Use Case: Configuration Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 103 + }, + "id": "58ac2aa5-6718-427c-a845-5f3ac5af00ba_103", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/58c6d58b-a0d3-412d-b3b8-0981a9400607_110.json b/packages/security_detection_engine/kibana/security_rule/58c6d58b-a0d3-412d-b3b8-0981a9400607_110.json new file mode 100644 index 00000000000..580a12e7113 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/58c6d58b-a0d3-412d-b3b8-0981a9400607_110.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a potential exploitation of InstallerTakeOver (CVE-2021-41379) default PoC execution. Successful exploitation allows an unprivileged user to escalate privileges to SYSTEM.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via InstallerFileTakeOver", + "note": "## Triage and analysis\n\n### Investigating Potential Privilege Escalation via InstallerFileTakeOver\n\nInstallerFileTakeOver is a weaponized escalation of privilege proof of concept (EoP PoC) to the CVE-2021-41379 vulnerability. Upon successful exploitation, an unprivileged user will escalate privileges to SYSTEM/NT AUTHORITY.\n\nThis rule detects the default execution of the PoC, which overwrites the `elevation_service.exe` DACL and copies itself to the location to escalate privileges. An attacker is able to still take over any file that is not in use (locked), which is outside the scope of this rule.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Look for additional processes spawned by the process, command lines, and network communications.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- Verify whether a digital signature exists in the executable, and if it is valid.\n\n### Related rules\n\n- Suspicious DLL Loaded for Persistence or Privilege Escalation - bfeaf89b-a2a7-48a3-817f-e41829dc61ee\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.Ext.token.integrity_level_name : \"System\" and\n (\n (process.name : \"elevation_service.exe\" and\n not process.pe.original_file_name == \"elevation_service.exe\") or\n \n (process.name : \"elevation_service.exe\" and\n not process.code_signature.trusted == true) or\n\n (process.parent.name : \"elevation_service.exe\" and\n process.name : (\"rundll32.exe\", \"cmd.exe\", \"powershell.exe\"))\n ) and\n not\n (\n process.name : \"elevation_service.exe\" and process.code_signature.trusted == true and\n process.pe.original_file_name == null\n )\n", + "references": [ + "https://github.com/klinix5/InstallerFileTakeOver" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "58c6d58b-a0d3-412d-b3b8-0981a9400607", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "58c6d58b-a0d3-412d-b3b8-0981a9400607_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5930658c-2107-4afc-91af-e0e55b7f7184_105.json b/packages/security_detection_engine/kibana/security_rule/5930658c-2107-4afc-91af-e0e55b7f7184_105.json new file mode 100644 index 00000000000..4783e976563 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5930658c-2107-4afc-91af-e0e55b7f7184_105.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the occurrence of emails reported as Phishing or Malware by Users. Security Awareness training is essential to stay ahead of scammers and threat actors, as security products can be bypassed, and the user can still receive a malicious message. Educating users to report suspicious messages can help identify gaps in security controls and prevent malware infections and Business Email Compromise attacks.", + "false_positives": [ + "Legitimate files reported by the users" + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "O365 Email Reported by User as Malware or Phish", + "note": "", + "query": "event.dataset:o365.audit and event.provider:SecurityComplianceCenter and event.action:AlertTriggered and rule.name:\"Email reported by user as malware or phish\"\n", + "references": [ + "https://support.microsoft.com/en-us/office/use-the-report-message-add-in-b5caa9f1-cdf3-4443-af8c-ff724ea719d2?ui=en-us&rs=en-us&ad=us" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": true, + "name": "rule.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5930658c-2107-4afc-91af-e0e55b7f7184", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + }, + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "5930658c-2107-4afc-91af-e0e55b7f7184_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5a14d01d-7ac8-4545-914c-b687c2cf66b3_108.json b/packages/security_detection_engine/kibana/security_rule/5a14d01d-7ac8-4545-914c-b687c2cf66b3_108.json new file mode 100644 index 00000000000..44b370f1bb7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5a14d01d-7ac8-4545-914c-b687c2cf66b3_108.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to bypass User Account Control (UAC) via DLL side-loading. Attackers may attempt to bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass Attempt via Privileged IFileOperation COM Interface", + "query": "file where host.os.type == \"windows\" and event.type : \"change\" and process.name : \"dllhost.exe\" and\n /* Known modules names side loaded into process running with high or system integrity level for UAC Bypass, update here for new modules */\n file.name : (\"wow64log.dll\", \"comctl32.dll\", \"DismCore.dll\", \"OskSupport.dll\", \"duser.dll\", \"Accessibility.ni.dll\") and\n /* has no impact on rule logic just to avoid OS install related FPs */\n not file.path : (\"C:\\\\Windows\\\\SoftwareDistribution\\\\*\", \"C:\\\\Windows\\\\WinSxS\\\\*\")\n", + "references": [ + "https://github.com/hfiref0x/UACME", + "https://www.elastic.co/security-labs/exploring-windows-uac-bypasses-techniques-and-detection-strategies" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "5a14d01d-7ac8-4545-914c-b687c2cf66b3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.002", + "name": "DLL Side-Loading", + "reference": "https://attack.mitre.org/techniques/T1574/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "5a14d01d-7ac8-4545-914c-b687c2cf66b3_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5a3d5447-31c9-409a-aed1-72f9921594fd_8.json b/packages/security_detection_engine/kibana/security_rule/5a3d5447-31c9-409a-aed1-72f9921594fd_8.json new file mode 100644 index 00000000000..ce466f983e6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5a3d5447-31c9-409a-aed1-72f9921594fd_8.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies the execution of a Linux shell process from a Java JAR application post an incoming network connection. This behavior may indicate reverse shell activity via a Java application.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via Java", + "query": "sequence by host.id with maxspan=5s\n [network where host.os.type == \"linux\" and event.action in (\"connection_accepted\", \"connection_attempted\") and \n process.executable : (\"/usr/bin/java\", \"/bin/java\", \"/usr/lib/jvm/*\", \"/usr/java/*\") and \n not (destination.ip == null or destination.ip == \"0.0.0.0\" or cidrmatch(\n destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\",\n \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\",\n \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\",\n \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\",\n \"FF00::/8\"\n )\n )] by process.entity_id\n [process where host.os.type == \"linux\" and event.action == \"exec\" and \n process.parent.executable : (\"/usr/bin/java\", \"/bin/java\", \"/usr/lib/jvm/*\", \"/usr/java/*\") and\n process.parent.args : \"-jar\" and process.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n and not process.parent.args in (\n \"/usr/share/java/jenkins.war\", \"/etc/remote-iot/services/remoteiot.jar\",\n \"/usr/lib64/NetExtender.jar\", \"/usr/lib/jenkins/jenkins.war\"\n )] by process.parent.entity_id\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5a3d5447-31c9-409a-aed1-72f9921594fd", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 8 + }, + "id": "5a3d5447-31c9-409a-aed1-72f9921594fd_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5ae02ebc-a5de-4eac-afe6-c88de696477d_2.json b/packages/security_detection_engine/kibana/security_rule/5ae02ebc-a5de-4eac-afe6-c88de696477d_2.json new file mode 100644 index 00000000000..42f67836391 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5ae02ebc-a5de-4eac-afe6-c88de696477d_2.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the execution of a file system mount followed by a chroot execution. Given enough permissions, a user within a container is capable of mounting the root file system of the host, and leveraging chroot to escape its containarized environment. This behavior pattern is very uncommon and should be investigated.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Chroot Container Escape via Mount", + "query": "sequence by host.id, process.parent.entity_id with maxspan=5m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name == \"mount\" and process.args : \"/dev/sd*\" and process.args_count >= 3 and\n process.parent.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")]\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name == \"chroot\"]\n", + "references": [ + "https://book.hacktricks.xyz/v/portugues-ht/linux-hardening/privilege-escalation/escaping-from-limited-bash" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5ae02ebc-a5de-4eac-afe6-c88de696477d", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\nSession View uses process data collected by the Elastic Defend integration, but this data is not always collected by default. Session View is available on enterprise subscription for versions 8.3 and above.\n#### To confirm that Session View data is enabled:\n- Go to \u201cManage \u2192 Policies\u201d, and edit one or more of your Elastic Defend integration policies.\n- Select the\u201d Policy settings\u201d tab, then scroll down to the \u201cLinux event collection\u201d section near the bottom.\n- Check the box for \u201cProcess events\u201d, and turn on the \u201cInclude session data\u201d toggle.\n- If you want to include file and network alerts in Session View, check the boxes for \u201cNetwork and File events\u201d.\n- If you want to enable terminal output capture, turn on the \u201cCapture terminal output\u201d toggle.\nFor more information about the additional fields collected when this setting is enabled and the usage of Session View for Analysis refer to the [helper guide](https://www.elastic.co/guide/en/security/current/session-view.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Domain: Container", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1611", + "name": "Escape to Host", + "reference": "https://attack.mitre.org/techniques/T1611/" + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "5ae02ebc-a5de-4eac-afe6-c88de696477d_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106.json b/packages/security_detection_engine/kibana/security_rule/5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106.json new file mode 100644 index 00000000000..34f422110aa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects use of the systemsetup command to enable remote SSH Login.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Remote SSH Login Enabled via systemsetup Command", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:systemsetup and\n process.args:(\"-setremotelogin\" and on) and\n not process.parent.executable : /usr/local/jamf/bin/jamf\n", + "references": [ + "https://documents.trendmicro.com/assets/pdf/XCSSET_Technical_Brief.pdf", + "https://ss64.com/osx/systemsetup.html", + "https://support.apple.com/guide/remote-desktop/about-systemsetup-apd95406b8d/mac" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.004", + "name": "SSH", + "reference": "https://attack.mitre.org/techniques/T1021/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "5ae4e6f8-d1bf-40fa-96ba-e29645e1e4dc_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5aee924b-6ceb-4633-980e-1bde8cdb40c5_108.json b/packages/security_detection_engine/kibana/security_rule/5aee924b-6ceb-4633-980e-1bde8cdb40c5_108.json new file mode 100644 index 00000000000..dd0278ea40f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5aee924b-6ceb-4633-980e-1bde8cdb40c5_108.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects file name patterns generated by the use of Sysinternals SDelete utility to securely delete a file via multiple file overwrite and rename operations.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Secure File Deletion via SDelete Utility", + "note": "## Triage and analysis\n\n### Investigating Potential Secure File Deletion via SDelete Utility\n\nSDelete is a tool primarily used for securely deleting data from storage devices, making it unrecoverable. Microsoft develops it as part of the Sysinternals Suite. Although commonly used to delete data securely, attackers can abuse it to delete forensic indicators and remove files as a post-action to a destructive action such as ransomware or data theft to hinder recovery efforts.\n\nThis rule identifies file name patterns generated by the use of SDelete utility to securely delete a file via multiple file overwrite and rename operations.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Examine the command line and identify the files deleted, their importance and whether they could be the target of antiforensics activity.\n\n### False positive analysis\n\n- This is a dual-use tool, meaning its usage is not inherently malicious. Analysts can dismiss the alert if the administrator is aware of the activity, no other suspicious activity was identified, and there are justifications for the execution.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - Prioritize cases involving critical servers and users.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If important data was encrypted, deleted, or modified, activate your data recovery plan.\n - Perform data recovery locally or restore the backups from replicated copies (cloud, other servers, etc.).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type == \"change\" and file.name : \"*AAA.AAA\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "5aee924b-6ceb-4633-980e-1bde8cdb40c5", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Impact", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.004", + "name": "File Deletion", + "reference": "https://attack.mitre.org/techniques/T1070/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1485", + "name": "Data Destruction", + "reference": "https://attack.mitre.org/techniques/T1485/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "5aee924b-6ceb-4633-980e-1bde8cdb40c5_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5b03c9fb-9945-4d2f-9568-fd690fee3fba_108.json b/packages/security_detection_engine/kibana/security_rule/5b03c9fb-9945-4d2f-9568-fd690fee3fba_108.json new file mode 100644 index 00000000000..673302a86b3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5b03c9fb-9945-4d2f-9568-fd690fee3fba_108.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary may attempt to get detailed information about the operating system and hardware. This rule identifies common locations used to discover virtual machine hardware by a non-root user. This technique has been used by the Pupy RAT and other malware.", + "false_positives": [ + "Certain tools or automated software may enumerate hardware information. These tools can be exempted via user name or process arguments to eliminate potential noise." + ], + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Virtual Machine Fingerprinting", + "query": "event.category:process and host.os.type:linux and event.type:(start or process_started) and\n process.args:(\"/sys/class/dmi/id/bios_version\" or\n \"/sys/class/dmi/id/product_name\" or\n \"/sys/class/dmi/id/chassis_vendor\" or\n \"/proc/scsi/scsi\" or\n \"/proc/ide/hd0/model\") and\n not user.name:root\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "5b03c9fb-9945-4d2f-9568-fd690fee3fba", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "5b03c9fb-9945-4d2f-9568-fd690fee3fba_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5b06a27f-ad72-4499-91db-0c69667bffa5_5.json b/packages/security_detection_engine/kibana/security_rule/5b06a27f-ad72-4499-91db-0c69667bffa5_5.json new file mode 100644 index 00000000000..53c321ff6bf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5b06a27f-ad72-4499-91db-0c69667bffa5_5.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the usage of the \"find\" command in conjunction with SUID and SGUID permission arguments. SUID (Set User ID) and SGID (Set Group ID) are special permissions in Linux that allow a program to execute with the privileges of the file owner or group, respectively, rather than the privileges of the user running the program. In case an attacker is able to enumerate and find a binary that is misconfigured, they might be able to leverage this misconfiguration to escalate privileges by exploiting vulnerabilities or built-in features in the privileged program.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "SUID/SGUID Enumeration Detected", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \nprocess.name == \"find\" and process.args : \"-perm\" and process.args : (\n \"/6000\", \"-6000\", \"/4000\", \"-4000\", \"/2000\", \"-2000\", \"/u=s\", \"-u=s\", \"/g=s\", \"-g=s\", \"/u=s,g=s\", \"/g=s,u=s\"\n) and not (\n user.Ext.real.id == \"0\" or group.Ext.real.id == \"0\" or process.args_count >= 12 or \n (process.args : \"/usr/bin/pkexec\" and process.args : \"-xdev\" and process.args_count == 7)\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "5b06a27f-ad72-4499-91db-0c69667bffa5", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1083", + "name": "File and Directory Discovery", + "reference": "https://attack.mitre.org/techniques/T1083/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.001", + "name": "Setuid and Setgid", + "reference": "https://attack.mitre.org/techniques/T1548/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "5b06a27f-ad72-4499-91db-0c69667bffa5_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5b18eef4-842c-4b47-970f-f08d24004bde_5.json b/packages/security_detection_engine/kibana/security_rule/5b18eef4-842c-4b47-970f-f08d24004bde_5.json new file mode 100644 index 00000000000..db599c813ce --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5b18eef4-842c-4b47-970f-f08d24004bde_5.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the usage of the which command with an unusual amount of process arguments. Attackers may leverage the which command to enumerate the system for useful installed utilities that may be used after compromising a system to escalate privileges or move latteraly across the network.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious which Enumeration", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"which\" and process.args_count >= 10 and not process.parent.name == \"jem\" and \nnot process.args == \"--tty-only\"\n\n/* potential tuning if rule would turn out to be noisy\nand process.args in (\"nmap\", \"nc\", \"ncat\", \"netcat\", nc.traditional\", \"gcc\", \"g++\", \"socat\") and \nprocess.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n*/ \n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "5b18eef4-842c-4b47-970f-f08d24004bde", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "5b18eef4-842c-4b47-970f-f08d24004bde_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5bb4a95d-5a08-48eb-80db-4c3a63ec78a8_107.json b/packages/security_detection_engine/kibana/security_rule/5bb4a95d-5a08-48eb-80db-4c3a63ec78a8_107.json new file mode 100644 index 00000000000..e426a4fdffc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5bb4a95d-5a08-48eb-80db-4c3a63ec78a8_107.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to exploit privilege escalation vulnerabilities related to the Print Spooler service. For more information refer to the following CVE's - CVE-2020-1048, CVE-2020-1337 and CVE-2020-1300 and verify that the impacted system is patched.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious PrintSpooler Service Executable File Creation", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and\n process.name : \"spoolsv.exe\" and file.extension : \"dll\" and\n file.path : (\"?:\\\\Windows\\\\System32\\\\*\", \"?:\\\\Windows\\\\SysWOW64\\\\*\") and\n not file.path : (\n \"?:\\\\WINDOWS\\\\SysWOW64\\\\PrintConfig.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\x5lrs.dll\",\n \"?:\\\\WINDOWS\\\\sysWOW64\\\\x5lrs.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\PrintConfig.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\spool\\\\DRIVERS\\\\x64\\\\*.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\spool\\\\DRIVERS\\\\W32X86\\\\*.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\spool\\\\PRTPROCS\\\\x64\\\\*.dll\",\n \"?:\\\\WINDOWS\\\\system32\\\\spool\\\\{????????-????-????-????-????????????}\\\\*.dll\"\n )\n", + "references": [ + "https://voidsec.com/cve-2020-1337-printdemon-is-dead-long-live-printdemon/", + "https://www.thezdi.com/blog/2020/7/8/cve-2020-1300-remote-code-execution-through-microsoft-windows-cab-files" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "5bb4a95d-5a08-48eb-80db-4c3a63ec78a8", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "5bb4a95d-5a08-48eb-80db-4c3a63ec78a8_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5c351f54-4187-4ad8-abc8-29b0cfbef8b1_2.json b/packages/security_detection_engine/kibana/security_rule/5c351f54-4187-4ad8-abc8-29b0cfbef8b1_2.json new file mode 100644 index 00000000000..a004aa2e041 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5c351f54-4187-4ad8-abc8-29b0cfbef8b1_2.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies recursive process capability enumeration of the entire filesystem through the getcap command. Malicious users may manipulate identified capabilities to gain root privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Process Capability Enumeration", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name == \"getcap\" and process.args == \"-r\" and process.args == \"/\" and process.args_count == 3 and\nuser.id != \"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "5c351f54-4187-4ad8-abc8-29b0cfbef8b1", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "5c351f54-4187-4ad8-abc8-29b0cfbef8b1_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5c602cba-ae00-4488-845d-24de2b6d8055_1.json b/packages/security_detection_engine/kibana/security_rule/5c602cba-ae00-4488-845d-24de2b6d8055_1.json new file mode 100644 index 00000000000..ec3b429d5c2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5c602cba-ae00-4488-845d-24de2b6d8055_1.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies PowerShell scripts that can access and decrypt Veeam credentials stored in MSSQL databases. Attackers can use Veeam Credentials to target backups as part of destructive operations such as Ransomware attacks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Veeam Credential Access Capabilities", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (\n \"[dbo].[Credentials]\" and\n (\"Veeam\" or \"VeeamBackup\")\n ) or\n \"ProtectedStorage]::GetLocalString\"\n )\n", + "references": [ + "https://forums.veeam.com/veeam-backup-replication-f2/recover-esxi-password-in-veeam-t34630.html", + "https://www.crowdstrike.com/blog/anatomy-of-alpha-spider-ransomware/" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "5c602cba-ae00-4488-845d-24de2b6d8055", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 1 + }, + "id": "5c602cba-ae00-4488-845d-24de2b6d8055_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5c6f4c58-b381-452a-8976-f1b1c6aa0def_10.json b/packages/security_detection_engine/kibana/security_rule/5c6f4c58-b381-452a-8976-f1b1c6aa0def_10.json new file mode 100644 index 00000000000..a4d59dab357 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5c6f4c58-b381-452a-8976-f1b1c6aa0def_10.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies when a User Account starts the Active Directory Replication Process for the first time. Attackers can use the DCSync technique to get credential information of individual accounts or the entire domain, thus compromising the entire domain.", + "from": "now-9m", + "history_window_start": "now-15d", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "FirstTime Seen Account Performing DCSync", + "new_terms_fields": [ + "winlog.event_data.SubjectUserName" + ], + "note": "## Triage and analysis\n\n### Investigating FirstTime Seen Account Performing DCSync\n\nActive Directory replication is the process by which the changes that originate on one domain controller are automatically transferred to other domain controllers that store the same data.\n\nActive Directory data consists of objects that have properties, or attributes. Each object is an instance of an object class, and object classes and their respective attributes are defined in the Active Directory schema. Objects are defined by the values of their attributes, and changes to attribute values must be transferred from the domain controller on which they occur to every other domain controller that stores a replica of an affected object.\n\nAdversaries can use the DCSync technique that uses Windows Domain Controller's API to simulate the replication process from a remote domain controller, compromising major credential material such as the Kerberos krbtgt keys that are used legitimately for creating tickets, but also for forging tickets by attackers. This attack requires some extended privileges to succeed (DS-Replication-Get-Changes and DS-Replication-Get-Changes-All), which are granted by default to members of the Administrators, Domain Admins, Enterprise Admins, and Domain Controllers groups. Privileged accounts can be abused to grant controlled objects the right to DCsync/Replicate.\n\nMore details can be found on [Threat Hunter Playbook](https://threathunterplaybook.com/library/windows/active_directory_replication.html?highlight=dcsync#directory-replication-services-auditing) and [The Hacker Recipes](https://www.thehacker.recipes/ad/movement/credentials/dumping/dcsync).\n\nThis rule monitors for when a Windows Event ID 4662 (Operation was performed on an Active Directory object) with the access mask 0x100 (Control Access) and properties that contain at least one of the following or their equivalent Schema-Id-GUID (DS-Replication-Get-Changes, DS-Replication-Get-Changes-All, DS-Replication-Get-Changes-In-Filtered-Set) is seen in the environment for the first time in the last 15 days.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Correlate security events 4662 and 4624 (Logon Type 3) by their Logon ID (`winlog.logon.id`) on the Domain Controller (DC) that received the replication request. This will tell you where the AD replication request came from, and if it came from another DC or not.\n- Scope which credentials were compromised (for example, whether all accounts were replicated or specific ones).\n\n### False positive analysis\n\n- Administrators may use custom accounts on Azure AD Connect; investigate if this is part of a new Azure AD account setup, and ensure it is properly secured. If the activity was expected and there is no other suspicious activity involving the host or user, the analyst can dismiss the alert.\n- Although replicating Active Directory (AD) data to non-Domain Controllers is not a common practice and is generally not recommended from a security perspective, some software vendors may require it for their products to function correctly. Investigate if this is part of a new product setup, and ensure it is properly secured. If the activity was expected and there is no other suspicious activity involving the host or user, the analyst can dismiss the alert.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the entire domain or the `krbtgt` user was compromised:\n - Activate your incident response plan for total Active Directory compromise which should include, but not be limited to, a password reset (twice) of the `krbtgt` user.\n- Investigate how the attacker escalated privileges and identify systems they used to conduct lateral movement. Use this information to determine ways the attacker could regain access to the environment.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.action:(\"Directory Service Access\" or \"object-operation-performed\") and event.code:\"4662\" and\n winlog.event_data.Properties:(*DS-Replication-Get-Changes* or *DS-Replication-Get-Changes-All* or\n *DS-Replication-Get-Changes-In-Filtered-Set* or *1131f6ad-9c07-11d1-f79f-00c04fc2dcd2* or\n *1131f6aa-9c07-11d1-f79f-00c04fc2dcd2* or *89e95b76-444d-4c62-991a-0facbeda640c*) and\n not winlog.event_data.SubjectUserName:(*$ or MSOL_*)\n", + "references": [ + "https://threathunterplaybook.com/notebooks/windows/06_credential_access/WIN-180815210510.html", + "https://threathunterplaybook.com/library/windows/active_directory_replication.html?highlight=dcsync#directory-replication-services-auditing", + "https://github.com/SigmaHQ/sigma/blob/master/rules/windows/builtin/security/win_ad_replication_non_machine_account.yml", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0027_windows_audit_directory_service_access.md", + "https://attack.stealthbits.com/privilege-escalation-using-mimikatz-dcsync", + "https://www.thehacker.recipes/ad/movement/credentials/dumping/dcsync" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Properties", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserName", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "5c6f4c58-b381-452a-8976-f1b1c6aa0def", + "setup": "## Setup\n\nThe 'Audit Directory Service Access' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Access (Success,Failure)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Privilege Escalation", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.006", + "name": "DCSync", + "reference": "https://attack.mitre.org/techniques/T1003/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 10 + }, + "id": "5c6f4c58-b381-452a-8976-f1b1c6aa0def_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5c895b4f-9133-4e68-9e23-59902175355c_6.json b/packages/security_detection_engine/kibana/security_rule/5c895b4f-9133-4e68-9e23-59902175355c_6.json new file mode 100644 index 00000000000..f8d80b08650 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5c895b4f-9133-4e68-9e23-59902175355c_6.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies a sample of suspicious Linux system file reads used for system fingerprinting, leveraged by the Metasploit Meterpreter shell to gather information about the target that it is executing its shell on. Detecting this pattern is indicative of a successful meterpreter shell connection.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Meterpreter Reverse Shell", + "query": "sample by host.id, process.pid, user.id\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"open\" and auditd.data.a2 == \"1b6\" and file.path == \"/etc/machine-id\"]\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"open\" and auditd.data.a2 == \"1b6\" and file.path == \"/etc/passwd\"]\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"open\" and auditd.data.a2 == \"1b6\" and file.path == \"/proc/net/route\"]\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"open\" and auditd.data.a2 == \"1b6\" and file.path == \"/proc/net/ipv6_route\"]\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"open\" and auditd.data.a2 == \"1b6\" and file.path == \"/proc/net/if_inet6\"]\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a2", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5c895b4f-9133-4e68-9e23-59902175355c", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Auditbeat\n- Auditd Manager\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule the following additional audit rules are required to be added to the integration:\n -w /proc/net/ -p r -k audit_proc\n -w /etc/machine-id -p wa -k machineid\n -w /etc/passwd -p wa -k passwd\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "5c895b4f-9133-4e68-9e23-59902175355c_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7.json b/packages/security_detection_engine/kibana/security_rule/5c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7.json new file mode 100644 index 00000000000..2283089cbe2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7.json @@ -0,0 +1,82 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the PRoot utility, an open-source tool for user-space implementation of chroot, mount --bind, and binfmt_misc. Adversaries can leverage an open-source tool PRoot to expand the scope of their operations to multiple Linux distributions and simplify their necessary efforts. In a normal threat scenario, the scope of an attack is limited by the varying configurations of each Linux distribution. With PRoot, it provides an attacker with a consistent operational environment across different Linux distributions, such as Ubuntu, Fedora, and Alpine. PRoot also provides emulation capabilities that allow for malware built on other architectures, such as ARM, to be run.The post-exploitation technique called bring your own filesystem (BYOF), can be used by the threat actors to execute malicious payload or elevate privileges or perform network scans or orchestrate another attack on the environment. Although PRoot was originally not developed with malicious intent it can be easily tuned to work for one.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Defense Evasion via PRoot", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.parent.name == \"proot\"\n", + "references": [ + "https://proot-me.github.io/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5c9ec990-37fa-4d5c-abfc-8d432f3dedd0", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1211", + "name": "Exploitation for Defense Evasion", + "reference": "https://attack.mitre.org/techniques/T1211/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "5c9ec990-37fa-4d5c-abfc-8d432f3dedd0_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5cd55388-a19c-47c7-8ec4-f41656c2fded_106.json b/packages/security_detection_engine/kibana/security_rule/5cd55388-a19c-47c7-8ec4-f41656c2fded_106.json new file mode 100644 index 00000000000..61107459864 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5cd55388-a19c-47c7-8ec4-f41656c2fded_106.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the PowerShell process loading the Task Scheduler COM DLL followed by an outbound RPC network connection within a short time period. This may indicate lateral movement or remote discovery via scheduled tasks.", + "false_positives": [ + "Legitimate scheduled tasks may be created during installation of new software." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Outbound Scheduled Task Activity via PowerShell", + "query": "sequence by host.id, process.entity_id with maxspan = 5s\n [any where host.os.type == \"windows\" and (event.category == \"library\" or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : \"taskschd.dll\" or file.name : \"taskschd.dll\") and process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\")]\n [network where host.os.type == \"windows\" and process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") and destination.port == 135 and not destination.ip in (\"127.0.0.1\", \"::1\")]\n", + "references": [ + "https://www.volexity.com/blog/2020/12/14/dark-halo-leverages-solarwinds-compromise-to-breach-organizations/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5cd55388-a19c-47c7-8ec4-f41656c2fded", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + }, + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "5cd55388-a19c-47c7-8ec4-f41656c2fded_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5cd8e1f7-0050-4afc-b2df-904e40b2f5ae_109.json b/packages/security_detection_engine/kibana/security_rule/5cd8e1f7-0050-4afc-b2df-904e40b2f5ae_109.json new file mode 100644 index 00000000000..ca1197a0ffc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5cd8e1f7-0050-4afc-b2df-904e40b2f5ae_109.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Skoetting" + ], + "description": "Identifies a user being added to a privileged group in Active Directory. Privileged accounts and groups in Active Directory are those to which powerful rights, privileges, and permissions are granted that allow them to perform nearly any action in Active Directory and on domain-joined systems.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "User Added to Privileged Group", + "note": "## Triage and analysis\n\n### Investigating User Added to Privileged Group in Active Directory\n\nPrivileged accounts and groups in Active Directory are those to which powerful rights, privileges, and permissions are granted that allow them to perform nearly any action in Active Directory and on domain-joined systems.\n\nAttackers can add users to privileged groups to maintain a level of access if their other privileged accounts are uncovered by the security team. This allows them to keep operating after the security team discovers abused accounts.\n\nThis rule monitors events related to a user being added to a privileged group.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should manage members of this group.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- This attack abuses a legitimate Active Directory mechanism, so it is important to determine whether the activity is legitimate, if the administrator is authorized to perform this operation, and if there is a need to grant the account this level of privilege.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If the admin is not aware of the operation, activate your Active Directory incident response plan.\n- If the user does not need the administrator privileges, remove the account from the privileged group.\n- Review the privileges of the administrator account that performed the action.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "iam where winlog.api:\"wineventlog\" and event.action == \"added-member-to-group\" and\n group.name : (\"Admin*\",\n \"Local Administrators\",\n \"Domain Admins\",\n \"Enterprise Admins\",\n \"Backup Admins\",\n \"Schema Admins\",\n \"DnsAdmins\",\n \"Exchange Organization Administrators\")\n", + "references": [ + "https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-b--privileged-accounts-and-groups-in-active-directory" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "group.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.api", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5cd8e1f7-0050-4afc-b2df-904e40b2f5ae", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "5cd8e1f7-0050-4afc-b2df-904e40b2f5ae_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5cf6397e-eb91-4f31-8951-9f0eaa755a31_8.json b/packages/security_detection_engine/kibana/security_rule/5cf6397e-eb91-4f31-8951-9f0eaa755a31_8.json new file mode 100644 index 00000000000..3617915eacf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5cf6397e-eb91-4f31-8951-9f0eaa755a31_8.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of a PowerShell profile. PowerShell profile is a script that is executed when PowerShell starts to customize the user environment, which can be abused by attackers to persist in a environment where PowerShell is common.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via PowerShell profile", + "note": "## Triage and analysis\n\n### Investigating Persistence via PowerShell profile\n\nPowerShell profiles are scripts executed when PowerShell starts, customizing the user environment. They are commonly used in Windows environments for legitimate purposes, such as setting variables or loading modules. However, adversaries can abuse PowerShell profiles to establish persistence by inserting malicious code that executes each time PowerShell is launched.\n\nThis rule identifies the creation or modification of a PowerShell profile. It does this by monitoring file events on Windows systems, specifically targeting profile-related file paths and names, such as `profile.ps1` and `Microsoft.Powershell_profile.ps1`. By detecting these activities, security analysts can investigate potential abuse of PowerShell profiles for malicious persistence.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Retrive and inspect the PowerShell profile content; look for suspicious DLL imports, collection or persistence capabilities, suspicious functions, encoded or compressed data, suspicious commands, and other potentially malicious characteristics.\n- Identify the process responsible for the PowerShell profile creation/modification. Use the Elastic Defend events to examine all the activity of the subject process by filtering by the process's `process.entity_id`.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Check for additional PowerShell and command-line logs that indicate that any suspicious command or function were run.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Observe and collect information about the following activities in the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process's `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n\n### False positive analysis\n\n- This is a dual-use mechanism, meaning its usage is not inherently malicious. Analysts can dismiss the alert if the script doesn't contain malicious functions or potential for abuse, no other suspicious activity was identified, and the user has business justifications to use PowerShell.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n - Consider enabling and collecting PowerShell logs such as transcription, module, and script block logging, to improve visibility into PowerShell activities.\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.path : (\"?:\\\\Users\\\\*\\\\Documents\\\\WindowsPowerShell\\\\*\",\n \"?:\\\\Users\\\\*\\\\Documents\\\\PowerShell\\\\*\",\n \"?:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\*\") and\n file.name : (\"profile.ps1\", \"Microsoft.Powershell_profile.ps1\")\n", + "references": [ + "https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles", + "https://www.welivesecurity.com/2019/05/29/turla-powershell-usage/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5cf6397e-eb91-4f31-8951-9f0eaa755a31", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.013", + "name": "PowerShell Profile", + "reference": "https://attack.mitre.org/techniques/T1546/013/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.013", + "name": "PowerShell Profile", + "reference": "https://attack.mitre.org/techniques/T1546/013/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "5cf6397e-eb91-4f31-8951-9f0eaa755a31_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5d0265bf-dea9-41a9-92ad-48a8dcd05080_107.json b/packages/security_detection_engine/kibana/security_rule/5d0265bf-dea9-41a9-92ad-48a8dcd05080_107.json new file mode 100644 index 00000000000..0bdc3d4cba8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5d0265bf-dea9-41a9-92ad-48a8dcd05080_107.json @@ -0,0 +1,81 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the Defaults command to install a login or logoff hook in MacOS. An adversary may abuse this capability to establish persistence in an environment by inserting code to be executed at login or logout.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Login or Logout Hook", + "query": "process where host.os.type == \"macos\" and event.type == \"start\" and\n process.name == \"defaults\" and process.args == \"write\" and process.args : (\"LoginHook\", \"LogoutHook\") and\n not process.args :\n (\n \"Support/JAMF/ManagementFrameworkScripts/logouthook.sh\",\n \"Support/JAMF/ManagementFrameworkScripts/loginhook.sh\",\n \"/Library/Application Support/JAMF/ManagementFrameworkScripts/logouthook.sh\",\n \"/Library/Application Support/JAMF/ManagementFrameworkScripts/loginhook.sh\"\n )\n", + "references": [ + "https://www.virusbulletin.com/uploads/pdf/conference_slides/2014/Wardle-VB2014.pdf", + "https://www.manpagez.com/man/1/defaults/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5d0265bf-dea9-41a9-92ad-48a8dcd05080", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "5d0265bf-dea9-41a9-92ad-48a8dcd05080_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5d1d6907-0747-4d5d-9b24-e4a18853dc0a_107.json b/packages/security_detection_engine/kibana/security_rule/5d1d6907-0747-4d5d-9b24-e4a18853dc0a_107.json new file mode 100644 index 00000000000..1c0e1c17943 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5d1d6907-0747-4d5d-9b24-e4a18853dc0a_107.json @@ -0,0 +1,141 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution of a suspicious program via scheduled tasks by looking at process lineage and command line usage.", + "false_positives": [ + "Legitimate scheduled tasks running third party software." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Execution via Scheduled Task", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n /* Schedule service cmdline on Win10+ */\n process.parent.name : \"svchost.exe\" and process.parent.args : \"Schedule\" and\n /* add suspicious programs here */\n process.pe.original_file_name in\n (\n \"cscript.exe\",\n \"wscript.exe\",\n \"PowerShell.EXE\",\n \"Cmd.Exe\",\n \"MSHTA.EXE\",\n \"RUNDLL32.EXE\",\n \"REGSVR32.EXE\",\n \"MSBuild.exe\",\n \"InstallUtil.exe\",\n \"RegAsm.exe\",\n \"RegSvcs.exe\",\n \"msxsl.exe\",\n \"CONTROL.EXE\",\n \"EXPLORER.EXE\",\n \"Microsoft.Workflow.Compiler.exe\",\n \"msiexec.exe\"\n ) and\n /* add suspicious paths here */\n process.args : (\n \"C:\\\\Users\\\\*\",\n \"C:\\\\ProgramData\\\\*\",\n \"C:\\\\Windows\\\\Temp\\\\*\",\n \"C:\\\\Windows\\\\Tasks\\\\*\",\n \"C:\\\\PerfLogs\\\\*\",\n \"C:\\\\Intel\\\\*\",\n \"C:\\\\Windows\\\\Debug\\\\*\",\n \"C:\\\\HP\\\\*\") and\n\n not (process.name : \"cmd.exe\" and process.args : \"?:\\\\*.bat\" and process.working_directory : \"?:\\\\Windows\\\\System32\\\\\") and\n not (process.name : \"cscript.exe\" and process.args : \"?:\\\\Windows\\\\system32\\\\calluxxprovider.vbs\") and\n not (process.name : \"powershell.exe\" and process.args : (\"-File\", \"-PSConsoleFile\") and user.id : \"S-1-5-18\") and\n not (process.name : \"msiexec.exe\" and user.id : \"S-1-5-18\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5d1d6907-0747-4d5d-9b24-e4a18853dc0a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "5d1d6907-0747-4d5d-9b24-e4a18853dc0a_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5d9f8cfc-0d03-443e-a167-2b0597ce0965_106.json b/packages/security_detection_engine/kibana/security_rule/5d9f8cfc-0d03-443e-a167-2b0597ce0965_106.json new file mode 100644 index 00000000000..efdc02f4a80 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5d9f8cfc-0d03-443e-a167-2b0597ce0965_106.json @@ -0,0 +1,79 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the Automator Workflows process followed by a network connection from it's XPC service. Adversaries may drop a custom workflow template that hosts malicious JavaScript for Automation (JXA) code as an alternative to using osascript.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Automator Workflows Execution", + "query": "sequence by host.id with maxspan=30s\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name == \"automator\"]\n [network where host.os.type == \"macos\" and process.name:\"com.apple.automator.runner\"]\n", + "references": [ + "https://posts.specterops.io/persistent-jxa-66e1c3cd1cf5" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "5d9f8cfc-0d03-443e-a167-2b0597ce0965", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "5d9f8cfc-0d03-443e-a167-2b0597ce0965_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/5e552599-ddec-4e14-bad1-28aa42404388_105.json b/packages/security_detection_engine/kibana/security_rule/5e552599-ddec-4e14-bad1-28aa42404388_105.json new file mode 100644 index 00000000000..b1b257f4c34 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/5e552599-ddec-4e14-bad1-28aa42404388_105.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when guest access is enabled in Microsoft Teams. Guest access in Teams allows people outside the organization to access teams and channels. An adversary may enable guest access to maintain persistence in an environment.", + "false_positives": [ + "Teams guest access may be enabled by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Teams Guest Access Enabled", + "note": "", + "query": "event.dataset:o365.audit and event.provider:(SkypeForBusiness or MicrosoftTeams) and\nevent.category:web and event.action:\"Set-CsTeamsClientConfiguration\" and\no365.audit.Parameters.AllowGuestUser:True and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/skype/get-csteamsclientconfiguration?view=skype-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.AllowGuestUser", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "5e552599-ddec-4e14-bad1-28aa42404388", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "5e552599-ddec-4e14-bad1-28aa42404388_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/60f3adec-1df9-4104-9c75-b97d9f078b25_105.json b/packages/security_detection_engine/kibana/security_rule/60f3adec-1df9-4104-9c75-b97d9f078b25_105.json new file mode 100644 index 00000000000..a91be9bc705 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/60f3adec-1df9-4104-9c75-b97d9f078b25_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a Data Loss Prevention (DLP) policy is removed in Microsoft 365. An adversary may remove a DLP policy to evade existing DLP monitoring.", + "false_positives": [ + "A DLP policy may be removed by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange DLP Policy Removed", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Remove-DlpPolicy\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-dlppolicy?view=exchange-ps", + "https://docs.microsoft.com/en-us/microsoft-365/compliance/data-loss-prevention-policies?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "60f3adec-1df9-4104-9c75-b97d9f078b25", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "60f3adec-1df9-4104-9c75-b97d9f078b25_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/610949a1-312f-4e04-bb55-3a79b8c95267_107.json b/packages/security_detection_engine/kibana/security_rule/610949a1-312f-4e04-bb55-3a79b8c95267_107.json new file mode 100644 index 00000000000..4281e5c7e10 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/610949a1-312f-4e04-bb55-3a79b8c95267_107.json @@ -0,0 +1,84 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies network activity from unexpected system applications. This may indicate adversarial activity as these applications are often leveraged by adversaries to execute code and evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Process Network Connection", + "note": "## Triage and analysis\n\n### Investigating Unusual Process Network Connection\n\nThis rule identifies network activity from unexpected system utilities and applications. These applications are commonly abused by attackers to execute code, evade detections, and bypass security protections.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the target host that the process is communicating with.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and (process.name : \"Microsoft.Workflow.Compiler.exe\" or\n process.name : \"bginfo.exe\" or\n process.name : \"cdb.exe\" or\n process.name : \"cmstp.exe\" or\n process.name : \"csi.exe\" or\n process.name : \"dnx.exe\" or\n process.name : \"fsi.exe\" or\n process.name : \"ieexec.exe\" or\n process.name : \"iexpress.exe\" or\n process.name : \"odbcconf.exe\" or\n process.name : \"rcsi.exe\" or\n process.name : \"xwizard.exe\") and\n event.type == \"start\"]\n [network where host.os.type == \"windows\" and (process.name : \"Microsoft.Workflow.Compiler.exe\" or\n process.name : \"bginfo.exe\" or\n process.name : \"cdb.exe\" or\n process.name : \"cmstp.exe\" or\n process.name : \"csi.exe\" or\n process.name : \"dnx.exe\" or\n process.name : \"fsi.exe\" or\n process.name : \"ieexec.exe\" or\n process.name : \"iexpress.exe\" or\n process.name : \"odbcconf.exe\" or\n process.name : \"rcsi.exe\" or\n process.name : \"xwizard.exe\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "610949a1-312f-4e04-bb55-3a79b8c95267", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/" + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "610949a1-312f-4e04-bb55-3a79b8c95267_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/61766ef9-48a5-4247-ad74-3349de7eb2ad_3.json b/packages/security_detection_engine/kibana/security_rule/61766ef9-48a5-4247-ad74-3349de7eb2ad_3.json new file mode 100644 index 00000000000..b5551e8490e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/61766ef9-48a5-4247-ad74-3349de7eb2ad_3.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies interactive logon attempt with alternate credentials and by an unusual process. Adversaries may create a new token to escalate privileges and bypass access controls.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Interactive Logon by an Unusual Process", + "query": "authentication where \n host.os.type : \"windows\" and winlog.event_data.LogonProcessName : \"Advapi*\" and \n winlog.logon.type == \"Interactive\" and winlog.event_data.SubjectUserSid : (\"S-1-5-21*\", \"S-1-12-*\") and \n winlog.event_data.TargetUserSid : (\"S-1-5-21*\", \"S-1-12-*\") and process.executable : \"C:\\\\*\" and \n not startswith~(winlog.event_data.SubjectUserSid, winlog.event_data.TargetUserSid) and \n not process.executable : \n (\"?:\\\\Windows\\\\System32\\\\winlogon.exe\", \n \"?:\\\\Windows\\\\System32\\\\wininit.exe\", \n \"?:\\\\Program Files\\\\*.exe\", \n \"?:\\\\Program Files (x86)\\\\*.exe\", \n \"?:\\\\Windows\\\\SysWOW64\\\\inetsrv\\\\w3wp.exe\", \n \"?:\\\\Windows\\\\System32\\\\inetsrv\\\\w3wp.exe\", \n \"?:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\")\n", + "references": [ + "https://attack.mitre.org/techniques/T1134/002/" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.LogonProcessName", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserSid", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetUserSid", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.logon.type", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "61766ef9-48a5-4247-ad74-3349de7eb2ad", + "setup": "## Setup\n\nAudit event 4624 is needed to trigger this rule.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/", + "subtechnique": [ + { + "id": "T1134.002", + "name": "Create Process with Token", + "reference": "https://attack.mitre.org/techniques/T1134/002/" + }, + { + "id": "T1134.003", + "name": "Make and Impersonate Token", + "reference": "https://attack.mitre.org/techniques/T1134/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "61766ef9-48a5-4247-ad74-3349de7eb2ad_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/61ac3638-40a3-44b2-855a-985636ca985e_113.json b/packages/security_detection_engine/kibana/security_rule/61ac3638-40a3-44b2-855a-985636ca985e_113.json new file mode 100644 index 00000000000..49957d049c6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/61ac3638-40a3-44b2-855a-985636ca985e_113.json @@ -0,0 +1,160 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects the use of discovery-related Windows API functions in PowerShell Scripts. Attackers can use these functions to perform various situational awareness related activities, like enumerating users, shares, sessions, domain trusts, groups, etc.", + "false_positives": [ + "Legitimate PowerShell scripts that make use of these functions." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Suspicious Discovery Related Windows API Functions", + "note": "## Triage and analysis\n\n### Investigating PowerShell Suspicious Discovery Related Windows API Functions\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can use PowerShell to interact with the Win32 API to bypass command line based detections, using libraries like PSReflect or Get-ProcAddress Cmdlet.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Check for additional PowerShell and command-line logs that indicate that imported functions were run.\n\n### False positive analysis\n\n- Discovery activities themselves are not inherently malicious if occurring in isolation, as long as the script does not contain other capabilities, and there are no other alerts related to the user or host; such alerts can be dismissed. However, analysts should keep in mind that this is not a common way of getting information, making it suspicious.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n NetShareEnum or\n NetWkstaUserEnum or\n NetSessionEnum or\n NetLocalGroupEnum or\n NetLocalGroupGetMembers or\n DsGetSiteName or\n DsEnumerateDomainTrusts or\n WTSEnumerateSessionsEx or\n WTSQuerySessionInformation or\n LsaGetLogonSessionData or\n QueryServiceObjectSecurity or\n GetComputerNameEx or\n NetWkstaGetInfo or\n GetUserNameEx or\n NetUserEnum or\n NetUserGetInfo or\n NetGroupEnum or\n NetGroupGetInfo or\n NetGroupGetUsers or\n NetWkstaTransportEnum or\n NetServerGetInfo or\n LsaEnumerateTrustedDomains or\n NetScheduleJobEnum or\n NetUserModalsGet\n )\n and not file.path : ?\\:\\\\\\\\ProgramData\\\\\\\\Microsoft\\\\\\\\Windows?Defender?Advanced?Threat?Protection\\\\\\\\DataCollection\\\\\\\\*\n", + "references": [ + "https://github.com/BC-SECURITY/Empire/blob/9259e5106986847d2bb770c4289c0c0f1adf2344/data/module_source/situational_awareness/network/powerview.ps1#L21413", + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "61ac3638-40a3-44b2-855a-985636ca985e", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Collection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.001", + "name": "Local Groups", + "reference": "https://attack.mitre.org/techniques/T1069/001/" + } + ] + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + } + ] + }, + { + "id": "T1482", + "name": "Domain Trust Discovery", + "reference": "https://attack.mitre.org/techniques/T1482/" + }, + { + "id": "T1135", + "name": "Network Share Discovery", + "reference": "https://attack.mitre.org/techniques/T1135/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1039", + "name": "Data from Network Shared Drive", + "reference": "https://attack.mitre.org/techniques/T1039/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 113 + }, + "id": "61ac3638-40a3-44b2-855a-985636ca985e_113", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110.json b/packages/security_detection_engine/kibana/security_rule/61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110.json new file mode 100644 index 00000000000..3d8e08d7c65 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a modification on the dsHeuristics attribute on the bit that holds the configuration of groups excluded from the SDProp process. The SDProp compares the permissions on protected objects with those defined on the AdminSDHolder object. If the permissions on any of the protected accounts and groups do not match, the permissions on the protected accounts and groups are reset to match those of the domain's AdminSDHolder object, meaning that groups excluded will remain unchanged. Attackers can abuse this misconfiguration to maintain long-term access to privileged accounts in these groups.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "AdminSDHolder SDProp Exclusion Added", + "note": "## Triage and analysis\n\n### Investigating AdminSDHolder SDProp Exclusion Added\n\nThe SDProp process compares the permissions on protected objects with those defined on the AdminSDHolder object. If the permissions on any of the protected accounts and groups do not match, it resets the permissions on the protected accounts and groups to match those defined in the domain AdminSDHolder object.\n\nThe dSHeuristics is a Unicode string attribute, in which each character in the string represents a heuristic that is used to determine the behavior of Active Directory.\n\nAdministrators can use the dSHeuristics attribute to exclude privilege groups from the SDProp process by setting the 16th bit (dwAdminSDExMask) of the string to a certain value, which represents the group(s):\n\n- For example, to exclude the Account Operators group, an administrator would modify the string, so the 16th character is set to 1 (i.e., 0000000001000001).\n\nThe usage of this exclusion can leave the accounts unprotected and facilitate the misconfiguration of privileges for the excluded groups, enabling attackers to add accounts to these groups to maintain long-term persistence with high privileges.\n\nThis rule matches changes of the dsHeuristics object where the 16th bit is set to a value other than zero.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check the value assigned to the 16th bit of the string on the `winlog.event_data.AttributeValue` field:\n - Account Operators eq 1\n - Server Operators eq 2\n - Print Operators eq 4\n - Backup Operators eq 8\n The field value can range from 0 to f (15). If more than one group is specified, the values will be summed together; for example, Backup Operators and Print Operators will set the `c` value on the bit.\n\n### False positive analysis\n\n- While this modification can be done legitimately, it is not a best practice. Any potential benign true positive (B-TP) should be mapped and reviewed by the security team for alternatives as this weakens the security of the privileged group.\n\n### Response and remediation\n\n- The change can be reverted by setting the dwAdminSDExMask (16th bit) to 0 in dSHeuristics.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where event.action == \"Directory Service Changes\" and\n event.code == \"5136\" and\n winlog.event_data.AttributeLDAPDisplayName : \"dSHeuristics\" and\n length(winlog.event_data.AttributeValue) > 15 and\n winlog.event_data.AttributeValue regex~ \"[0-9]{15}([1-9a-f]).*\"\n", + "references": [ + "https://www.cert.ssi.gouv.fr/uploads/guide-ad.html#dsheuristics_bad", + "https://petri.com/active-directory-security-understanding-adminsdholder-object" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeValue", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7", + "setup": "## Setup\n\nThe 'Audit Directory Service Changes' logging policy must be configured for (Success).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success)\n```\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + }, + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "61d29caf-6c15-4d1e-9ccb-7ad12ccc0bc7_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/622ecb68-fa81-4601-90b5-f8cd661e4520_106.json b/packages/security_detection_engine/kibana/security_rule/622ecb68-fa81-4601-90b5-f8cd661e4520_106.json new file mode 100644 index 00000000000..6da93aaac35 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/622ecb68-fa81-4601-90b5-f8cd661e4520_106.json @@ -0,0 +1,149 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of Distributed Component Object Model (DCOM) to execute commands from a remote host, which are launched via the HTA Application COM Object. This behavior may indicate an attacker abusing a DCOM application to move laterally while attempting to evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Incoming DCOM Lateral Movement via MSHTA", + "query": "sequence with maxspan=1m\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"mshta.exe\" and process.args : \"-Embedding\"\n ] by host.id, process.entity_id\n [network where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"mshta.exe\" and\n network.direction : (\"incoming\", \"ingress\") and network.transport == \"tcp\" and\n source.port > 49151 and destination.port > 49151 and source.ip != \"127.0.0.1\" and source.ip != \"::1\"\n ] by host.id, process.entity_id\n", + "references": [ + "https://codewhitesec.blogspot.com/2018/07/lethalhta.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 73, + "rule_id": "622ecb68-fa81-4601-90b5-f8cd661e4520", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.003", + "name": "Distributed Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1021/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.005", + "name": "Mshta", + "reference": "https://attack.mitre.org/techniques/T1218/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "622ecb68-fa81-4601-90b5-f8cd661e4520_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/62b68eb2-1e47-4da7-85b6-8f478db5b272_4.json b/packages/security_detection_engine/kibana/security_rule/62b68eb2-1e47-4da7-85b6-8f478db5b272_4.json new file mode 100644 index 00000000000..66c1f7b2d4e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/62b68eb2-1e47-4da7-85b6-8f478db5b272_4.json @@ -0,0 +1,112 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies potentially malicious processes communicating via a port paring typically not associated with HTTP/HTTPS. For example, HTTP over port 8443 or port 440 as opposed to the traditional port 80 , 443. Adversaries may make changes to the standard port a protocol uses to bypass filtering or muddle analysis/parsing of network data.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Non-Standard Port HTTP/HTTPS connection", + "note": "## Triage and analysis\n\n### Investigating Potential Non-Standard Port HTTP/HTTPS connection\n\nAttackers may alter standard protocol ports, like using HTTP on port 8443 instead of 80, to bypass network filtering and complicate network data analysis. \n\nThis rule looks for HTTP/HTTPS processes where the destination port is not any of the default 80/443 HTTP/HTTPS ports. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate command and control activity or data exfiltration. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential suspicious network traffic, reverse shells or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Suspicious Network Activity to the Internet by Previously Unknown Executable - 53617418-17b4-4e9c-8a2c-8deb8086ca4b\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "network where process.name : (\"http\", \"https\") and destination.port not in (80, 443) and event.action in (\n \"connection_attempted\", \"ipv4_connection_attempt_event\", \"connection_accepted\", \"ipv4_connection_accept_event\"\n) and destination.ip != \"127.0.0.1\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "62b68eb2-1e47-4da7-85b6-8f478db5b272", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1571", + "name": "Non-Standard Port", + "reference": "https://attack.mitre.org/techniques/T1571/" + }, + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/", + "subtechnique": [ + { + "id": "T1071.001", + "name": "Web Protocols", + "reference": "https://attack.mitre.org/techniques/T1071/001/" + } + ] + }, + { + "id": "T1573", + "name": "Encrypted Channel", + "reference": "https://attack.mitre.org/techniques/T1573/", + "subtechnique": [ + { + "id": "T1573.001", + "name": "Symmetric Cryptography", + "reference": "https://attack.mitre.org/techniques/T1573/001/" + }, + { + "id": "T1573.002", + "name": "Asymmetric Cryptography", + "reference": "https://attack.mitre.org/techniques/T1573/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "62b68eb2-1e47-4da7-85b6-8f478db5b272_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/63e65ec3-43b1-45b0-8f2d-45b34291dc44_107.json b/packages/security_detection_engine/kibana/security_rule/63e65ec3-43b1-45b0-8f2d-45b34291dc44_107.json new file mode 100644 index 00000000000..22be1e84ba7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/63e65ec3-43b1-45b0-8f2d-45b34291dc44_107.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Binaries signed with trusted digital certificates can execute on Windows systems protected by digital signature validation. Adversaries may use these binaries to 'live off the land' and execute malicious files that could bypass application allowlists and signature validation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via Signed Binary", + "note": "## Triage and analysis\n\n### Investigating Network Connection via Signed Binary\n\nBy examining the specific traits of Windows binaries (such as process trees, command lines, network connections, registry modifications, and so on) it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity, such as masquerading and deserve further investigation.\n\nThis rule looks for the execution of `expand.exe`, `extrac32.exe`, `ieexec.exe`, or `makecab.exe` utilities, followed by a network connection to an external address. Attackers can abuse utilities to execute malicious files or masquerade as those utilities to bypass detections and evade defenses.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n - Investigate the file digital signature and process original filename, if suspicious, treat it as potential malware.\n- Investigate the target host that the signed binary is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of destination IP address and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and (process.name : \"expand.exe\" or process.name : \"extrac32.exe\" or\n process.name : \"ieexec.exe\" or process.name : \"makecab.exe\") and\n event.type == \"start\"]\n [network where host.os.type == \"windows\" and (process.name : \"expand.exe\" or process.name : \"extrac32.exe\" or\n process.name : \"ieexec.exe\" or process.name : \"makecab.exe\") and\n not cidrmatch(destination.ip,\n \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\", \"192.0.0.8/32\",\n \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\", \"192.31.196.0/24\",\n \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\", \"192.175.48.0/24\",\n \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\", \"FF00::/8\")]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "63e65ec3-43b1-45b0-8f2d-45b34291dc44", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "63e65ec3-43b1-45b0-8f2d-45b34291dc44_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6482255d-f468-45ea-a5b3-d3a7de1331ae_106.json b/packages/security_detection_engine/kibana/security_rule/6482255d-f468-45ea-a5b3-d3a7de1331ae_106.json new file mode 100644 index 00000000000..cf98d2e80c7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6482255d-f468-45ea-a5b3-d3a7de1331ae_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies changes to the Safari configuration using the built-in defaults command. Adversaries may attempt to enable or disable certain Safari settings, such as enabling JavaScript from Apple Events to ease in the hijacking of the users browser.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Modification of Safari Settings via Defaults Command", + "query": "event.category:process and host.os.type:macos and event.type:start and\n process.name:defaults and process.args:\n (com.apple.Safari and write and not\n (\n UniversalSearchEnabled or\n SuppressSearchSuggestions or\n WebKitTabToLinksPreferenceKey or\n ShowFullURLInSmartSearchField or\n com.apple.Safari.ContentPageGroupIdentifier.WebKit2TabsToLinks\n )\n )\n", + "references": [ + "https://objectivebythesea.com/v2/talks/OBTS_v2_Zohar.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6482255d-f468-45ea-a5b3-d3a7de1331ae", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "6482255d-f468-45ea-a5b3-d3a7de1331ae_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/64cfca9e-0f6f-4048-8251-9ec56a055e9e_5.json b/packages/security_detection_engine/kibana/security_rule/64cfca9e-0f6f-4048-8251-9ec56a055e9e_5.json new file mode 100644 index 00000000000..4519c356a30 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/64cfca9e-0f6f-4048-8251-9ec56a055e9e_5.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors a sequence involving a program compilation event followed by its execution and a subsequent network connection event. This behavior can indicate the set up of a reverse tcp connection to a command-and-control server. Attackers may spawn reverse shells to establish persistence onto a target system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via Recently Compiled Executable", + "query": "sequence by host.id with maxspan=1m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name in (\"gcc\", \"g++\", \"cc\")] by process.args\n [file where host.os.type == \"linux\" and event.action == \"creation\" and process.name == \"ld\"] by file.name\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\"] by process.name\n [network where host.os.type == \"linux\" and event.action == \"connection_attempted\" and destination.ip != null and \n not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")] by process.name\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "64cfca9e-0f6f-4048-8251-9ec56a055e9e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 5 + }, + "id": "64cfca9e-0f6f-4048-8251-9ec56a055e9e_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/661545b4-1a90-4f45-85ce-2ebd7c6a15d0_107.json b/packages/security_detection_engine/kibana/security_rule/661545b4-1a90-4f45-85ce-2ebd7c6a15d0_107.json new file mode 100644 index 00000000000..40433fdffa2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/661545b4-1a90-4f45-85ce-2ebd7c6a15d0_107.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of macOS built-in commands to mount a Server Message Block (SMB) network share. Adversaries may use valid accounts to interact with a remote network share using SMB.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Attempt to Mount SMB Share via Command Line", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n (\n process.name : \"mount_smbfs\" or\n (process.name : \"open\" and process.args : \"smb://*\") or\n (process.name : \"mount\" and process.args : \"smbfs\") or\n (process.name : \"osascript\" and process.command_line : \"osascript*mount volume*smb://*\")\n ) and\n not process.parent.executable : \"/Applications/Google Drive.app/Contents/MacOS/Google Drive\"\n", + "references": [ + "https://www.freebsd.org/cgi/man.cgi?mount_smbfs", + "https://ss64.com/osx/mount.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "661545b4-1a90-4f45-85ce-2ebd7c6a15d0", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.002", + "name": "SMB/Windows Admin Shares", + "reference": "https://attack.mitre.org/techniques/T1021/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "661545b4-1a90-4f45-85ce-2ebd7c6a15d0_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6641a5af-fb7e-487a-adc4-9e6503365318_6.json b/packages/security_detection_engine/kibana/security_rule/6641a5af-fb7e-487a-adc4-9e6503365318_6.json new file mode 100644 index 00000000000..4a80c88c502 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6641a5af-fb7e-487a-adc4-9e6503365318_6.json @@ -0,0 +1,82 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where VMware processes, such as \"vmware-vmx\" or \"vmx,\" are terminated on a Linux system by a \"kill\" command. The rule monitors for the \"end\" event type, which signifies the termination of a process. The presence of a \"kill\" command as the parent process for terminating VMware processes may indicate that a threat actor is attempting to interfere with the virtualized environment on the targeted system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Termination of ESXI Process", + "query": "process where host.os.type == \"linux\" and event.type == \"end\" and process.name in (\"vmware-vmx\", \"vmx\")\nand process.parent.name == \"kill\"\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6641a5af-fb7e-487a-adc4-9e6503365318", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Impact", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1489", + "name": "Service Stop", + "reference": "https://attack.mitre.org/techniques/T1489/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "6641a5af-fb7e-487a-adc4-9e6503365318_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/665e7a4f-c58e-4fc6-bc83-87a7572670ac_105.json b/packages/security_detection_engine/kibana/security_rule/665e7a4f-c58e-4fc6-bc83-87a7572670ac_105.json new file mode 100644 index 00000000000..8426e58fcb6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/665e7a4f-c58e-4fc6-bc83-87a7572670ac_105.json @@ -0,0 +1,77 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the deletion of WebServer access logs. This may indicate an attempt to evade detection or destroy forensic evidence on a system.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "WebServer Access Logs Deleted", + "query": "file where event.type == \"deletion\" and\n file.path : (\"C:\\\\inetpub\\\\logs\\\\LogFiles\\\\*.log\",\n \"/var/log/apache*/access.log\",\n \"/etc/httpd/logs/access_log\",\n \"/var/log/httpd/access_log\",\n \"/var/www/*/logs/access.log\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "665e7a4f-c58e-4fc6-bc83-87a7572670ac", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: Windows", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 105 + }, + "id": "665e7a4f-c58e-4fc6-bc83-87a7572670ac_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/66712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7.json b/packages/security_detection_engine/kibana/security_rule/66712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7.json new file mode 100644 index 00000000000..2d198430803 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/66712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An FTP (file transfer protocol) brute force attack is a method where an attacker systematically tries different combinations of usernames and passwords to gain unauthorized access to an FTP server, and if successful, the impact can include unauthorized data access, manipulation, or theft, compromising the security and integrity of the server and potentially exposing sensitive information. This rule identifies multiple consecutive authentication failures targeting a specific user account from the same source address and within a short time interval, followed by a successful authentication.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Successful Linux FTP Brute Force Attack Detected", + "query": "sequence by host.id, auditd.data.addr, related.user with maxspan=5s\n [authentication where host.os.type == \"linux\" and event.action == \"authenticated\" and\n auditd.data.terminal == \"ftp\" and event.outcome == \"failure\" and auditd.data.addr != null and\n auditd.data.addr != \"0.0.0.0\" and auditd.data.addr != \"::\"] with runs=10\n [authentication where host.os.type == \"linux\" and event.action == \"authenticated\" and\n auditd.data.terminal == \"ftp\" and event.outcome == \"success\" and auditd.data.addr != null and\n auditd.data.addr != \"0.0.0.0\" and auditd.data.addr != \"::\"] | tail 1\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.addr", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.terminal", + "type": "unknown" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "related.user", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "66712812-e7f2-4a1d-bbda-dd0b5cf20c5d", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Auditbeat\n- Auditd Manager\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule no additional audit rules are required to be added to the integration.\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "66712812-e7f2-4a1d-bbda-dd0b5cf20c5d_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/66c058f3-99f4-4d18-952b-43348f2577a0_3.json b/packages/security_detection_engine/kibana/security_rule/66c058f3-99f4-4d18-952b-43348f2577a0_3.json new file mode 100644 index 00000000000..6edd3236ef1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/66c058f3-99f4-4d18-952b-43348f2577a0_3.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for potential memory dumping through gdb. Attackers may leverage memory dumping techniques to attempt secret extraction from privileged processes. Tools that display this behavior include \"truffleproc\" and \"bash-memory-dump\". This behavior should not happen by default, and should be investigated thoroughly.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux Process Hooking via GDB", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"gdb\" and process.args in (\"--pid\", \"-p\") and \n/* Covered by d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f */\nprocess.args != \"1\"\n", + "references": [ + "https://github.com/controlplaneio/truffleproc", + "https://github.com/hajzer/bash-memory-dump" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "66c058f3-99f4-4d18-952b-43348f2577a0", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.007", + "name": "Proc Filesystem", + "reference": "https://attack.mitre.org/techniques/T1003/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "66c058f3-99f4-4d18-952b-43348f2577a0_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/66da12b1-ac83-40eb-814c-07ed1d82b7b9_106.json b/packages/security_detection_engine/kibana/security_rule/66da12b1-ac83-40eb-814c-07ed1d82b7b9_106.json new file mode 100644 index 00000000000..aeb5b2a1f18 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/66da12b1-ac83-40eb-814c-07ed1d82b7b9_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious child processes of frequently targeted Microsoft Office applications (Word, PowerPoint, and Excel). These child processes are often launched during exploitation of Office applications or by documents with malicious macros.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious macOS MS Office Child Process", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.parent.name:(\"Microsoft Word\", \"Microsoft PowerPoint\", \"Microsoft Excel\") and\n process.name:\n (\n \"bash\",\n \"dash\",\n \"sh\",\n \"tcsh\",\n \"csh\",\n \"zsh\",\n \"ksh\",\n \"fish\",\n \"python*\",\n \"perl*\",\n \"php*\",\n \"osascript\",\n \"pwsh\",\n \"curl\",\n \"wget\",\n \"cp\",\n \"mv\",\n \"base64\",\n \"launchctl\"\n ) and\n /* noisy false positives related to product version discovery and office errors reporting */\n not process.args:\n (\n \"ProductVersion\",\n \"hw.model\",\n \"ioreg\",\n \"ProductName\",\n \"ProductUserVisibleVersion\",\n \"ProductBuildVersion\",\n \"/Library/Application Support/Microsoft/MERP*/Microsoft Error Reporting.app/Contents/MacOS/Microsoft Error Reporting\"\n )\n", + "references": [ + "https://blog.malwarebytes.com/cybercrime/2017/02/microsoft-office-macro-malware-targets-macs/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "66da12b1-ac83-40eb-814c-07ed1d82b7b9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "66da12b1-ac83-40eb-814c-07ed1d82b7b9_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/670b3b5a-35e5-42db-bd36-6c5b9b4b7313_9.json b/packages/security_detection_engine/kibana/security_rule/670b3b5a-35e5-42db-bd36-6c5b9b4b7313_9.json new file mode 100644 index 00000000000..b77be0ff015 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/670b3b5a-35e5-42db-bd36-6c5b9b4b7313_9.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identify the modification of the msPKIAccountCredentials attribute in an Active Directory User Object. Attackers can abuse the credentials roaming feature to overwrite an arbitrary file for privilege escalation. ms-PKI-AccountCredentials contains binary large objects (BLOBs) of encrypted credential objects from the credential manager store, private keys, certificates, and certificate requests.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Modification of the msPKIAccountCredentials", + "query": "event.action:\"Directory Service Changes\" and event.code:\"5136\" and\n winlog.event_data.AttributeLDAPDisplayName:\"msPKIAccountCredentials\" and winlog.event_data.OperationType:\"%%14674\" and\n not winlog.event_data.SubjectUserSid : \"S-1-5-18\"\n", + "references": [ + "https://www.mandiant.com/resources/blog/apt29-windows-credential-roaming", + "https://social.technet.microsoft.com/wiki/contents/articles/11483.windows-credential-roaming.aspx", + "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-5136" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.OperationType", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserSid", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "670b3b5a-35e5-42db-bd36-6c5b9b4b7313", + "setup": "## Setup\n\nThe 'Audit Directory Service Changes' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Data Source: Active Directory", + "Tactic: Privilege Escalation", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 9 + }, + "id": "670b3b5a-35e5-42db-bd36-6c5b9b4b7313_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/675239ea-c1bc-4467-a6d3-b9e2cc7f676d_105.json b/packages/security_detection_engine/kibana/security_rule/675239ea-c1bc-4467-a6d3-b9e2cc7f676d_105.json new file mode 100644 index 00000000000..16b5cb248fb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/675239ea-c1bc-4467-a6d3-b9e2cc7f676d_105.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the occurrence of mailbox audit bypass associations. The mailbox audit is responsible for logging specified mailbox events (like accessing a folder or a message or permanently deleting a message). However, actions taken by some authorized accounts, such as accounts used by third-party tools or accounts used for lawful monitoring, can create a large number of mailbox audit log entries and may not be of interest to your organization. Because of this, administrators can create bypass associations, allowing certain accounts to perform their tasks without being logged. Attackers can abuse this allowlist mechanism to conceal actions taken, as the mailbox audit will log no activity done by the account.", + "false_positives": [ + "Legitimate allowlisting of noisy accounts" + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "O365 Mailbox Audit Logging Bypass", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.action:Set-MailboxAuditBypassAssociation and event.outcome:success\n", + "references": [ + "https://twitter.com/misconfig/status/1476144066807140355" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "675239ea-c1bc-4467-a6d3-b9e2cc7f676d", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Tactic: Initial Access", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "675239ea-c1bc-4467-a6d3-b9e2cc7f676d_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/67f8443a-4ff3-4a70-916d-3cfa3ae9f02b_112.json b/packages/security_detection_engine/kibana/security_rule/67f8443a-4ff3-4a70-916d-3cfa3ae9f02b_112.json new file mode 100644 index 00000000000..eda17391128 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/67f8443a-4ff3-4a70-916d-3cfa3ae9f02b_112.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies a high number (10) of process terminations via pkill from the same host within a short time period.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "High Number of Process Terminations", + "note": "## Triage and analysis\n\n### Investigating High Number of Process Terminations\n\nAttackers can kill processes for a variety of purposes. For example, they can kill process associated with business applications and databases to release the lock on files used by these applications so they may be encrypted,or stop security and backup solutions, etc.\n\nThis rule identifies a high number (10) of process terminations via pkill from the same host within a short time period.\n\n#### Possible investigation steps\n\n- Examine the entry point to the host and user in action via the Analyse View.\n - Identify the session entry leader and session user.\n- Examine the contents of session leading to the process termination(s) via the Session View.\n - Examine the command execution pattern in the session, which may lead to suspricous activities.\n- Examine the process killed during the malicious execution\n - Identify imment threat to the system from the process killed.\n - Take necessary incident response actions to respawn necessary process.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further destructive behavior, which is commonly associated with this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system or restore it to the operational state.\n- If any other destructive action was identified on the host, it is recommended to prioritize the investigation and look for ransomware preparation and execution activities.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:linux and event.type:start and process.name:\"pkill\" and process.args:\"-f\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "67f8443a-4ff3-4a70-916d-3cfa3ae9f02b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1489", + "name": "Service Stop", + "reference": "https://attack.mitre.org/techniques/T1489/" + } + ] + } + ], + "threshold": { + "field": [ + "host.id", + "process.executable", + "user.name" + ], + "value": 10 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 112 + }, + "id": "67f8443a-4ff3-4a70-916d-3cfa3ae9f02b_112", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6839c821-011d-43bd-bd5b-acff00257226_106.json b/packages/security_detection_engine/kibana/security_rule/6839c821-011d-43bd-bd5b-acff00257226_106.json new file mode 100644 index 00000000000..df341f91423 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6839c821-011d-43bd-bd5b-acff00257226_106.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "The Debugger and SilentProcessExit registry keys can allow an adversary to intercept the execution of files, causing a different process to be executed. This functionality can be abused by an adversary to establish persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Image File Execution Options Injection", + "query": "registry where host.os.type == \"windows\" and length(registry.data.strings) > 0 and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Image File Execution Options\\\\*.exe\\\\Debugger\",\n \"HKLM\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Image File Execution Options\\\\*\\\\Debugger\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\SilentProcessExit\\\\*\\\\MonitorProcess\",\n \"HKLM\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\SilentProcessExit\\\\*\\\\MonitorProcess\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Image File Execution Options\\\\*.exe\\\\Debugger\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Image File Execution Options\\\\*\\\\Debugger\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\SilentProcessExit\\\\*\\\\MonitorProcess\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\SilentProcessExit\\\\*\\\\MonitorProcess\"\n ) and\n /* add FPs here */\n not registry.data.strings regex~ (\"\"\"C:\\\\Program Files( \\(x86\\))?\\\\ThinKiosk\\\\thinkiosk\\.exe\"\"\", \"\"\".*\\\\PSAppDeployToolkit\\\\.*\"\"\")\n", + "references": [ + "https://oddvar.moe/2018/04/10/persistence-using-globalflags-in-image-file-execution-options-hidden-from-autoruns-exe/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6839c821-011d-43bd-bd5b-acff00257226", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.012", + "name": "Image File Execution Options Injection", + "reference": "https://attack.mitre.org/techniques/T1546/012/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "6839c821-011d-43bd-bd5b-acff00257226_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/684554fc-0777-47ce-8c9b-3d01f198d7f8_105.json b/packages/security_detection_engine/kibana/security_rule/684554fc-0777-47ce-8c9b-3d01f198d7f8_105.json new file mode 100644 index 00000000000..27f9591583e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/684554fc-0777-47ce-8c9b-3d01f198d7f8_105.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies a new or modified federation domain, which can be used to create a trust between O365 and an external identity provider.", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "New or Modified Federation Domain", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:(\"Set-AcceptedDomain\" or\n\"Set-MsolDomainFederationSettings\" or \"Add-FederatedDomain\" or \"New-AcceptedDomain\" or \"Remove-AcceptedDomain\" or \"Remove-FederatedDomain\") and\nevent.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-accepteddomain?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-federateddomain?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-accepteddomain?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/add-federateddomain?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/set-accepteddomain?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/msonline/set-msoldomainfederationsettings?view=azureadps-1.0" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "684554fc-0777-47ce-8c9b-3d01f198d7f8", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "low", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1484", + "name": "Domain Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/", + "subtechnique": [ + { + "id": "T1484.002", + "name": "Domain Trust Modification", + "reference": "https://attack.mitre.org/techniques/T1484/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "684554fc-0777-47ce-8c9b-3d01f198d7f8_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/68921d85-d0dc-48b3-865f-43291ca2c4f2_109.json b/packages/security_detection_engine/kibana/security_rule/68921d85-d0dc-48b3-865f-43291ca2c4f2_109.json new file mode 100644 index 00000000000..9a9ad9b52a9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/68921d85-d0dc-48b3-865f-43291ca2c4f2_109.json @@ -0,0 +1,138 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the successful hijack of Microsoft Compatibility Appraiser scheduled task to establish persistence with an integrity level of system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via TelemetryController Scheduled Task Hijack", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"CompatTelRunner.exe\" and process.args : \"-cv*\" and\n not process.name : (\"conhost.exe\",\n \"DeviceCensus.exe\",\n \"CompatTelRunner.exe\",\n \"DismHost.exe\",\n \"rundll32.exe\",\n \"powershell.exe\")\n", + "references": [ + "https://www.trustedsec.com/blog/abusing-windows-telemetry-for-persistence" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "68921d85-d0dc-48b3-865f-43291ca2c4f2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "68921d85-d0dc-48b3-865f-43291ca2c4f2_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/689b9d57-e4d5-4357-ad17-9c334609d79a_106.json b/packages/security_detection_engine/kibana/security_rule/689b9d57-e4d5-4357-ad17-9c334609d79a_106.json new file mode 100644 index 00000000000..8b1eaa30cb4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/689b9d57-e4d5-4357-ad17-9c334609d79a_106.json @@ -0,0 +1,143 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A scheduled task was created by a Windows script via cscript.exe, wscript.exe or powershell.exe. This can be abused by an adversary to establish persistence.", + "false_positives": [ + "Legitimate scheduled tasks may be created during installation of new software." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Scheduled Task Created by a Windows Script", + "note": "## Triage and analysis\n\nDecode the base64 encoded Tasks Actions registry value to investigate the task's configured action.", + "query": "sequence by host.id with maxspan = 30s\n [any where host.os.type == \"windows\" and \n (event.category : (\"library\", \"driver\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : \"taskschd.dll\" or file.name : \"taskschd.dll\") and\n process.name : (\"cscript.exe\", \"wscript.exe\", \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\")]\n [registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Schedule\\\\TaskCache\\\\Tasks\\\\*\\\\Actions\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Schedule\\\\TaskCache\\\\Tasks\\\\*\\\\Actions\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "689b9d57-e4d5-4357-ad17-9c334609d79a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "689b9d57-e4d5-4357-ad17-9c334609d79a_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/68d56fdc-7ffa-4419-8e95-81641bd6f845_108.json b/packages/security_detection_engine/kibana/security_rule/68d56fdc-7ffa-4419-8e95-81641bd6f845_108.json new file mode 100644 index 00000000000..316c3f70108 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/68d56fdc-7ffa-4419-8e95-81641bd6f845_108.json @@ -0,0 +1,144 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies User Account Control (UAC) bypass attempts via the ICMLuaUtil Elevated COM interface. Attackers may attempt to bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass via ICMLuaUtil Elevated COM Interface", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name == \"dllhost.exe\" and\n process.parent.args in (\"/Processid:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}\", \"/Processid:{D2E7041B-2927-42FB-8E9F-7CE93B6DC937}\") and\n process.pe.original_file_name != \"WerFault.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "68d56fdc-7ffa-4419-8e95-81641bd6f845", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/", + "subtechnique": [ + { + "id": "T1559.001", + "name": "Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1559/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "68d56fdc-7ffa-4419-8e95-81641bd6f845_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/69c251fb-a5d6-4035-b5ec-40438bd829ff_108.json b/packages/security_detection_engine/kibana/security_rule/69c251fb-a5d6-4035-b5ec-40438bd829ff_108.json new file mode 100644 index 00000000000..d1deb033cbb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/69c251fb-a5d6-4035-b5ec-40438bd829ff_108.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of bcdedit.exe to delete boot configuration data. This tactic is sometimes used as by malware or an attacker as a destructive technique.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Modification of Boot Configuration", + "note": "## Triage and analysis\n\n### Investigating Modification of Boot Configuration\n\nBoot entry parameters, or boot parameters, are optional, system-specific settings that represent configuration options. These are stored in a boot configuration data (BCD) store, and administrators can use utilities like `bcdedit.exe` to configure these.\n\nThis rule identifies the usage of `bcdedit.exe` to:\n\n- Disable Windows Error Recovery (recoveryenabled).\n- Ignore errors if there is a failed boot, failed shutdown, or failed checkpoint (bootstatuspolicy ignoreallfailures).\n\nThese are common steps in destructive attacks by adversaries leveraging ransomware.\n\n#### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Check if any files on the host machine have been encrypted.\n\n### False positive analysis\n\n- The usage of these options is not inherently malicious. Administrators can modify these configurations to force a machine to boot for troubleshooting or data recovery purposes.\n\n### Related rules\n\n- Deleting Backup Catalogs with Wbadmin - 581add16-df76-42bb-af8e-c979bfb39a59\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If any other destructive action was identified on the host, it is recommended to prioritize the investigation and look for ransomware preparation and execution activities.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"bcdedit.exe\" or ?process.pe.original_file_name == \"bcdedit.exe\") and\n (\n (process.args : \"/set\" and process.args : \"bootstatuspolicy\" and process.args : \"ignoreallfailures\") or\n (process.args : \"no\" and process.args : \"recoveryenabled\")\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "69c251fb-a5d6-4035-b5ec-40438bd829ff", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "69c251fb-a5d6-4035-b5ec-40438bd829ff_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6a8ab9cc-4023-4d17-b5df-1a3e16882ce7_109.json b/packages/security_detection_engine/kibana/security_rule/6a8ab9cc-4023-4d17-b5df-1a3e16882ce7_109.json new file mode 100644 index 00000000000..c3ef65eb970 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6a8ab9cc-4023-4d17-b5df-1a3e16882ce7_109.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies unusual child processes of Service Host (svchost.exe) that traditionally do not spawn any child processes. This may indicate a code injection or an equivalent form of exploitation.", + "false_positives": [ + "Changes to Windows services or a rarely executed child process." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Service Host Child Process - Childless Service", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"svchost.exe\" and\n\n /* based on svchost service arguments -s svcname where the service is known to be childless */\n process.parent.args : (\n \"WdiSystemHost\", \"LicenseManager\", \"StorSvc\", \"CDPSvc\", \"cdbhsvc\", \"BthAvctpSvc\", \"SstpSvc\", \"WdiServiceHost\",\n \"imgsvc\", \"TrkWks\", \"WpnService\", \"IKEEXT\", \"PolicyAgent\", \"CryptSvc\", \"netprofm\", \"ProfSvc\", \"StateRepository\",\n \"camsvc\", \"LanmanWorkstation\", \"NlaSvc\", \"EventLog\", \"hidserv\", \"DisplayEnhancementService\", \"ShellHWDetection\",\n \"AppHostSvc\", \"fhsvc\", \"CscService\", \"PushToInstall\"\n ) and\n\n /* unknown FPs can be added here */\n not process.name : (\"WerFault.exe\", \"WerFaultSecure.exe\", \"wermgr.exe\") and\n not (process.executable : \"?:\\\\Windows\\\\System32\\\\RelPost.exe\" and process.parent.args : \"WdiSystemHost\") and\n not (\n process.name : \"rundll32.exe\" and\n process.args : \"?:\\\\WINDOWS\\\\System32\\\\winethc.dll,ForceProxyDetectionOnNextRun\" and\n process.parent.args : \"WdiServiceHost\"\n ) and\n not (\n process.executable : (\n \"?:\\\\Program Files\\\\*\",\n \"?:\\\\Program Files (x86)\\\\*\",\n \"?:\\\\Windows\\\\System32\\\\Kodak\\\\kds_?????\\\\lib\\\\lexexe.exe\"\n ) and process.parent.args : \"imgsvc\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6a8ab9cc-4023-4d17-b5df-1a3e16882ce7", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.012", + "name": "Process Hollowing", + "reference": "https://attack.mitre.org/techniques/T1055/012/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.012", + "name": "Process Hollowing", + "reference": "https://attack.mitre.org/techniques/T1055/012/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "6a8ab9cc-4023-4d17-b5df-1a3e16882ce7_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6aace640-e631-4870-ba8e-5fdda09325db_110.json b/packages/security_detection_engine/kibana/security_rule/6aace640-e631-4870-ba8e-5fdda09325db_110.json new file mode 100644 index 00000000000..9742a8a9d15 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6aace640-e631-4870-ba8e-5fdda09325db_110.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the Exchange PowerShell cmdlet, New-MailBoxExportRequest, to export the contents of a primary mailbox or archive to a .pst file. Adversaries may target user email to collect sensitive information.", + "false_positives": [ + "Legitimate exchange system administration activity." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Exporting Exchange Mailbox via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Exporting Exchange Mailbox via PowerShell\n\nEmail mailboxes and their information can be valuable assets for attackers. Company mailboxes often contain sensitive information such as login credentials, intellectual property, financial data, and personal information, making them high-value targets for malicious actors.\n\nThe `New-MailBoxExportRequest` cmdlet is used to begin the process of exporting contents of a primary mailbox or archive to a .pst file. Note that this is done on a per-mailbox basis and this cmdlet is available only in on-premises Exchange.\n\nAttackers can abuse this functionality in preparation for exfiltrating contents, which is likely to contain sensitive and strategic data.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the export operation:\n - Identify the user account that performed the action and whether it should perform this kind of action.\n - Contact the account owner and confirm whether they are aware of this activity.\n - Check if this operation was approved and performed according to the organization's change management policy.\n - Retrieve the operation status and use the `Get-MailboxExportRequest` cmdlet to review previous requests.\n - By default, no group in Exchange has the privilege to import or export mailboxes. Investigate administrators that assigned the \"Mailbox Import Export\" privilege for abnormal activity.\n- Investigate if there is a significant quantity of export requests in the alert timeframe. This operation is done on a per-mailbox basis and can be part of a mass export.\n- If the operation was completed successfully:\n - Check if the file is on the path specified in the command.\n - Investigate if the file was compressed, archived, or retrieved by the attacker for exfiltration.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and it is done with proper approval.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If the involved host is not the Exchange server, isolate the host to prevent further post-compromise behavior.\n- Use the `Remove-MailboxExportRequest` cmdlet to remove fully or partially completed export requests.\n- Prioritize cases that involve personally identifiable information (PII) or other classified data.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Review the privileges of users with the \"Mailbox Import Export\" privilege to ensure that the least privilege principle is being followed.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name: (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") and \n process.command_line : (\"*MailboxExportRequest*\", \"*-Mailbox*-ContentFilter*\")\n", + "references": [ + "https://www.volexity.com/blog/2020/12/14/dark-halo-leverages-solarwinds-compromise-to-breach-organizations/", + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-mailboxexportrequest?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6aace640-e631-4870-ba8e-5fdda09325db", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1005", + "name": "Data from Local System", + "reference": "https://attack.mitre.org/techniques/T1005/" + }, + { + "id": "T1114", + "name": "Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/", + "subtechnique": [ + { + "id": "T1114.002", + "name": "Remote Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "6aace640-e631-4870-ba8e-5fdda09325db_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6ace94ba-f02c-4d55-9f53-87d99b6f9af4_7.json b/packages/security_detection_engine/kibana/security_rule/6ace94ba-f02c-4d55-9f53-87d99b6f9af4_7.json new file mode 100644 index 00000000000..88d5c389fcd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6ace94ba-f02c-4d55-9f53-87d99b6f9af4_7.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of suspicious linux tools through ProxyChains. ProxyChains is a command-line tool that enables the routing of network connections through intermediary proxies, enhancing anonymity and enabling access to restricted resources. Attackers can exploit the ProxyChains utility to hide their true source IP address, evade detection, and perform malicious activities through a chain of proxy servers, potentially masking their identity and intentions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Utility Launched via ProxyChains", + "note": "## Triage and analysis\n\n### Investigating Suspicious Utility Launched via ProxyChains\n\nAttackers can leverage `proxychains` to obfuscate their origin and bypass network defenses by routing their malicious traffic through multiple intermediary servers.\n\nThis rule looks for a list of suspicious processes spawned through `proxychains` by analyzing process command line arguments. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate network obfuscation. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- ProxyChains Activity - 4b868f1f-15ff-4ba3-8c11-d5a7a6356d37\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses this utility for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"proxychains\" and process.args : (\n \"ssh\", \"sshd\", \"sshuttle\", \"socat\", \"iodine\", \"iodined\", \"dnscat\", \"hans\", \"hans-ubuntu\", \"ptunnel-ng\",\n \"ssf\", \"3proxy\", \"ngrok\", \"gost\", \"pivotnacci\", \"chisel*\", \"nmap\", \"ping\", \"python*\", \"php*\", \"perl\", \"ruby\",\n \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\", \"java\", \"telnet\", \"ftp\", \"curl\", \"wget\"\n)\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "6ace94ba-f02c-4d55-9f53-87d99b6f9af4", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "6ace94ba-f02c-4d55-9f53-87d99b6f9af4_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6b84d470-9036-4cc0-a27c-6d90bbfe81ab_208.json b/packages/security_detection_engine/kibana/security_rule/6b84d470-9036-4cc0-a27c-6d90bbfe81ab_208.json new file mode 100644 index 00000000000..7cea2ad4b50 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6b84d470-9036-4cc0-a27c-6d90bbfe81ab_208.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of a compression utility to collect known files containing sensitive information, such as credentials and system configurations.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Sensitive Files Compression", + "new_terms_fields": [ + "host.id", + "process.command_line", + "process.parent.executable" + ], + "query": "event.category:process and host.os.type:linux and event.type:start and\n process.name:(zip or tar or gzip or hdiutil or 7z) and\n process.args:\n (\n /root/.ssh/id_rsa or\n /root/.ssh/id_rsa.pub or\n /root/.ssh/id_ed25519 or\n /root/.ssh/id_ed25519.pub or\n /root/.ssh/authorized_keys or\n /root/.ssh/authorized_keys2 or\n /root/.ssh/known_hosts or\n /root/.bash_history or\n /etc/hosts or\n /home/*/.ssh/id_rsa or\n /home/*/.ssh/id_rsa.pub or\n /home/*/.ssh/id_ed25519 or\n /home/*/.ssh/id_ed25519.pub or\n /home/*/.ssh/authorized_keys or\n /home/*/.ssh/authorized_keys2 or\n /home/*/.ssh/known_hosts or\n /home/*/.bash_history or\n /root/.aws/credentials or\n /root/.aws/config or\n /home/*/.aws/credentials or\n /home/*/.aws/config or\n /root/.docker/config.json or\n /home/*/.docker/config.json or\n /etc/group or\n /etc/passwd or\n /etc/shadow or\n /etc/gshadow\n )\n", + "references": [ + "https://www.trendmicro.com/en_ca/research/20/l/teamtnt-now-deploying-ddos-capable-irc-bot-tntbotinger.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6b84d470-9036-4cc0-a27c-6d90bbfe81ab", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Collection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1552", + "name": "Unsecured Credentials", + "reference": "https://attack.mitre.org/techniques/T1552/", + "subtechnique": [ + { + "id": "T1552.001", + "name": "Credentials In Files", + "reference": "https://attack.mitre.org/techniques/T1552/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1560", + "name": "Archive Collected Data", + "reference": "https://attack.mitre.org/techniques/T1560/", + "subtechnique": [ + { + "id": "T1560.001", + "name": "Archive via Utility", + "reference": "https://attack.mitre.org/techniques/T1560/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 208 + }, + "id": "6b84d470-9036-4cc0-a27c-6d90bbfe81ab_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6cd1779c-560f-4b68-a8f1-11009b27fe63_107.json b/packages/security_detection_engine/kibana/security_rule/6cd1779c-560f-4b68-a8f1-11009b27fe63_107.json new file mode 100644 index 00000000000..83286145ff7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6cd1779c-560f-4b68-a8f1-11009b27fe63_107.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies suspicious files being written by the Microsoft Exchange Server Unified Messaging (UM) service. This activity has been observed exploiting CVE-2021-26858.", + "false_positives": [ + "Files generated during installation will generate a lot of noise, so the rule should only be enabled after the fact.", + "This rule was tuned using the following baseline: https://raw.githubusercontent.com/microsoft/CSS-Exchange/main/Security/Baselines/baseline_15.2.792.5.csv from Microsoft. Depending on version, consult https://github.com/microsoft/CSS-Exchange/tree/main/Security/Baselines to help determine normalcy." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Exchange Server UM Writing Suspicious Files", + "note": "## Triage and analysis\n\nPositive hits can be checked against the established Microsoft [baselines](https://github.com/microsoft/CSS-Exchange/tree/main/Security/Baselines).\n\nMicrosoft highly recommends that the best course of action is patching, but this may not protect already compromised systems\nfrom existing intrusions. Other tools for detecting and mitigating can be found within their Exchange support\n[repository](https://github.com/microsoft/CSS-Exchange/tree/main/Security)\n", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and\n process.name : (\"UMWorkerProcess.exe\", \"umservice.exe\") and\n file.extension : (\"php\", \"jsp\", \"js\", \"aspx\", \"asmx\", \"asax\", \"cfm\", \"shtml\") and\n (\n file.path : \"?:\\\\inetpub\\\\wwwroot\\\\aspnet_client\\\\*\" or\n\n (file.path : \"?:\\\\*\\\\Microsoft\\\\Exchange Server*\\\\FrontEnd\\\\HttpProxy\\\\owa\\\\auth\\\\*\" and\n not (file.path : \"?:\\\\*\\\\Microsoft\\\\Exchange Server*\\\\FrontEnd\\\\HttpProxy\\\\owa\\\\auth\\\\version\\\\*\" or\n file.name : (\"errorFE.aspx\", \"expiredpassword.aspx\", \"frowny.aspx\", \"GetIdToken.htm\", \"logoff.aspx\",\n \"logon.aspx\", \"OutlookCN.aspx\", \"RedirSuiteServiceProxy.aspx\", \"signout.aspx\"))) or\n\n (file.path : \"?:\\\\*\\\\Microsoft\\\\Exchange Server*\\\\FrontEnd\\\\HttpProxy\\\\ecp\\\\auth\\\\*\" and\n not file.name : \"TimeoutLogoff.aspx\")\n )\n", + "references": [ + "https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers", + "https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6cd1779c-560f-4b68-a8f1-11009b27fe63", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "6cd1779c-560f-4b68-a8f1-11009b27fe63_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6d8685a1-94fa-4ef7-83de-59302e7c4ca8_4.json b/packages/security_detection_engine/kibana/security_rule/6d8685a1-94fa-4ef7-83de-59302e7c4ca8_4.json new file mode 100644 index 00000000000..d7186beba9d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6d8685a1-94fa-4ef7-83de-59302e7c4ca8_4.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects potential privilege escalation attempts through Looney Tunables (CVE-2023-4911). Looney Tunables is a buffer overflow vulnerability in GNU C Library's dynamic loader's processing of the GLIBC_TUNABLES environment variable.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via CVE-2023-4911", + "query": "sequence by host.id, process.parent.entity_id, process.executable with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.env_vars : \"*GLIBC_TUNABLES=glibc.*=glibc.*=*\"] with runs=5\n", + "references": [ + "https://blog.qualys.com/vulnerabilities-threat-research/2023/10/03/cve-2023-4911-looney-tunables-local-privilege-escalation-in-the-glibcs-ld-so" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.env_vars", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "6d8685a1-94fa-4ef7-83de-59302e7c4ca8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\nElastic Defend integration does not collect environment variable logging by default.\nIn order to capture this behavior, this rule requires a specific configuration option set within the advanced settings of the Elastic Defend integration.\n #### To set up environment variable capture for an Elastic Agent policy:\n- Go to \u201cSecurity \u2192 Manage \u2192 Policies\u201d.\n- Select an \u201cElastic Agent policy\u201d.\n- Click \u201cShow advanced settings\u201d.\n- Scroll down or search for \u201clinux.advanced.capture_env_vars\u201d.\n- Enter the names of environment variables you want to capture, separated by commas.\n- For this rule the linux.advanced.capture_env_vars variable should be set to \"GLIBC_TUNABLES\".\n- Click \u201cSave\u201d.\nAfter saving the integration change, the Elastic Agents running this policy will be updated and the rule will function properly.\nFor more information on capturing environment variables refer to the [helper guide](https://www.elastic.co/guide/en/security/current/environment-variable-capture.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 4 + }, + "id": "6d8685a1-94fa-4ef7-83de-59302e7c4ca8_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6e9b351e-a531-4bdc-b73e-7034d6eed7ff_107.json b/packages/security_detection_engine/kibana/security_rule/6e9b351e-a531-4bdc-b73e-7034d6eed7ff_107.json new file mode 100644 index 00000000000..091fcbb64b3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6e9b351e-a531-4bdc-b73e-7034d6eed7ff_107.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of macOS built-in commands related to account or group enumeration. Adversaries may use account and group information to orient themselves before deciding how to act.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Enumeration of Users or Groups via Built-in Commands", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n (\n process.name : (\"ldapsearch\", \"dsmemberutil\") or\n (process.name : \"dscl\" and\n process.args : (\"read\", \"-read\", \"list\", \"-list\", \"ls\", \"search\", \"-search\") and\n process.args : (\"/Active Directory/*\", \"/Users*\", \"/Groups*\"))\n\t) and\n not process.parent.executable : (\"/Applications/NoMAD.app/Contents/MacOS/NoMAD\",\n \"/Applications/ZoomPresence.app/Contents/MacOS/ZoomPresence\",\n \"/Applications/Sourcetree.app/Contents/MacOS/Sourcetree\",\n \"/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfDaemon.app/Contents/MacOS/JamfDaemon\",\n \"/Applications/Jamf Connect.app/Contents/MacOS/Jamf Connect\",\n \"/usr/local/jamf/bin/jamf\",\n \"/Library/Application Support/AirWatch/hubd\",\n \"/opt/jc/bin/jumpcloud-agent\",\n \"/Applications/ESET Endpoint Antivirus.app/Contents/MacOS/esets_daemon\",\n \"/Applications/ESET Endpoint Security.app/Contents/MacOS/esets_daemon\",\n \"/Library/PrivilegedHelperTools/com.fortinet.forticlient.uninstall_helper\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "6e9b351e-a531-4bdc-b73e-7034d6eed7ff", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.001", + "name": "Local Groups", + "reference": "https://attack.mitre.org/techniques/T1069/001/" + } + ] + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "6e9b351e-a531-4bdc-b73e-7034d6eed7ff_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6ea41894-66c3-4df7-ad6b-2c5074eb3df8_107.json b/packages/security_detection_engine/kibana/security_rule/6ea41894-66c3-4df7-ad6b-2c5074eb3df8_107.json new file mode 100644 index 00000000000..679d78174ab --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6ea41894-66c3-4df7-ad6b-2c5074eb3df8_107.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious instances of the Windows Error Reporting process (WerFault.exe or Wermgr.exe) with matching command-line and process executable values performing outgoing network connections. This may be indicative of a masquerading attempt to evade suspicious child process behavior detections.", + "false_positives": [ + "Legit Application Crash with rare Werfault commandline value" + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Windows Error Manager Masquerading", + "note": "## Triage and analysis\n\n### Investigating Potential Windows Error Manager Masquerading\n\nBy examining the specific traits of Windows binaries -- such as process trees, command lines, network connections, registry modifications, and so on -- it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity, such as masquerading and deserve further investigation.\n\nThis rule identifies a potential malicious process masquerading as `wermgr.exe` or `WerFault.exe`, by looking for a process creation with no arguments followed by a network connection.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id with maxspan = 5s\n [process where host.os.type == \"windows\" and event.type:\"start\" and process.name : (\"wermgr.exe\", \"WerFault.exe\") and process.args_count == 1]\n [network where host.os.type == \"windows\" and process.name : (\"wermgr.exe\", \"WerFault.exe\") and network.protocol != \"dns\" and\n network.direction : (\"outgoing\", \"egress\") and destination.ip !=\"::1\" and destination.ip !=\"127.0.0.1\"\n ]\n", + "references": [ + "https://twitter.com/SBousseaden/status/1235533224337641473", + "https://www.hexacorn.com/blog/2019/09/20/werfault-command-line-switches-v0-1/", + "https://app.any.run/tasks/26051d84-b68e-4afb-8a9a-76921a271b81/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6ea41894-66c3-4df7-ad6b-2c5074eb3df8", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "6ea41894-66c3-4df7-ad6b-2c5074eb3df8_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6ea55c81-e2ba-42f2-a134-bccf857ba922_110.json b/packages/security_detection_engine/kibana/security_rule/6ea55c81-e2ba-42f2-a134-bccf857ba922_110.json new file mode 100644 index 00000000000..0853e24f06a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6ea55c81-e2ba-42f2-a134-bccf857ba922_110.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Windows Management Instrumentation Command (WMIC) to discover certain System Security Settings such as AntiVirus or Host Firewall details.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Security Software Discovery using WMIC", + "note": "## Triage and analysis\n\n### Investigating Security Software Discovery using WMIC\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `wmic` utility with arguments compatible to the enumeration of the security software installed on the host. Attackers can use this information to decide whether or not to infect a system, disable protections, use bypasses, etc.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(process.name : \"wmic.exe\" or process.pe.original_file_name : \"wmic.exe\") and\nprocess.args : \"/namespace:\\\\\\\\root\\\\SecurityCenter2\" and process.args : \"Get\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6ea55c81-e2ba-42f2-a134-bccf857ba922", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/", + "subtechnique": [ + { + "id": "T1518.001", + "name": "Security Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "6ea55c81-e2ba-42f2-a134-bccf857ba922_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_6.json b/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_6.json new file mode 100644 index 00000000000..13fec0a11f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_6.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for a set of Linux utilities that can be used for tunneling and port forwarding. Attackers can leverage tunneling and port forwarding techniques to bypass network defenses, establish hidden communication channels, and gain unauthorized access to internal resources, facilitating data exfiltration, lateral movement, and remote control.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Tunneling and/or Port Forwarding", + "note": "## Triage and analysis\n\n### Investigating Potential Linux Tunneling and/or Port Forwarding\n\nAttackers can leverage many utilities to clandestinely tunnel network communications and evade security measures, potentially gaining unauthorized access to sensitive systems.\n\nThis rule looks for several utilities that are capable of setting up tunnel network communications by analyzing process names or command line arguments. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate protocol tunneling. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n- Suspicious Utility Launched via ProxyChains - 6ace94ba-f02c-4d55-9f53-87d99b6f9af4\n- ProxyChains Activity - 4b868f1f-15ff-4ba3-8c11-d5a7a6356d37\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling/forwarding for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and (\n (\n // gost & pivotnacci - spawned without process.parent.name\n (process.name == \"gost\" and process.args : (\"-L*\", \"-C*\", \"-R*\")) or (process.name == \"pivotnacci\")) or (\n // ssh\n (process.name in (\"ssh\", \"sshd\") and (process.args in (\"-R\", \"-L\", \"D\", \"-w\") and process.args_count >= 4 and \n not process.args : \"chmod\")) or\n // sshuttle\n (process.name == \"sshuttle\" and process.args in (\"-r\", \"--remote\", \"-l\", \"--listen\") and process.args_count >= 4) or\n // socat\n (process.name == \"socat\" and process.args : (\"TCP4-LISTEN:*\", \"SOCKS*\") and process.args_count >= 3) or\n // chisel\n (process.name : \"chisel*\" and process.args in (\"client\", \"server\")) or\n // iodine(d), dnscat, hans, ptunnel-ng, ssf, 3proxy & ngrok \n (process.name in (\"iodine\", \"iodined\", \"dnscat\", \"hans\", \"hans-ubuntu\", \"ptunnel-ng\", \"ssf\", \"3proxy\", \"ngrok\"))\n ) and process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n)\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform", + "https://book.hacktricks.xyz/generic-methodologies-and-resources/tunneling-and-port-forwarding" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6ee947e9-de7e-4281-a55d-09289bdf947e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "6ee947e9-de7e-4281-a55d-09289bdf947e_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/70d12c9c-0dbd-4a1a-bc44-1467502c9cf6_107.json b/packages/security_detection_engine/kibana/security_rule/70d12c9c-0dbd-4a1a-bc44-1467502c9cf6_107.json new file mode 100644 index 00000000000..16205275ed5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/70d12c9c-0dbd-4a1a-bc44-1467502c9cf6_107.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the Windows Management Instrumentation StdRegProv (registry provider) to modify commonly abused registry locations for persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via WMI Standard Registry Provider", + "note": "## Triage and analysis\n\n### Investigating Persistence via WMI Standard Registry Provider\n\nThe Windows Management Instrumentation (WMI) StdRegProv is a registry provider that allows users to manage registry keys and values on Windows systems. Adversaries may abuse this functionality to modify registry locations commonly used for persistence, enabling them to maintain unauthorized access to a system.\n\nThis rule identifies instances where the WMI StdRegProv is used to modify specific registry paths associated with persistence mechanisms.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Identify which process triggered this behavior.\n- Verify whether the file specified in the run key is signed.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Examine the file specified in the run key using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and\n registry.data.strings != null and process.name : \"WmiPrvSe.exe\" and\n registry.path : (\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Command Processor\\\\Autorun\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"HKLM\\\\Software\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnce\\\\*\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnceEx\\\\*\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnce\\\\*\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnceEx\\\\*\",\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\ServiceDLL\",\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\ImagePath\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\\\\*\",\n \"HKEY_USERS\\\\*\\\\Environment\\\\UserInitMprLogonScript\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\Load\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\Shell\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logoff\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logon\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Shutdown\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Startup\\\\Script\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Ctf\\\\LangBarAddin\\\\*\\\\FilePath\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Exec\",\n \"HKEY_USERS\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Script\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Command Processor\\\\Autorun\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\*\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnce\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnceEx\\\\*\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnce\\\\*\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunOnceEx\\\\*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\ServiceDLL\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\ImagePath\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\\\\*\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Environment\\\\UserInitMprLogonScript\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\Load\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon\\\\Shell\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\Shell\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logoff\\\\Script\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Logon\\\\Script\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Shutdown\\\\Script\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\System\\\\Scripts\\\\Startup\\\\Script\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Ctf\\\\LangBarAddin\\\\*\\\\FilePath\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Exec\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Extensions\\\\*\\\\Script\"\n )\n", + "references": [ + "https://docs.microsoft.com/en-us/previous-versions/windows/desktop/regprov/stdregprov", + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-1" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "70d12c9c-0dbd-4a1a-bc44-1467502c9cf6", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + }, + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "70d12c9c-0dbd-4a1a-bc44-1467502c9cf6_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/70fa1af4-27fd-4f26-bd03-50b6af6b9e24_106.json b/packages/security_detection_engine/kibana/security_rule/70fa1af4-27fd-4f26-bd03-50b6af6b9e24_106.json new file mode 100644 index 00000000000..d5b44dc6222 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/70fa1af4-27fd-4f26-bd03-50b6af6b9e24_106.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to unload the Elastic Endpoint Security kernel extension via the kextunload command.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Attempt to Unload Elastic Endpoint Security Kernel Extension", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:kextunload and process.args:(\"/System/Library/Extensions/EndpointSecurity.kext\" or \"EndpointSecurity.kext\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "70fa1af4-27fd-4f26-bd03-50b6af6b9e24", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "70fa1af4-27fd-4f26-bd03-50b6af6b9e24_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/717f82c2-7741-4f9b-85b8-d06aeb853f4f_209.json b/packages/security_detection_engine/kibana/security_rule/717f82c2-7741-4f9b-85b8-d06aeb853f4f_209.json new file mode 100644 index 00000000000..2e5184a49df --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/717f82c2-7741-4f9b-85b8-d06aeb853f4f_209.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modification of the dynamic linker preload shared object (ld.so.preload). Adversaries may execute malicious payloads by hijacking the dynamic linker used to load libraries.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Modification of Dynamic Linker Preload Shared Object", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:file and event.action:(updated or renamed or rename or file_rename_event) and \nnot event.type:deletion and file.path:/etc/ld.so.preload and not process.name:(wine or oneagentinstallaction)\n", + "references": [ + "https://www.anomali.com/blog/rocke-evolves-its-arsenal-with-a-new-malware-family-written-in-golang" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "717f82c2-7741-4f9b-85b8-d06aeb853f4f", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.006", + "name": "Dynamic Linker Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 209 + }, + "id": "717f82c2-7741-4f9b-85b8-d06aeb853f4f_209", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/71bccb61-e19b-452f-b104-79a60e546a95_113.json b/packages/security_detection_engine/kibana/security_rule/71bccb61-e19b-452f-b104-79a60e546a95_113.json new file mode 100644 index 00000000000..29409d531c0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/71bccb61-e19b-452f-b104-79a60e546a95_113.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious creation of Alternate Data Streams on highly targeted files. This is uncommon for legitimate files and sometimes done by adversaries to hide malware.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual File Creation - Alternate Data Stream", + "note": "## Triage and analysis\n\n### Investigating Unusual File Creation - Alternate Data Stream\n\nAlternate Data Streams (ADS) are file attributes only found on the NTFS file system. In this file system, files are built up from a couple of attributes; one of them is $Data, also known as the data attribute.\n\nThe regular data stream, also referred to as the unnamed data stream since the name string of this attribute is empty, contains the data inside the file. So any data stream that has a name is considered an alternate data stream.\n\nAttackers can abuse these alternate data streams to hide malicious files, string payloads, etc. This rule detects the creation of alternate data streams on highly targeted file types.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Retrieve the contents of the alternate data stream, and analyze it for potential maliciousness. Analysts can use the following PowerShell cmdlet to accomplish this:\n - `Get-Content C:\\Path\\To\\file.exe -stream SampleAlternateDataStreamName`\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of process executable and file conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and\n\n file.path : \"C:\\\\*:*\" and\n not file.path : \n (\"C:\\\\*:zone.identifier*\",\n \"C:\\\\users\\\\*\\\\appdata\\\\roaming\\\\microsoft\\\\teams\\\\old_weblogs_*:$DATA\") and\n\n not process.executable :\n (\"?:\\\\windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\System32\\\\inetsrv\\\\w3wp.exe\",\n \"?:\\\\Windows\\\\explorer.exe\",\n \"?:\\\\Windows\\\\System32\\\\sihost.exe\",\n \"?:\\\\Windows\\\\System32\\\\PickerHost.exe\",\n \"?:\\\\Windows\\\\System32\\\\SearchProtocolHost.exe\",\n \"?:\\\\Program Files (x86)\\\\Dropbox\\\\Client\\\\Dropbox.exe\",\n \"?:\\\\Program Files\\\\Rivet Networks\\\\SmartByte\\\\SmartByteNetworkService.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft\\\\Edge\\\\Application\\\\msedge.exe\",\n \"?:\\\\Program Files\\\\ExpressConnect\\\\ExpressConnectNetworkService.exe\",\n \"?:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n \"?:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n \"?:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe\",\n \"?:\\\\Program Files(x86)\\\\Microsoft Office\\\\root\\\\*\\\\EXCEL.EXE\",\n \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\*\\\\EXCEL.EXE\",\n \"?:\\\\Program Files (x86)\\\\Microsoft Office\\\\root\\\\*\\\\OUTLOOK.EXE\",\n \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\*\\\\OUTLOOK.EXE\",\n \"?:\\\\Program Files (x86)\\\\Microsoft Office\\\\root\\\\*\\\\POWERPNT.EXE\",\n \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\*\\\\POWERPNT.EXE\",\n \"?:\\\\Program Files (x86)\\\\Microsoft Office\\\\root\\\\*\\\\WINWORD.EXE\",\n \"?:\\\\Program Files\\\\Microsoft Office\\\\root\\\\*\\\\WINWORD.EXE\") and\n\n file.extension :\n (\n \"pdf\",\n \"dll\",\n \"png\",\n \"exe\",\n \"dat\",\n \"com\",\n \"bat\",\n \"cmd\",\n \"sys\",\n \"vbs\",\n \"ps1\",\n \"hta\",\n \"txt\",\n \"vbe\",\n \"js\",\n \"wsh\",\n \"docx\",\n \"doc\",\n \"xlsx\",\n \"xls\",\n \"pptx\",\n \"ppt\",\n \"rtf\",\n \"gif\",\n \"jpg\",\n \"png\",\n \"bmp\",\n \"img\",\n \"iso\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "71bccb61-e19b-452f-b104-79a60e546a95", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.004", + "name": "NTFS File Attributes", + "reference": "https://attack.mitre.org/techniques/T1564/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 113 + }, + "id": "71bccb61-e19b-452f-b104-79a60e546a95_113", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/71c5cb27-eca5-4151-bb47-64bc3f883270_108.json b/packages/security_detection_engine/kibana/security_rule/71c5cb27-eca5-4151-bb47-64bc3f883270_108.json new file mode 100644 index 00000000000..d240a5d8ca0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/71c5cb27-eca5-4151-bb47-64bc3f883270_108.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious Image Loading of the Remote Desktop Services ActiveX Client (mstscax), this may indicate the presence of RDP lateral movement capability.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious RDP ActiveX Client Loaded", + "query": "any where host.os.type == \"windows\" and\n (event.category : (\"library\", \"driver\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : \"mstscax.dll\" or file.name : \"mstscax.dll\") and\n /* depending on noise in your env add here extra paths */\n process.executable : (\n \"C:\\\\Windows\\\\*\",\n \"C:\\\\Users\\\\Public\\\\*\",\n \"C:\\\\Users\\\\Default\\\\*\",\n \"C:\\\\Intel\\\\*\",\n \"C:\\\\PerfLogs\\\\*\",\n \"C:\\\\ProgramData\\\\*\",\n \"\\\\Device\\\\Mup\\\\*\",\n \"\\\\\\\\*\"\n ) and\n /* add here FPs */\n not process.executable : (\n \"?:\\\\Windows\\\\System32\\\\mstsc.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\mstsc.exe\",\n \"?:\\\\Windows\\\\System32\\\\vmconnect.exe\",\n \"?:\\\\Windows\\\\System32\\\\WindowsSandboxClient.exe\",\n \"?:\\\\Windows\\\\System32\\\\hvsirdpclient.exe\"\n )\n", + "references": [ + "https://posts.specterops.io/revisiting-remote-desktop-lateral-movement-8fb905cb46c3" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "71c5cb27-eca5-4151-bb47-64bc3f883270", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.001", + "name": "Remote Desktop Protocol", + "reference": "https://attack.mitre.org/techniques/T1021/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "71c5cb27-eca5-4151-bb47-64bc3f883270_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/71d6a53d-abbd-40df-afee-c21fff6aafb0_3.json b/packages/security_detection_engine/kibana/security_rule/71d6a53d-abbd-40df-afee-c21fff6aafb0_3.json new file mode 100644 index 00000000000..45282fb7501 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/71d6a53d-abbd-40df-afee-c21fff6aafb0_3.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the generation of a passwd password entry via openssl, followed by a file write activity on the \"/etc/passwd\" file. The \"/etc/passwd\" file in Linux stores user account information, including usernames, user IDs, group IDs, home directories, and default shell paths. Attackers may exploit a misconfiguration in the \"/etc/passwd\" file permissions or other privileges to add a new entry to the \"/etc/passwd\" file with root permissions, and leverage this new user account to login as root.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Passwd File Event Action", + "query": "sequence by host.id, process.parent.pid with maxspan=1m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name == \"openssl\" and process.args == \"passwd\" and user.id != \"0\"]\n [file where host.os.type == \"linux\" and file.path == \"/etc/passwd\" and process.parent.pid != 1 and\n not auditd.data.a2 == \"80000\" and event.outcome == \"success\" and user.id != \"0\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a2", + "type": "unknown" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "71d6a53d-abbd-40df-afee-c21fff6aafb0", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend and Auditd Manager.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule the following additional audit rules are required to be added to the integration:\n -- \"-w /etc/passwd -p wa -k etcpasswd\"\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 3 + }, + "id": "71d6a53d-abbd-40df-afee-c21fff6aafb0_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/721999d0-7ab2-44bf-b328-6e63367b9b29_105.json b/packages/security_detection_engine/kibana/security_rule/721999d0-7ab2-44bf-b328-6e63367b9b29_105.json new file mode 100644 index 00000000000..3ea3b21d4d4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/721999d0-7ab2-44bf-b328-6e63367b9b29_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when Microsoft Cloud App Security reports that a user has uploaded files to the cloud that might be infected with ransomware.", + "false_positives": [ + "If Cloud App Security identifies, for example, a high rate of file uploads or file deletion activities it may represent an adverse encryption process." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Potential ransomware activity", + "note": "", + "query": "event.dataset:o365.audit and event.provider:SecurityComplianceCenter and event.category:web and event.action:\"Potential ransomware activity\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/cloud-app-security/anomaly-detection-policy", + "https://docs.microsoft.com/en-us/cloud-app-security/policy-template-reference" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "721999d0-7ab2-44bf-b328-6e63367b9b29", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Impact" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1486", + "name": "Data Encrypted for Impact", + "reference": "https://attack.mitre.org/techniques/T1486/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "721999d0-7ab2-44bf-b328-6e63367b9b29_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7405ddf1-6c8e-41ce-818f-48bea6bcaed8_110.json b/packages/security_detection_engine/kibana/security_rule/7405ddf1-6c8e-41ce-818f-48bea6bcaed8_110.json new file mode 100644 index 00000000000..e42d5b5fe73 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7405ddf1-6c8e-41ce-818f-48bea6bcaed8_110.json @@ -0,0 +1,130 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Windows contains accessibility features that may be launched with a key combination before a user has logged in. An adversary can modify the way these programs are launched to get a command prompt or backdoor without logging in to the system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Modification of Accessibility Binaries", + "note": "## Triage and analysis\n\n### Investigating Potential Modification of Accessibility Binaries\n\nAdversaries may establish persistence and/or elevate privileges by executing malicious content triggered by accessibility features. Windows contains accessibility features that may be launched with a key combination before a user has logged in (ex: when the user is on the Windows logon screen). An adversary can modify the way these programs are launched to get a command prompt or backdoor without logging in to the system.\n\nMore details can be found [here](https://attack.mitre.org/techniques/T1546/008/).\n\nThis rule looks for the execution of supposed accessibility binaries that don't match any of the accessibility features binaries' original file names, which is likely a custom binary deployed by the attacker.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity should not happen legitimately. The security team should address any potential benign true positive (B-TP), as this configuration can put the user and the domain at risk.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\"Utilman.exe\", \"winlogon.exe\") and user.name == \"SYSTEM\" and\n process.pe.original_file_name : \"?*\" and\n process.args :\n (\n \"C:\\\\Windows\\\\System32\\\\osk.exe\",\n \"C:\\\\Windows\\\\System32\\\\Magnify.exe\",\n \"C:\\\\Windows\\\\System32\\\\Narrator.exe\",\n \"C:\\\\Windows\\\\System32\\\\Sethc.exe\",\n \"utilman.exe\",\n \"ATBroker.exe\",\n \"DisplaySwitch.exe\",\n \"sethc.exe\"\n )\n and not process.pe.original_file_name in\n (\n \"osk.exe\",\n \"sethc.exe\",\n \"utilman2.exe\",\n \"DisplaySwitch.exe\",\n \"ATBroker.exe\",\n \"ScreenMagnifier.exe\",\n \"SR.exe\",\n \"Narrator.exe\",\n \"magnify.exe\",\n \"MAGNIFY.EXE\"\n )\n\n/* uncomment once in winlogbeat to avoid bypass with rogue process with matching pe original file name */\n/* and process.code_signature.subject_name == \"Microsoft Windows\" and process.code_signature.status == \"trusted\" */\n", + "references": [ + "https://www.elastic.co/blog/practical-security-engineering-stateful-detection" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "7405ddf1-6c8e-41ce-818f-48bea6bcaed8", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.008", + "name": "Accessibility Features", + "reference": "https://attack.mitre.org/techniques/T1546/008/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.008", + "name": "Accessibility Features", + "reference": "https://attack.mitre.org/techniques/T1546/008/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "7405ddf1-6c8e-41ce-818f-48bea6bcaed8_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106.json b/packages/security_detection_engine/kibana/security_rule/7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106.json new file mode 100644 index 00000000000..4790539e787 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to an environment variable using the built-in launchctl command. Adversaries may execute their own malicious payloads by hijacking certain environment variables to load arbitrary libraries or bypass certain restrictions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Modification of Environment Variable via Launchctl", + "query": "event.category:process and host.os.type:macos and event.type:start and \n process.name:launchctl and \n process.args:(setenv and not (ANT_HOME or \n DBUS_LAUNCHD_SESSION_BUS_SOCKET or \n EDEN_ENV or \n LG_WEBOS_TV_SDK_HOME or \n RUNTIME_JAVA_HOME or \n WEBOS_CLI_TV or \n JAVA*_HOME) and \n not *.vmoptions) and \n not process.parent.executable:(\"/Applications/IntelliJ IDEA CE.app/Contents/jbr/Contents/Home/lib/jspawnhelper\" or \n /Applications/NoMachine.app/Contents/Frameworks/bin/nxserver.bin or \n /Applications/NoMachine.app/Contents/Frameworks/bin/nxserver.bin or \n /usr/local/bin/kr)\n", + "references": [ + "https://github.com/rapid7/metasploit-framework/blob/master//modules/post/osx/escalate/tccbypass.rb" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.007", + "name": "Path Interception by PATH Environment Variable", + "reference": "https://attack.mitre.org/techniques/T1574/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "7453e19e-3dbf-4e4e-9ae0-33d6c6ed15e1_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7592c127-89fb-4209-a8f6-f9944dfd7e02_107.json b/packages/security_detection_engine/kibana/security_rule/7592c127-89fb-4209-a8f6-f9944dfd7e02_107.json new file mode 100644 index 00000000000..de8011a6e1c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7592c127-89fb-4209-a8f6-f9944dfd7e02_107.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Monitors file events on sysctl configuration files (e.g., /etc/sysctl.conf, /etc/sysctl.d/*.conf) to identify potential unauthorized access or manipulation of system-level configuration settings. Attackers may tamper with the sysctl configuration files to modify kernel parameters, potentially compromising system stability, performance, or security.", + "from": "now-119m", + "history_window_start": "now-14d", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Sysctl File Event", + "new_terms_fields": [ + "host.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:file and event.action:(\"opened-file\" or \"read-file\" or \"wrote-to-file\") and\nfile.path : (\"/etc/sysctl.conf\" or \"/etc/sysctl.d\" or /etc/sysctl.d/*) and not process.name:(\n dpkg or dockerd or unattended-upg or systemd-sysctl or python* or auditbeat or dpkg or grep or pool*\n)\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "7592c127-89fb-4209-a8f6-f9944dfd7e02", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n\n```\n-w /etc/sysctl.conf -p wa -k sysctl\n-w /etc/sysctl.d -p wa -k sysctl\n```\n\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "low", + "tags": [ + "Data Source: Auditd Manager", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 107 + }, + "id": "7592c127-89fb-4209-a8f6-f9944dfd7e02_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10.json b/packages/security_detection_engine/kibana/security_rule/764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10.json new file mode 100644 index 00000000000..ddb009c9d9a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identify access to sensitive Active Directory object attributes that contains credentials and decryption keys such as unixUserPassword, ms-PKI-AccountCredentials and msPKI-CredentialRoamingTokens.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Access to a Sensitive LDAP Attribute", + "query": "any where event.action == \"Directory Service Access\" and event.code == \"4662\" and\n\n not winlog.event_data.SubjectUserSid : \"S-1-5-18\" and\n\n winlog.event_data.Properties : (\n /* unixUserPassword */\n \"*612cb747-c0e8-4f92-9221-fdd5f15b550d*\",\n\n /* ms-PKI-AccountCredentials */\n \"*b8dfa744-31dc-4ef1-ac7c-84baf7ef9da7*\",\n\n /* ms-PKI-DPAPIMasterKeys */\n \"*b3f93023-9239-4f7c-b99c-6745d87adbc2*\",\n\n /* msPKI-CredentialRoamingTokens */\n \"*b7ff5a38-0818-42b0-8110-d3d154c97f24*\"\n ) and\n\n /*\n Excluding noisy AccessMasks\n 0x0 undefined and 0x100 Control Access\n https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4662\n */\n not winlog.event_data.AccessMask in (\"0x0\", \"0x100\")\n", + "references": [ + "https://www.mandiant.com/resources/blog/apt29-windows-credential-roaming", + "https://social.technet.microsoft.com/wiki/contents/articles/11483.windows-credential-roaming.aspx", + "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-5136" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessMask", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.Properties", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserSid", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66", + "setup": "## Setup\n\nThe 'Audit Directory Service Access' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Access (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Privilege Escalation", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1552", + "name": "Unsecured Credentials", + "reference": "https://attack.mitre.org/techniques/T1552/", + "subtechnique": [ + { + "id": "T1552.004", + "name": "Private Keys", + "reference": "https://attack.mitre.org/techniques/T1552/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 10 + }, + "id": "764c9fcd-4c4c-41e6-a0c7-d6c46c2eff66_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/766d3f91-3f12-448c-b65f-20123e9e9e8c_110.json b/packages/security_detection_engine/kibana/security_rule/766d3f91-3f12-448c-b65f-20123e9e9e8c_110.json new file mode 100644 index 00000000000..67e0f942b7b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/766d3f91-3f12-448c-b65f-20123e9e9e8c_110.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a hidden shared object (.so) file. Users can mark specific files as hidden simply by putting a \".\" as the first character in the file or folder name. Adversaries can use this to their advantage to hide files and folders on the system for persistence and defense evasion.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Creation of Hidden Shared Object File", + "query": "file where host.os.type == \"linux\" and event.type == \"creation\" and file.extension == \"so\" and file.name : \".*.so\" and\nnot process.name == \"dockerd\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "766d3f91-3f12-448c-b65f-20123e9e9e8c", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.001", + "name": "Hidden Files and Directories", + "reference": "https://attack.mitre.org/techniques/T1564/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "766d3f91-3f12-448c-b65f-20123e9e9e8c_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/76ddb638-abf7-42d5-be22-4a70b0bf7241_106.json b/packages/security_detection_engine/kibana/security_rule/76ddb638-abf7-42d5-be22-4a70b0bf7241_106.json new file mode 100644 index 00000000000..18777c7854a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/76ddb638-abf7-42d5-be22-4a70b0bf7241_106.json @@ -0,0 +1,78 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a privilege escalation attempt via rogue named pipe impersonation. An adversary may abuse this technique by masquerading as a known named pipe and manipulating a privileged process to connect to it.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via Rogue Named Pipe Impersonation", + "query": "file where host.os.type == \"windows\" and event.action : \"Pipe Created*\" and\n /* normal sysmon named pipe creation events truncate the pipe keyword */\n file.name : \"\\\\*\\\\Pipe\\\\*\"\n", + "references": [ + "https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/", + "https://github.com/zcgonvh/EfsPotato", + "https://twitter.com/SBousseaden/status/1429530155291193354" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "76ddb638-abf7-42d5-be22-4a70b0bf7241", + "setup": "## Setup\n\nNamed Pipe Creation Events need to be enabled within the Sysmon configuration by including the following settings:\n`condition equal \"contains\" and keyword equal \"pipe\"`\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "76ddb638-abf7-42d5-be22-4a70b0bf7241_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/76e4d92b-61c1-4a95-ab61-5fd94179a1ee_9.json b/packages/security_detection_engine/kibana/security_rule/76e4d92b-61c1-4a95-ab61-5fd94179a1ee_9.json new file mode 100644 index 00000000000..d60105dbdc4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/76e4d92b-61c1-4a95-ab61-5fd94179a1ee_9.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule detects the creation of a shell through a suspicious process chain. Any reverse shells spawned by the specified utilities that are initialized from a single process followed by a network connection attempt will be captured through this rule. Attackers may spawn reverse shells to establish persistence onto a target system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via Suspicious Child Process", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"fork\") and (\n (process.name : \"python*\" and process.args : \"-c\" and process.args : (\n \"*import*pty*spawn*\", \"*import*subprocess*call*\"\n )) or\n (process.name : \"perl*\" and process.args : \"-e\" and process.args : \"*socket*\" and process.args : (\n \"*exec*\", \"*system*\"\n )) or\n (process.name : \"ruby*\" and process.args : (\"-e\", \"-rsocket\") and process.args : (\n \"*TCPSocket.new*\", \"*TCPSocket.open*\"\n )) or\n (process.name : \"lua*\" and process.args : \"-e\" and process.args : \"*socket.tcp*\" and process.args : (\n \"*io.popen*\", \"*os.execute*\"\n )) or\n (process.name : \"php*\" and process.args : \"-r\" and process.args : \"*fsockopen*\" and process.args : \"*/bin/*sh*\") or \n (process.name : (\"awk\", \"gawk\", \"mawk\", \"nawk\") and process.args : \"*/inet/tcp/*\") or\n (process.name : \"openssl\" and process.args : \"-connect\") or\n (process.name : (\"nc\", \"ncat\", \"netcat\") and process.args == \"-e\" and process.args_count >= 3 and \n not process.args == \"-z\") or\n (process.name : \"telnet\" and process.args_count >= 3)\n ) and process.parent.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\",\n \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\")]\n [network where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"connection_attempted\", \"connection_accepted\") and \n process.name : (\"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\") and \n destination.ip != null and not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")]\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "76e4d92b-61c1-4a95-ab61-5fd94179a1ee", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 9 + }, + "id": "76e4d92b-61c1-4a95-ab61-5fd94179a1ee_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/76fd43b7-3480-4dd9-8ad7-8bd36bfad92f_109.json b/packages/security_detection_engine/kibana/security_rule/76fd43b7-3480-4dd9-8ad7-8bd36bfad92f_109.json new file mode 100644 index 00000000000..d0e989cba7e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/76fd43b7-3480-4dd9-8ad7-8bd36bfad92f_109.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential use of an SSH utility to establish RDP over a reverse SSH Tunnel. This can be used by attackers to enable routing of network packets that would otherwise not reach their intended destination.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Remote Desktop Tunneling Detected", + "note": "## Triage and analysis\n\n### Investigating Potential Remote Desktop Tunneling Detected\n\nProtocol Tunneling is a mechanism that involves explicitly encapsulating a protocol within another for various use cases, ranging from providing an outer layer of encryption (similar to a VPN) to enabling traffic that network appliances would filter to reach their destination.\n\nAttackers may tunnel Remote Desktop Protocol (RDP) traffic through other protocols like Secure Shell (SSH) to bypass network restrictions that block incoming RDP connections but may be more permissive to other protocols.\n\nThis rule looks for command lines involving the `3389` port, which RDP uses by default and options commonly associated with tools that perform tunneling.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine network data to determine if the host communicated with external servers using the tunnel.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n- Investigate the command line for the execution of programs that are unrelated to tunneling, like Remote Desktop clients.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Take the necessary actions to disable the tunneling, which can be a process kill, service deletion, registry key modification, etc. Inspect the host to learn which method was used and to determine a response for the case.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n /* RDP port and usual SSH tunneling related switches in command line */\n process.args : \"*:3389\" and\n process.args : (\"-L\", \"-P\", \"-R\", \"-pw\", \"-ssh\")\n", + "references": [ + "https://blog.netspi.com/how-to-access-rdp-over-a-reverse-ssh-tunnel/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "76fd43b7-3480-4dd9-8ad7-8bd36bfad92f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Tactic: Lateral Movement", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.004", + "name": "SSH", + "reference": "https://attack.mitre.org/techniques/T1021/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "76fd43b7-3480-4dd9-8ad7-8bd36bfad92f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/770e0c4d-b998-41e5-a62e-c7901fd7f470_110.json b/packages/security_detection_engine/kibana/security_rule/770e0c4d-b998-41e5-a62e-c7901fd7f470_110.json new file mode 100644 index 00000000000..d5fb2968f84 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/770e0c4d-b998-41e5-a62e-c7901fd7f470_110.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies native Windows host and network enumeration commands spawned by the Windows Management Instrumentation Provider Service (WMIPrvSE).", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Enumeration Command Spawned via WMIPrvSE", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.command_line != null and \n process.name:\n (\n \"arp.exe\",\n \"dsquery.exe\",\n \"dsget.exe\",\n \"gpresult.exe\",\n \"hostname.exe\",\n \"ipconfig.exe\",\n \"nbtstat.exe\",\n \"net.exe\",\n \"net1.exe\",\n \"netsh.exe\",\n \"netstat.exe\",\n \"nltest.exe\",\n \"ping.exe\",\n \"qprocess.exe\",\n \"quser.exe\",\n \"qwinsta.exe\",\n \"reg.exe\",\n \"sc.exe\",\n \"systeminfo.exe\",\n \"tasklist.exe\",\n \"tracert.exe\",\n \"whoami.exe\"\n ) and\n process.parent.name:\"wmiprvse.exe\" and \n not (\n process.name : \"sc.exe\" and process.args : \"RemoteRegistry\" and process.args : \"start=\" and \n process.args : (\"demand\", \"disabled\")\n ) and\n not process.args : \"tenable_mw_scan\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "770e0c4d-b998-41e5-a62e-c7901fd7f470", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1018", + "name": "Remote System Discovery", + "reference": "https://attack.mitre.org/techniques/T1018/" + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/" + }, + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/" + }, + { + "id": "T1016", + "name": "System Network Configuration Discovery", + "reference": "https://attack.mitre.org/techniques/T1016/", + "subtechnique": [ + { + "id": "T1016.001", + "name": "Internet Connection Discovery", + "reference": "https://attack.mitre.org/techniques/T1016/001/" + } + ] + }, + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "770e0c4d-b998-41e5-a62e-c7901fd7f470_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7787362c-90ff-4b1a-b313-8808b1020e64_2.json b/packages/security_detection_engine/kibana/security_rule/7787362c-90ff-4b1a-b313-8808b1020e64_2.json new file mode 100644 index 00000000000..5223e382518 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7787362c-90ff-4b1a-b313-8808b1020e64_2.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the elevation of regular user permissions to root permissions through a previously unknown executable. Attackers may attempt to evade detection by hijacking the execution flow and hooking certain functions/syscalls through a rootkit in order to provide easy access to root via a special modified command.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "UID Elevation from Previously Unknown Executable", + "new_terms_fields": [ + "host.id", + "process.executable", + "process.command_line" + ], + "query": "host.os.type:\"linux\" and event.category:\"process\" and event.action:\"uid_change\" and event.type:\"change\" and user.id:\"0\"\nand process.parent.name:(\"bash\" or \"dash\" or \"sh\" or \"tcsh\" or \"csh\" or \"zsh\" or \"ksh\" or \"fish\") and not (\n process.executable:(\n /bin/* or /usr/bin/* or /sbin/* or /usr/sbin/* or /snap/* or /tmp/newroot/* or /var/lib/docker/* or /usr/local/*\n ) or\n process.name:(\n \"bash\" or \"dash\" or \"sh\" or \"tcsh\" or \"csh\" or \"zsh\" or \"ksh\" or \"fish\" or \"sudo\" or \"su\" or \"apt\" or \"apt-get\" or\n \"aptitude\" or \"squid\" or \"snap\" or \"fusermount\" or \"pkexec\" or \"umount\" or \"master\" or \"omsbaseline\" or \"dzdo\" or\n \"sandfly\" or \"logrotate\"\n ) or\n process.args:/usr/bin/python*\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7787362c-90ff-4b1a-b313-8808b1020e64", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click Add integrations.\n- In the query bar, search for Elastic Defend and select the integration to see more details about it.\n- Click Add Elastic Defend.\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either Traditional Endpoints or Cloud Workloads.\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in New agent policy name. If other agent policies already exist, you can click the Existing hosts tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click Save and Continue.\n- To complete the integration, select Add Elastic Agent to your hosts and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.013", + "name": "KernelCallbackTable", + "reference": "https://attack.mitre.org/techniques/T1574/013/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 2 + }, + "id": "7787362c-90ff-4b1a-b313-8808b1020e64_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/79124edf-30a8-4d48-95c4-11522cad94b1_3.json b/packages/security_detection_engine/kibana/security_rule/79124edf-30a8-4d48-95c4-11522cad94b1_3.json new file mode 100644 index 00000000000..35a804295ae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/79124edf-30a8-4d48-95c4-11522cad94b1_3.json @@ -0,0 +1,157 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Detects files being compressed or archived into common formats. This is a common technique used to obfuscate files to evade detection or to staging data for exfiltration.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 1000, + "name": "File Compressed or Archived into Common Format", + "query": "file where event.type in (\"creation\", \"change\") and process.executable != null and not user.id : \"S-1-5-18\" and\n file.Ext.header_bytes : (\n /* compression formats */\n \"1F9D*\", /* tar zip, tar.z (Lempel-Ziv-Welch algorithm) */\n \"1FA0*\", /* tar zip, tar.z (LZH algorithm) */\n \"425A68*\", /* Bzip2 */\n \"524E4301*\", /* Rob Northen Compression */\n \"524E4302*\", /* Rob Northen Compression */\n \"4C5A4950*\", /* LZIP */\n \"504B0*\", /* ZIP */\n \"526172211A07*\", /* RAR compressed */\n \"44434D0150413330*\", /* Windows Update Binary Delta Compression file */\n \"50413330*\", /* Windows Update Binary Delta Compression file */\n \"377ABCAF271C*\", /* 7-Zip */\n \"1F8B*\", /* GZIP */\n \"FD377A585A00*\", /* XZ, tar.xz */\n \"7801*\",\t /* zlib: No Compression (no preset dictionary) */\n \"785E*\",\t /* zlib: Best speed (no preset dictionary) */\n \"789C*\",\t /* zlib: Default Compression (no preset dictionary) */\n \"78DA*\", \t /* zlib: Best Compression (no preset dictionary) */\n \"7820*\",\t /* zlib: No Compression (with preset dictionary) */\n \"787D*\",\t /* zlib: Best speed (with preset dictionary) */\n \"78BB*\",\t /* zlib: Default Compression (with preset dictionary) */\n \"78F9*\",\t /* zlib: Best Compression (with preset dictionary) */\n \"62767832*\", /* LZFSE */\n \"28B52FFD*\", /* Zstandard, zst */\n \"5253564B44415441*\", /* QuickZip rs compressed archive */\n \"2A2A4143452A2A*\", /* ACE */\n\n /* archive formats */\n \"2D686C302D*\", /* lzh */\n \"2D686C352D*\", /* lzh */\n \"303730373037*\", /* cpio */\n \"78617221*\", /* xar */\n \"4F4152*\", /* oar */\n \"49536328*\" /* cab archive */\n ) and\n not (\n (\n process.name : \"firefox.exe\" and\n process.code_signature.subject_name : \"Mozilla Corporation\" and process.code_signature.trusted == true\n ) or\n (\n process.name : \"wazuh-agent.exe\" and\n process.code_signature.subject_name : \"Wazuh, Inc\" and process.code_signature.trusted == true and\n file.name : (\"ossec-*.log.gz\", \"tmp-entry.gz\", \"tmp-entry\", \"last-entry.gz\")\n ) or\n (\n process.name : \"excel.exe\" and\n process.code_signature.subject_name : \"Microsoft Corporation\" and process.code_signature.trusted == true and\n file.extension : (\"tmp\", \"xlsx\", \"gz\", \"xlsb\", \"xar\", \"xslm\")\n ) or\n (\n process.name : \"Dropbox.exe\" and\n process.code_signature.subject_name : \"Dropbox, Inc\" and process.code_signature.trusted == true and\n file.name : \"store.bin\"\n ) or\n (\n process.name : \"DellSupportAssistRemedationService.exe\" and\n process.code_signature.subject_name : \"Dell Inc\" and process.code_signature.trusted == true and\n file.extension : \"manifest\"\n )\n )\n", + "references": [ + "https://en.wikipedia.org/wiki/List_of_file_signatures" + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "file.Ext.header_bytes", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.subject_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "79124edf-30a8-4d48-95c4-11522cad94b1", + "severity": "low", + "tags": [ + "Data Source: Elastic Defend", + "Domain: Endpoint", + "OS: macOS", + "OS: Windows", + "Tactic: Collection", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1560", + "name": "Archive Collected Data", + "reference": "https://attack.mitre.org/techniques/T1560/", + "subtechnique": [ + { + "id": "T1560.001", + "name": "Archive via Utility", + "reference": "https://attack.mitre.org/techniques/T1560/001/" + } + ] + }, + { + "id": "T1074", + "name": "Data Staged", + "reference": "https://attack.mitre.org/techniques/T1074/", + "subtechnique": [ + { + "id": "T1074.001", + "name": "Local Data Staging", + "reference": "https://attack.mitre.org/techniques/T1074/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1132", + "name": "Data Encoding", + "reference": "https://attack.mitre.org/techniques/T1132/", + "subtechnique": [ + { + "id": "T1132.001", + "name": "Standard Encoding", + "reference": "https://attack.mitre.org/techniques/T1132/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "79124edf-30a8-4d48-95c4-11522cad94b1_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/79f97b31-480e-4e63-a7f4-ede42bf2c6de_108.json b/packages/security_detection_engine/kibana/security_rule/79f97b31-480e-4e63-a7f4-ede42bf2c6de_108.json new file mode 100644 index 00000000000..e79970cd0f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/79f97b31-480e-4e63-a7f4-ede42bf2c6de_108.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identify the modification of the msDS-KeyCredentialLink attribute in an Active Directory Computer or User Object. Attackers can abuse control over the object and create a key pair, append to raw public key in the attribute, and obtain persistent and stealthy access to the target user or computer object.", + "false_positives": [ + "Modifications in the msDS-KeyCredentialLink attribute can be done legitimately by the Azure AD Connect synchronization account or the ADFS service account. These accounts can be added as Exceptions." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Shadow Credentials added to AD Object", + "note": "## Triage and analysis\n\n### Investigating Potential Shadow Credentials added to AD Object\n\nThe msDS-KeyCredentialLink is an Active Directory (AD) attribute that links cryptographic certificates to a user or computer for domain authentication.\n\nAttackers with write privileges on this attribute over an object can abuse it to gain access to the object or maintain persistence. This means they can authenticate and perform actions on behalf of the exploited identity, and they can use Shadow Credentials to request Ticket Granting Tickets (TGTs) on behalf of the identity.\n\n#### Possible investigation steps\n\n- Identify whether Windows Hello for Business (WHfB) and/or Azure AD is used in the environment.\n - Review the event ID 4624 for logon events involving the subject identity (`winlog.event_data.SubjectUserName`).\n - Check whether the `source.ip` is the server running Azure AD Connect.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Review the event IDs 4768 and 4769 for suspicious ticket requests involving the modified identity (`winlog.event_data.ObjectDN`).\n - Extract the source IP addresses from these events and use them as indicators of compromise (IoCs) to investigate whether the host is compromised and to scope the attacker's access to the environment.\n\n### False positive analysis\n\n- Administrators might use custom accounts on Azure AD Connect. If this is the case, make sure the account is properly secured. You can also create an exception for the account if expected activity makes too much noise in your environment.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n - Remove the Shadow Credentials from the object.\n- Investigate how the attacker escalated privileges and identify systems they used to conduct lateral movement. Use this information to determine ways the attacker could regain access to the environment.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.action:\"Directory Service Changes\" and event.code:\"5136\" and\n winlog.event_data.AttributeLDAPDisplayName:\"msDS-KeyCredentialLink\" and winlog.event_data.AttributeValue :B\\:828* and\n not winlog.event_data.SubjectUserName: MSOL_*\n", + "references": [ + "https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab", + "https://www.thehacker.recipes/ad/movement/kerberos/shadow-credentials", + "https://github.com/OTRF/Set-AuditRule", + "https://cyberstoph.org/posts/2022/03/detecting-shadow-credentials/" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeValue", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserName", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "79f97b31-480e-4e63-a7f4-ede42bf2c6de", + "setup": "## Setup\n\nThe 'Audit Directory Service Changes' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n\nThe above policy does not cover User objects, so we need to set up an AuditRule using https://github.com/OTRF/Set-AuditRule.\nAs this specifies the msDS-KeyCredentialLink Attribute GUID, it is expected to be low noise.\n\n```\nSet-AuditRule -AdObjectPath 'AD:\\CN=Users,DC=Domain,DC=com' -WellKnownSidType WorldSid -Rights WriteProperty -InheritanceFlags Children -AttributeGUID 5b47d60f-6090-40b2-9f37-2a4de88f3063 -AuditFlags Success\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1556", + "name": "Modify Authentication Process", + "reference": "https://attack.mitre.org/techniques/T1556/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "79f97b31-480e-4e63-a7f4-ede42bf2c6de_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5.json b/packages/security_detection_engine/kibana/security_rule/7acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5.json new file mode 100644 index 00000000000..0d8234c9b50 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the usage of Docker runtime sockets to escalate privileges on Linux systems. Docker sockets by default are only be writable by the root user and docker group. Attackers that have permissions to write to these sockets may be able to create and run a container that allows them to escalate privileges and gain further access onto the host file system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation through Writable Docker Socket", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n(\n (process.name == \"docker\" and process.args : \"run\" and process.args : \"-it\" and \n process.args : (\"unix://*/docker.sock\", \"unix://*/dockershim.sock\")) or \n (process.name == \"socat\" and process.args : (\"UNIX-CONNECT:*/docker.sock\", \"UNIX-CONNECT:*/dockershim.sock\"))\n) and not user.Ext.real.id : \"0\" and not group.Ext.real.id : \"0\"\n", + "references": [ + "https://book.hacktricks.xyz/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation#automatic-enumeration-and-escape" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "7acb2de3-8465-472a-8d9c-ccd7b73d0ed8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Domain: Container", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1611", + "name": "Escape to Host", + "reference": "https://attack.mitre.org/techniques/T1611/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "7acb2de3-8465-472a-8d9c-ccd7b73d0ed8_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7b8bfc26-81d2-435e-965c-d722ee397ef1_110.json b/packages/security_detection_engine/kibana/security_rule/7b8bfc26-81d2-435e-965c-d722ee397ef1_110.json new file mode 100644 index 00000000000..0b4fe68b2ea --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7b8bfc26-81d2-435e-965c-d722ee397ef1_110.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies attempts to enumerate hosts in a network using the built-in Windows net.exe tool.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Network Enumeration", + "note": "## Triage and analysis\n\n### Investigating Windows Network Enumeration\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `net` utility to enumerate servers in the environment that hosts shared drives or printers. This information is useful to attackers as they can identify targets for lateral movements and search for valuable shared data.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n ((process.name : \"net.exe\" or process.pe.original_file_name == \"net.exe\") or\n ((process.name : \"net1.exe\" or process.pe.original_file_name == \"net1.exe\") and\n not process.parent.name : \"net.exe\")) and\n (process.args : \"view\" or (process.args : \"time\" and process.args : \"\\\\\\\\*\"))\n\n\n /* expand when ancestry is available\n and not descendant of [process where event.type == \"start\" and process.name : \"cmd.exe\" and\n ((process.parent.name : \"userinit.exe\") or\n (process.parent.name : \"gpscript.exe\") or\n (process.parent.name : \"explorer.exe\" and\n process.args : \"C:\\\\*\\\\Start Menu\\\\Programs\\\\Startup\\\\*.bat*\"))]\n */\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7b8bfc26-81d2-435e-965c-d722ee397ef1", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1018", + "name": "Remote System Discovery", + "reference": "https://attack.mitre.org/techniques/T1018/" + }, + { + "id": "T1135", + "name": "Network Share Discovery", + "reference": "https://attack.mitre.org/techniques/T1135/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1039", + "name": "Data from Network Shared Drive", + "reference": "https://attack.mitre.org/techniques/T1039/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "7b8bfc26-81d2-435e-965c-d722ee397ef1_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7ba58110-ae13-439b-8192-357b0fcfa9d7_208.json b/packages/security_detection_engine/kibana/security_rule/7ba58110-ae13-439b-8192-357b0fcfa9d7_208.json new file mode 100644 index 00000000000..4e108b5c7c7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7ba58110-ae13-439b-8192-357b0fcfa9d7_208.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious access to LSASS handle from a call trace pointing to seclogon.dll and with a suspicious access rights value. This may indicate an attempt to leak an LSASS handle via abusing the Secondary Logon service in preparation for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious LSASS Access via MalSecLogon", + "query": "process where host.os.type == \"windows\" and event.code == \"10\" and\n winlog.event_data.TargetImage : \"?:\\\\WINDOWS\\\\system32\\\\lsass.exe\" and\n\n /* seclogon service accessing lsass */\n winlog.event_data.CallTrace : \"*seclogon.dll*\" and process.name : \"svchost.exe\" and\n\n /* PROCESS_CREATE_PROCESS & PROCESS_DUP_HANDLE & PROCESS_QUERY_INFORMATION */\n winlog.event_data.GrantedAccess == \"0x14c0\"\n", + "references": [ + "https://splintercod3.blogspot.com/p/the-hidden-side-of-seclogon-part-3.html" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.GrantedAccess", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetImage", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "7ba58110-ae13-439b-8192-357b0fcfa9d7", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 208 + }, + "id": "7ba58110-ae13-439b-8192-357b0fcfa9d7_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7bcbb3ac-e533-41ad-a612-d6c3bf666aba_105.json b/packages/security_detection_engine/kibana/security_rule/7bcbb3ac-e533-41ad-a612-d6c3bf666aba_105.json new file mode 100644 index 00000000000..386767b2b89 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7bcbb3ac-e533-41ad-a612-d6c3bf666aba_105.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may attempt to clear or disable the Bash command-line history in an attempt to evade detection or forensic investigations.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Tampering of Shell Command-Line History", + "query": "process where event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and event.type == \"start\" and\n (\n ((process.args : (\"rm\", \"echo\") or\n (process.args : \"ln\" and process.args : \"-sf\" and process.args : \"/dev/null\") or\n (process.args : \"truncate\" and process.args : \"-s0\"))\n and process.args : (\".bash_history\", \"/root/.bash_history\", \"/home/*/.bash_history\",\"/Users/.bash_history\", \"/Users/*/.bash_history\",\n \".zsh_history\", \"/root/.zsh_history\", \"/home/*/.zsh_history\", \"/Users/.zsh_history\", \"/Users/*/.zsh_history\")) or\n (process.name : \"history\" and process.args : \"-c\") or\n (process.args : \"export\" and process.args : (\"HISTFILE=/dev/null\", \"HISTFILESIZE=0\")) or\n (process.args : \"unset\" and process.args : \"HISTFILE\") or\n (process.args : \"set\" and process.args : \"history\" and process.args : \"+o\")\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7bcbb3ac-e533-41ad-a612-d6c3bf666aba", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.003", + "name": "Clear Command History", + "reference": "https://attack.mitre.org/techniques/T1070/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 105 + }, + "id": "7bcbb3ac-e533-41ad-a612-d6c3bf666aba_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7dfaaa17-425c-4fe7-bd36-83705fde7c2b_2.json b/packages/security_detection_engine/kibana/security_rule/7dfaaa17-425c-4fe7-bd36-83705fde7c2b_2.json new file mode 100644 index 00000000000..06b3f2d83f2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7dfaaa17-425c-4fe7-bd36-83705fde7c2b_2.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Monitors for the elevation of regular user permissions to root permissions through the kworker process. kworker, or kernel worker, processes are part of the kernel's workqueue mechanism. They are responsible for executing work that has been scheduled to be done in kernel space, which might include tasks like handling interrupts, background activities, and other kernel-related tasks. Attackers may attempt to evade detection by masquerading as a kernel worker process, and hijack the execution flow by hooking certain functions/syscalls through a rootkit in order to provide easy access to root via a special modified command.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Kworker UID Elevation", + "query": "process where host.os.type == \"linux\" and event.action == \"session_id_change\" and process.name : \"kworker*\" and\nuser.id == \"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7dfaaa17-425c-4fe7-bd36-83705fde7c2b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click Add integrations.\n- In the query bar, search for Elastic Defend and select the integration to see more details about it.\n- Click Add Elastic Defend.\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either Traditional Endpoints or Cloud Workloads.\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in New agent policy name. If other agent policies already exist, you can click the Existing hosts tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click Save and Continue.\n- To complete the integration, select Add Elastic Agent to your hosts and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.013", + "name": "KernelCallbackTable", + "reference": "https://attack.mitre.org/techniques/T1574/013/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "7dfaaa17-425c-4fe7-bd36-83705fde7c2b_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7f370d54-c0eb-4270-ac5a-9a6020585dc6_108.json b/packages/security_detection_engine/kibana/security_rule/7f370d54-c0eb-4270-ac5a-9a6020585dc6_108.json new file mode 100644 index 00000000000..96b525ec9e0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7f370d54-c0eb-4270-ac5a-9a6020585dc6_108.json @@ -0,0 +1,133 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies WMIC allowlist bypass techniques by alerting on suspicious execution of scripts. When WMIC loads scripting libraries it may be indicative of an allowlist bypass.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious WMIC XSL Script Execution", + "query": "sequence by process.entity_id with maxspan = 2m\n[process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"WMIC.exe\" or process.pe.original_file_name : \"wmic.exe\") and\n process.args : (\"format*:*\", \"/format*:*\", \"*-format*:*\") and\n not process.command_line : (\"* /format:table *\", \"* /format:table\")]\n[any where host.os.type == \"windows\" and (event.category == \"library\" or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : (\"jscript.dll\", \"vbscript.dll\") or file.name : (\"jscript.dll\", \"vbscript.dll\"))]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "7f370d54-c0eb-4270-ac5a-9a6020585dc6", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1220", + "name": "XSL Script Processing", + "reference": "https://attack.mitre.org/techniques/T1220/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "7f370d54-c0eb-4270-ac5a-9a6020585dc6_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/7fb500fa-8e24-4bd1-9480-2a819352602c_9.json b/packages/security_detection_engine/kibana/security_rule/7fb500fa-8e24-4bd1-9480-2a819352602c_9.json new file mode 100644 index 00000000000..6f442916fd8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/7fb500fa-8e24-4bd1-9480-2a819352602c_9.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the creation of a systemd timer within any of the default systemd timer directories. Systemd timers can be used by an attacker to gain persistence, by scheduling the execution of a command or script. Similarly to cron/at, systemd timers can be set up to execute on boot time, or on a specific point in time, which allows attackers to regain access in case the connection to the infected asset was lost.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "New Systemd Timer Created", + "new_terms_fields": [ + "host.id", + "file.path", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating New Systemd Timer Created\n\nSystemd timers are used for scheduling and automating recurring tasks or services on Linux systems. \n\nAttackers can leverage systemd timers to run scripts, commands, or malicious software at system boot or on a set time interval by creating a systemd timer and a corresponding systemd service file. \n\nThis rule monitors the creation of new systemd timer files, potentially indicating the creation of a persistence mechanism.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the timer file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate the currently enabled systemd timers through the following command `sudo systemctl list-timers`.\n- Search for the systemd service file named similarly to the timer that was created.\n- Investigate whether any other files in any of the available systemd directories have been altered through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\npath LIKE '/etc/systemd/system/%' OR \\npath LIKE '/usr/local/lib/systemd/system/%' OR \\npath LIKE '/lib/systemd/system/%' OR\\npath LIKE '/usr/lib/systemd/system/%' OR\\npath LIKE '/home/user/.config/systemd/user/%'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\npath LIKE '/etc/systemd/system/%' OR \\npath LIKE '/usr/local/lib/systemd/system/%' OR \\npath LIKE '/lib/systemd/system/%' OR\\npath LIKE '/usr/lib/systemd/system/%' OR\\npath LIKE '/home/{{user.name}}/.config/systemd/user/%'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses systemd timers for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the service/timer or restore its original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type : \"linux\" and event.action : (\"creation\" or \"file_create_event\") and file.extension : \"timer\" and\nfile.path : (/etc/systemd/system/* or /usr/local/lib/systemd/system/* or /lib/systemd/system/* or \n/usr/lib/systemd/system/* or /home/*/.config/systemd/user/*) and not (\n (process.name : (\n \"docker\" or \"dockerd\" or \"dnf\" or \"yum\" or \"rpm\" or \"dpkg\" or \"executor\" or \"cloudflared\" or \"pacman\" or \"podman\" or \n \"pamac-daemon\"\n ))\n or (file.name:apt-*.timer)\n)\n", + "references": [ + "https://opensource.com/article/20/7/systemd-timers", + "https://pberba.github.io/security/2022/01/30/linux-threat-hunting-for-persistence-systemd-timers-cron/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "7fb500fa-8e24-4bd1-9480-2a819352602c", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.006", + "name": "Systemd Timers", + "reference": "https://attack.mitre.org/techniques/T1053/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 9 + }, + "id": "7fb500fa-8e24-4bd1-9480-2a819352602c_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/80084fa9-8677-4453-8680-b891d3c0c778_106.json b/packages/security_detection_engine/kibana/security_rule/80084fa9-8677-4453-8680-b891d3c0c778_106.json new file mode 100644 index 00000000000..4b694d1b55f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/80084fa9-8677-4453-8680-b891d3c0c778_106.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Loadable Kernel Modules (or LKMs) are pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. This identifies attempts to enumerate information about a kernel module using the /proc/modules filesystem. This filesystem is used by utilities such as lsmod and kmod to list the available kernel modules.", + "false_positives": [ + "Security tools and device drivers may run these programs in order to enumerate kernel modules. Use of these programs by ordinary users is uncommon. These can be exempted by process name or username." + ], + "from": "now-119m", + "history_window_start": "now-7d", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Enumeration of Kernel Modules via Proc", + "new_terms_fields": [ + "host.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:file and event.action:\"opened-file\" and file.path:\"/proc/modules\" and\nnot process.name:(grep or python* or chef-client)\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "80084fa9-8677-4453-8680-b891d3c0c778", + "setup": "## Setup\n\nThis rule requires the use of the `auditd_manager` integration. `Auditd_manager` is a tool designed to simplify and enhance the management of the audit subsystem in Linux systems. It provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system. The following steps should be executed in order to install and deploy `auditd_manager` on a Linux system.\n```\nKibana -->\nManagement -->\nIntegrations -->\nAuditd Manager -->\nAdd Auditd Manager\n```\n`Auditd_manager` subscribes to the kernel and receives events as they occur without any additional configuration. However, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\nFor this detection rule to trigger, the following additional audit rules are required to be added to the integration:\n```\n-w /proc/ -p r -k audit_proc\n```\nAdd the newly installed `auditd manager` to an agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n", + "severity": "low", + "tags": [ + "Data Source: Auditd Manager", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 106 + }, + "id": "80084fa9-8677-4453-8680-b891d3c0c778_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/814d96c7-2068-42aa-ba8e-fe0ddd565e2e_3.json b/packages/security_detection_engine/kibana/security_rule/814d96c7-2068-42aa-ba8e-fe0ddd565e2e_3.json new file mode 100644 index 00000000000..7e068d842d1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/814d96c7-2068-42aa-ba8e-fe0ddd565e2e_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "An anomaly detection job has detected a remote file transfer with a rare extension, which could indicate potential lateral movement activity on the host.", + "from": "now-90m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_rare_file_extension_remote_transfer", + "name": "Unusual Remote File Extension", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "814d96c7-2068-42aa-ba8e-fe0ddd565e2e", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "814d96c7-2068-42aa-ba8e-fe0ddd565e2e_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/818e23e6-2094-4f0e-8c01-22d30f3506c6_108.json b/packages/security_detection_engine/kibana/security_rule/818e23e6-2094-4f0e-8c01-22d30f3506c6_108.json new file mode 100644 index 00000000000..c8cdde4a0e5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/818e23e6-2094-4f0e-8c01-22d30f3506c6_108.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to disable PowerShell Script Block Logging via registry modification. Attackers may disable this logging to conceal their activities in the host and evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "PowerShell Script Block Logging Disabled", + "note": "## Triage and analysis\n\n### Investigating PowerShell Script Block Logging Disabled\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks, making it available in various environments and creating an attractive way for attackers to execute code.\n\nPowerShell Script Block Logging is a feature of PowerShell that records the content of all script blocks that it processes, giving defenders visibility of PowerShell scripts and sequences of executed commands.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check whether it makes sense for the user to use PowerShell to complete tasks.\n- Investigate if PowerShell scripts were run after logging was disabled.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- PowerShell Suspicious Discovery Related Windows API Functions - 61ac3638-40a3-44b2-855a-985636ca985e\n- PowerShell Keylogging Script - bd2c86a0-8b61-4457-ab38-96943984e889\n- PowerShell Suspicious Script with Audio Capture Capabilities - 2f2f4939-0b34-40c2-a0a3-844eb7889f43\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- Suspicious .NET Reflection via PowerShell - e26f042e-c590-4e82-8e05-41e81bd822ad\n- PowerShell Suspicious Payload Encoded and Compressed - 81fe9dc6-a2d7-4192-a2d8-eed98afc766a\n- PowerShell Suspicious Script with Screenshot Capabilities - 959a7353-1129-4aa7-9084-30746b256a70\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type == \"change\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\ScriptBlockLogging\\\\EnableScriptBlockLogging\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\PowerShell\\\\ScriptBlockLogging\\\\EnableScriptBlockLogging\"\n ) and registry.data.strings : (\"0\", \"0x00000000\")\n", + "references": [ + "https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.PowerShell::EnableScriptBlockLogging" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "818e23e6-2094-4f0e-8c01-22d30f3506c6", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.002", + "name": "Disable Windows Event Logging", + "reference": "https://attack.mitre.org/techniques/T1562/002/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "818e23e6-2094-4f0e-8c01-22d30f3506c6_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/81fe9dc6-a2d7-4192-a2d8-eed98afc766a_111.json b/packages/security_detection_engine/kibana/security_rule/81fe9dc6-a2d7-4192-a2d8-eed98afc766a_111.json new file mode 100644 index 00000000000..51dbcb8825c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/81fe9dc6-a2d7-4192-a2d8-eed98afc766a_111.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of .NET functionality for decompression and base64 decoding combined in PowerShell scripts, which malware and security tools heavily use to deobfuscate payloads and load them directly in memory to bypass defenses.", + "false_positives": [ + "Legitimate PowerShell Scripts which makes use of compression and encoding." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Suspicious Payload Encoded and Compressed", + "note": "## Triage and analysis\n\n### Investigating PowerShell Suspicious Payload Encoded and Compressed\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can embed compressed and encoded payloads in scripts to load directly into the memory without touching the disk. This strategy can circumvent string and file-based security protections.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately outside engineering or IT business units. As long as the analyst did not identify malware or suspicious activity related to the user or host, this alert can be dismissed.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- Suspicious .NET Reflection via PowerShell - e26f042e-c590-4e82-8e05-41e81bd822ad\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n (\n \"System.IO.Compression.DeflateStream\" or\n \"System.IO.Compression.GzipStream\" or\n \"IO.Compression.DeflateStream\" or\n \"IO.Compression.GzipStream\"\n ) and\n FromBase64String\n ) and\n not file.path: ?\\:\\\\\\\\ProgramData\\\\\\\\Microsoft\\\\\\\\Windows?Defender?Advanced?Threat?Protection\\\\\\\\Downloads\\\\\\\\* and\n not user.id : \"S-1-5-18\"\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "81fe9dc6-a2d7-4192-a2d8-eed98afc766a", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/" + }, + { + "id": "T1140", + "name": "Deobfuscate/Decode Files or Information", + "reference": "https://attack.mitre.org/techniques/T1140/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 111 + }, + "id": "81fe9dc6-a2d7-4192-a2d8-eed98afc766a_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/827f8d8f-4117-4ae4-b551-f56d54b9da6b_107.json b/packages/security_detection_engine/kibana/security_rule/827f8d8f-4117-4ae4-b551-f56d54b9da6b_107.json new file mode 100644 index 00000000000..87cf984afab --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/827f8d8f-4117-4ae4-b551-f56d54b9da6b_107.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution of the Apple script interpreter (osascript) without a password prompt and with administrator privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Apple Scripting Execution with Administrator Privileges", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name : \"osascript\" and\n process.command_line : \"osascript*with administrator privileges\"\n", + "references": [ + "https://discussions.apple.com/thread/2266150" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "827f8d8f-4117-4ae4-b551-f56d54b9da6b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "827f8d8f-4117-4ae4-b551-f56d54b9da6b_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/835c0622-114e-40b5-a346-f843ea5d01f1_6.json b/packages/security_detection_engine/kibana/security_rule/835c0622-114e-40b5-a346-f843ea5d01f1_6.json new file mode 100644 index 00000000000..6361bcece18 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/835c0622-114e-40b5-a346-f843ea5d01f1_6.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple consecutive login attempts executed by one process targeting a local linux user account within a short time interval. Adversaries might brute force login attempts across different users with a default wordlist or a set of customly crafted passwords in an attempt to gain access to these accounts.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Local Account Brute Force Detected", + "query": "sequence by host.id, process.parent.executable, user.id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name == \"su\" and \n not process.parent.name in (\n \"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"clickhouse-server\", \"ma\", \"gitlab-runner\",\n \"updatedb.findutils\", \"cron\"\n )\n ] with runs=10\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "835c0622-114e-40b5-a346-f843ea5d01f1", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 6 + }, + "id": "835c0622-114e-40b5-a346-f843ea5d01f1_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7.json b/packages/security_detection_engine/kibana/security_rule/83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7.json new file mode 100644 index 00000000000..c4e11744787 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may attempt to disable the iptables or firewall service in an attempt to affect how a host is allowed to receive or send network traffic.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Attempt to Disable IPTables or Firewall", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\n (\n /* disable FW */\n (\n (process.name == \"ufw\" and process.args == \"disable\") or\n (process.name == \"iptables\" and process.args == \"-F\" and process.args_count == 2)\n ) or\n\n /* stop FW service */\n (\n ((process.name == \"service\" and process.args == \"stop\") or\n (process.name == \"chkconfig\" and process.args == \"off\") or\n (process.name == \"systemctl\" and process.args in (\"disable\", \"stop\", \"kill\"))) and\n process.args in (\"firewalld\", \"ip6tables\", \"iptables\")\n )\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "83e9c2b3-24ef-4c1d-a8cd-5ebafb5dfa2f_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/846fe13f-6772-4c83-bd39-9d16d4ad1a81_4.json b/packages/security_detection_engine/kibana/security_rule/846fe13f-6772-4c83-bd39-9d16d4ad1a81_4.json new file mode 100644 index 00000000000..94d22156ad0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/846fe13f-6772-4c83-bd39-9d16d4ad1a81_4.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to Microsoft Exchange Transport Agents install. Adversaries may leverage malicious Microsoft Exchange Transport Agents to execute tasks in response to adversary-defined criteria, establishing persistence.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft Exchange Transport Agent Install Script", + "query": "event.category: \"process\" and host.os.type:windows and\n powershell.file.script_block_text : (\n (\n \"Install-TransportAgent\" or\n \"Enable-TransportAgent\"\n )\n ) and\n not user.id : \"S-1-5-18\" and\n not powershell.file.script_block_text : (\n \"'Install-TransportAgent', 'Invoke-MonitoringProbe', 'Mount-Database', 'Move-ActiveMailboxDatabase',\" or\n \"'Enable-TransportAgent', 'Enable-TransportRule', 'Export-ActiveSyncLog', 'Export-AutoDiscoverConfig',\" or\n (\"scriptCmd.GetSteppablePipeline\" and \"ForwardHelpTargetName Install-TransportAgent\")\n )\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "846fe13f-6772-4c83-bd39-9d16d4ad1a81", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\nSteps to implement the logging policy via registry:\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1505", + "name": "Server Software Component", + "reference": "https://attack.mitre.org/techniques/T1505/", + "subtechnique": [ + { + "id": "T1505.002", + "name": "Transport Agent", + "reference": "https://attack.mitre.org/techniques/T1505/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "846fe13f-6772-4c83-bd39-9d16d4ad1a81_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/84d1f8db-207f-45ab-a578-921d91c23eb2_3.json b/packages/security_detection_engine/kibana/security_rule/84d1f8db-207f-45ab-a578-921d91c23eb2_3.json new file mode 100644 index 00000000000..774be85bac6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/84d1f8db-207f-45ab-a578-921d91c23eb2_3.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a non-interactive terminal (tty) is being upgraded to a fully interactive shell. Attackers may upgrade a simple reverse shell to a fully interactive tty after obtaining initial access to a host, in order to obtain a more stable connection.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Upgrade of Non-interactive Shell", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and (\n (process.name == \"stty\" and process.args == \"raw\" and process.args == \"-echo\" and process.args_count >= 3) or\n (process.name == \"script\" and process.args in (\"-qc\", \"-c\") and process.args == \"/dev/null\" and \n process.args_count == 4)\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "84d1f8db-207f-45ab-a578-921d91c23eb2", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "84d1f8db-207f-45ab-a578-921d91c23eb2_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/850d901a-2a3c-46c6-8b22-55398a01aad8_110.json b/packages/security_detection_engine/kibana/security_rule/850d901a-2a3c-46c6-8b22-55398a01aad8_110.json new file mode 100644 index 00000000000..9a404282fa2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/850d901a-2a3c-46c6-8b22-55398a01aad8_110.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote access to the registry to potentially dump credential data from the Security Account Manager (SAM) registry hive in preparation for credential access and privileges elevation.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Remote Credential Access via Registry", + "note": "## Triage and analysis\n\n### Investigating Potential Remote Credential Access via Registry\n\nDumping registry hives is a common way to access credential information. Some hives store credential material, such as the SAM hive, which stores locally cached credentials (SAM secrets), and the SECURITY hive, which stores domain cached credentials (LSA secrets). Dumping these hives in combination with the SYSTEM hive enables the attacker to decrypt these secrets.\n\nAttackers can use tools like secretsdump.py or CrackMapExec to dump the registry hives remotely, and use dumped credentials to access other systems in the domain.\n\n#### Possible investigation steps\n\n- Identify the specifics of the involved assets, such as their role, criticality, and associated users.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Determine the privileges of the compromised accounts.\n- Investigate other alerts associated with the user/source host during the past 48 hours.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (e.g., 4624) to the target host.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Related rules\n\n- Credential Acquisition via Registry Hive Dumping - a7e7bfa3-088e-4f13-b29e-3986e0e756b8\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine if other hosts were compromised.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Ensure that the machine has the latest security updates and is not running unsupported Windows versions.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and\n event.action == \"creation\" and process.name : \"svchost.exe\" and\n file.Ext.header_bytes : \"72656766*\" and user.id : (\"S-1-5-21-*\", \"S-1-12-1-*\") and file.size >= 30000 and\n file.path : (\"?:\\\\Windows\\\\system32\\\\*.tmp\", \"?:\\\\WINDOWS\\\\Temp\\\\*.tmp\")\n", + "references": [ + "https://github.com/SecureAuthCorp/impacket/blob/master/examples/secretsdump.py", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "file.Ext.header_bytes", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.size", + "type": "long" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "850d901a-2a3c-46c6-8b22-55398a01aad8", + "setup": "## Setup\n\nThis rule uses Elastic Endpoint file creation and system integration events for correlation. Both data should be collected from the host for this detection to work.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "850d901a-2a3c-46c6-8b22-55398a01aad8_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/86c3157c-a951-4a4f-989b-2f0d0f1f9518_1.json b/packages/security_detection_engine/kibana/security_rule/86c3157c-a951-4a4f-989b-2f0d0f1f9518_1.json deleted file mode 100644 index 0c27a820096..00000000000 --- a/packages/security_detection_engine/kibana/security_rule/86c3157c-a951-4a4f-989b-2f0d0f1f9518_1.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "attributes": { - "author": [ - "Elastic" - ], - "building_block_type": "default", - "description": "Monitors for a sequence of network activity on atypical ports, prior to receiving a single packet on such a non-standard port, which potentially indicates signal port knocking activity. Port knocking is a covert method of externally opening ports by sending a sequence of packets to previously closed ports, which adversaries may leverage to discreetly gain access without directly alerting traditional monitoring systems.", - "from": "now-9m", - "index": [ - "logs-endpoint.events.*", - "logs-network_traffic.*" - ], - "language": "eql", - "license": "Elastic License v2", - "name": "Potential Linux Reverse Connection through Port Knocking", - "query": "sequence by host.id with maxspan=10s\n [network where host.os.type == \"linux\" and event.action in (\"connection_accepted\", \"connection_attempted\") and \n event.type == \"start\" and process.name : \"*\" and (\n process.name : (\n \"python*\", \"php*\", \"perl*\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\",\n \"awk\", \"gawk\", \"mawk\", \"nawk\", \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\"\n ) or not process.executable : (\"/usr/bin/*\", \"/bin/*\")\n ) and not (\n cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\") or destination.port in (\n 20, 21, 22, 23, 25, 53, 67, 68, 69, 80, 110, 123, 137, 138, 139, 143, 161, 162, 179, 443, 445, 465, 514, 515,\n 587,636, 989, 990, 993, 995, 1025, 1026, 1080, 1194, 1433, 1434, 1521, 1701, 1723, 1812, 1813, 2082, 2083, 2086,\n 2087, 2095, 2096, 2121, 2483, 2484, 3306, 3389, 3478, 3497, 3544, 3689, 3784, 3785, 389, 3998, 5060, 5061, 5190,\n 5222, 5223, 5228, 5432, 5500, 554, 5631, 5632, 5800, 5801, 5900, 5901, 8000, 8008, 8080, 8081, 8443, 8888, 9100,\n 9200, 9443, 10000\n ) or source.port in (\n 20, 21, 22, 23, 25, 53, 67, 68, 69, 80, 110, 123, 137, 138, 139, 143, 161, 162, 179, 443, 445, 465, 514, 515,\n 587, 636, 989, 990, 993, 995, 1025, 1026, 1080, 1194, 1433, 1434, 1521, 1701, 1723, 1812, 1813, 2082, 2083, 2086,\n 2087, 2095, 2096, 2121, 2483, 2484, 3306, 3389, 3478, 3497, 3544, 3689, 3784, 3785, 389, 3998, 5060, 5061, 5190,\n 5222, 5223, 5228, 5432, 5500, 554, 5631, 5632, 5800, 5801, 5900, 5901, 8000, 8008, 8080, 8081, 8443, 8888, 9100,\n 9200, 9443, 10000)\n )\n ] by destination.ip\n [network where event.dataset == \"network_traffic.flow\" and host.os.type == \"linux\" and event.action == \"network_flow\"\n and event.type == \"connection\" and source.packets == 1 and flow.final == false and not (\n cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\") or destination.port in (\n 20, 21, 22, 23, 25, 53, 67, 68, 69, 80, 110, 123, 137, 138, 139, 143, 161, 162, 179, 443, 445, 465, 514, 515,\n 587,636, 989, 990, 993, 995, 1025, 1026, 1080, 1194, 1433, 1434, 1521, 1701, 1723, 1812, 1813, 2082, 2083, 2086,\n 2087, 2095, 2096, 2121, 2483, 2484, 3306, 3389, 3478, 3497, 3544, 3689, 3784, 3785, 389, 3998, 5060, 5061, 5190,\n 5222, 5223, 5228, 5432, 5500, 554, 5631, 5632, 5800, 5801, 5900, 5901, 8000, 8008, 8080, 8081, 8443, 8888, 9100,\n 9200, 9443, 10000\n ) or source.port in (\n 20, 21, 22, 23, 25, 53, 67, 68, 69, 80, 110, 123, 137, 138, 139, 143, 161, 162, 179, 443, 445, 465, 514, 515,\n 587, 636, 989, 990, 993, 995, 1025, 1026, 1080, 1194, 1433, 1434, 1521, 1701, 1723, 1812, 1813, 2082, 2083, 2086,\n 2087, 2095, 2096, 2121, 2483, 2484, 3306, 3389, 3478, 3497, 3544, 3689, 3784, 3785, 389, 3998, 5060, 5061, 5190,\n 5222, 5223, 5228, 5432, 5500, 554, 5631, 5632, 5800, 5801, 5900, 5901, 8000, 8008, 8080, 8081, 8443, 8888, 9100,\n 9200, 9443, 10000)\n )\n ] by source.ip\n", - "references": [ - "https://github.com/f0rb1dd3n/Reptile" - ], - "related_integrations": [ - { - "package": "endpoint", - "version": "^8.2.0" - }, - { - "package": "network_traffic", - "version": "^1.1.0" - } - ], - "required_fields": [ - { - "ecs": true, - "name": "destination.ip", - "type": "ip" - }, - { - "ecs": true, - "name": "destination.port", - "type": "long" - }, - { - "ecs": true, - "name": "event.action", - "type": "keyword" - }, - { - "ecs": true, - "name": "event.dataset", - "type": "keyword" - }, - { - "ecs": true, - "name": "event.type", - "type": "keyword" - }, - { - "ecs": false, - "name": "flow.final", - "type": "boolean" - }, - { - "ecs": true, - "name": "host.id", - "type": "keyword" - }, - { - "ecs": true, - "name": "host.os.type", - "type": "keyword" - }, - { - "ecs": true, - "name": "process.executable", - "type": "keyword" - }, - { - "ecs": true, - "name": "process.name", - "type": "keyword" - }, - { - "ecs": true, - "name": "source.ip", - "type": "ip" - }, - { - "ecs": true, - "name": "source.packets", - "type": "long" - }, - { - "ecs": true, - "name": "source.port", - "type": "long" - } - ], - "risk_score": 21, - "rule_id": "86c3157c-a951-4a4f-989b-2f0d0f1f9518", - "severity": "low", - "tags": [ - "Domain: Endpoint", - "OS: Linux", - "Use Case: Threat Detection", - "Tactic: Command and Control", - "Data Source: Elastic Defend", - "Rule Type: BBR" - ], - "threat": [ - { - "framework": "MITRE ATT&CK", - "tactic": { - "id": "TA0011", - "name": "Command and Control", - "reference": "https://attack.mitre.org/tactics/TA0011/" - }, - "technique": [ - { - "id": "T1571", - "name": "Non-Standard Port", - "reference": "https://attack.mitre.org/techniques/T1571/" - }, - { - "id": "T1205", - "name": "Traffic Signaling", - "reference": "https://attack.mitre.org/techniques/T1205/", - "subtechnique": [ - { - "id": "T1205.001", - "name": "Port Knocking", - "reference": "https://attack.mitre.org/techniques/T1205/001/" - } - ] - } - ] - }, - { - "framework": "MITRE ATT&CK", - "tactic": { - "id": "TA0005", - "name": "Defense Evasion", - "reference": "https://attack.mitre.org/tactics/TA0005/" - }, - "technique": [] - } - ], - "type": "eql", - "version": 1 - }, - "id": "86c3157c-a951-4a4f-989b-2f0d0f1f9518_1", - "type": "security-rule" -} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/870aecc0-cea4-4110-af3f-e02e9b373655_109.json b/packages/security_detection_engine/kibana/security_rule/870aecc0-cea4-4110-af3f-e02e9b373655_109.json new file mode 100644 index 00000000000..e88acd4d55a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/870aecc0-cea4-4110-af3f-e02e9b373655_109.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the grep command to discover known third-party macOS and Linux security tools, such as Antivirus or Host Firewall details.", + "false_positives": [ + "Endpoint Security installers, updaters and post installation verification scripts." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "auditbeat-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Security Software Discovery via Grep", + "note": "## Triage and analysis\n\n### Investigating Security Software Discovery via Grep\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `grep` utility with arguments compatible to the enumeration of the security software installed on the host. Attackers can use this information to decide whether or not to infect a system, disable protections, use bypasses, etc.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, file modifications, and any spawned child processes.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where event.type == \"start\" and\nprocess.name : \"grep\" and user.id != \"0\" and\n not process.parent.executable : (\"/Library/Application Support/*\", \"/opt/McAfee/agent/scripts/ma\") and\n process.args :\n (\"Little Snitch*\",\n \"Avast*\",\n \"Avira*\",\n \"ESET*\",\n \"BlockBlock*\",\n \"360Sec*\",\n \"LuLu*\",\n \"KnockKnock*\",\n \"kav\",\n \"KIS\",\n \"RTProtectionDaemon*\",\n \"Malware*\",\n \"VShieldScanner*\",\n \"WebProtection*\",\n \"webinspectord*\",\n \"McAfee*\",\n \"isecespd*\",\n \"macmnsvc*\",\n \"masvc*\",\n \"kesl*\",\n \"avscan*\",\n \"guard*\",\n \"rtvscand*\",\n \"symcfgd*\",\n \"scmdaemon*\",\n \"symantec*\",\n \"sophos*\",\n \"osquery*\",\n \"elastic-endpoint*\"\n ) and\n not (\n (process.args : \"Avast\" and process.args : \"Passwords\") or\n (process.parent.args : \"/opt/McAfee/agent/scripts/ma\" and process.parent.args : \"checkhealth\") or\n (process.command_line : (\n \"grep ESET Command-line scanner, version %s -A2\",\n \"grep -i McAfee Web Gateway Core version:\",\n \"grep --color=auto ESET Command-line scanner, version %s -A2\"\n )\n ) or\n (process.parent.command_line : (\n \"\"\"sh -c printf \"command_start_%s\"*; perl -pe 's/[^ -~]/\\n/g' < /opt/eset/esets/sbin/esets_scan | grep 'ESET Command-line scanner, version %s' -A2 | tail -1; printf \"command_done_%s*\"\"\",\n \"\"\"bash -c perl -pe 's/[^ -~]/\\n/g' < /opt/eset/esets/sbin/esets_scan | grep 'ESET Command-line scanner, version %s' -A2 | tail -1\"\"\"\n )\n )\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "870aecc0-cea4-4110-af3f-e02e9b373655", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1518", + "name": "Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/", + "subtechnique": [ + { + "id": "T1518.001", + "name": "Security Software Discovery", + "reference": "https://attack.mitre.org/techniques/T1518/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "870aecc0-cea4-4110-af3f-e02e9b373655_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/871ea072-1b71-4def-b016-6278b505138d_111.json b/packages/security_detection_engine/kibana/security_rule/871ea072-1b71-4def-b016-6278b505138d_111.json new file mode 100644 index 00000000000..b1e68be9f3b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/871ea072-1b71-4def-b016-6278b505138d_111.json @@ -0,0 +1,136 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances of lower privilege accounts enumerating Administrator accounts or groups using built-in Windows tools.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Enumeration of Administrator Accounts", + "note": "## Triage and analysis\n\n### Investigating Enumeration of Administrator Accounts\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `net` and `wmic` utilities to enumerate administrator-related users or groups in the domain and local machine scope. Attackers can use this information to plan their next steps of the attack, such as mapping targets for credential compromise and other post-exploitation activities.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Related rules\n\n- AdFind Command Activity - eda499b8-a073-4e35-9733-22ec71f57f3a\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n (\n (\n (process.name : \"net.exe\" or ?process.pe.original_file_name == \"net.exe\") or\n ((process.name : \"net1.exe\" or ?process.pe.original_file_name == \"net1.exe\") and not process.parent.name : \"net.exe\")\n ) and\n process.args : (\"group\", \"user\", \"localgroup\") and\n process.args : (\"*admin*\", \"Domain Admins\", \"Remote Desktop Users\", \"Enterprise Admins\", \"Organization Management\")\n and not process.args : (\"/add\", \"/delete\")\n ) or\n (\n (process.name : \"wmic.exe\" or ?process.pe.original_file_name == \"wmic.exe\") and\n process.args : (\"group\", \"useraccount\")\n )\n) and not user.id : (\"S-1-5-18\", \"S-1-5-19\", \"S-1-5-20\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "871ea072-1b71-4def-b016-6278b505138d", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.001", + "name": "Local Groups", + "reference": "https://attack.mitre.org/techniques/T1069/001/" + }, + { + "id": "T1069.002", + "name": "Domain Groups", + "reference": "https://attack.mitre.org/techniques/T1069/002/" + } + ] + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + }, + { + "id": "T1087.002", + "name": "Domain Account", + "reference": "https://attack.mitre.org/techniques/T1087/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "871ea072-1b71-4def-b016-6278b505138d_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/884e87cc-c67b-4c90-a4ed-e1e24a940c82_4.json b/packages/security_detection_engine/kibana/security_rule/884e87cc-c67b-4c90-a4ed-e1e24a940c82_4.json new file mode 100644 index 00000000000..3b577fac73d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/884e87cc-c67b-4c90-a4ed-e1e24a940c82_4.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "This rule monitors for the usage of the most common clipboard utilities on unix systems by an uncommon process group leader. Adversaries may collect data stored in the clipboard from users copying information within or between applications.", + "from": "now-119m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Suspicious Clipboard Activity Detected", + "new_terms_fields": [ + "host.id", + "process.group_leader.executable" + ], + "query": "event.category:process and host.os.type:\"linux\" and\nevent.type:\"start\" and event.action:(\"exec\" or \"exec_event\" or \"executed\" or \"process_started\") and\nprocess.name:(\"xclip\" or \"xsel\" or \"wl-clipboard\" or \"clipman\" or \"copyq\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "884e87cc-c67b-4c90-a4ed-e1e24a940c82", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Collection", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1115", + "name": "Clipboard Data", + "reference": "https://attack.mitre.org/techniques/T1115/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 4 + }, + "id": "884e87cc-c67b-4c90-a4ed-e1e24a940c82_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/88671231-6626-4e1b-abb7-6e361a171fbb_105.json b/packages/security_detection_engine/kibana/security_rule/88671231-6626-4e1b-abb7-6e361a171fbb_105.json new file mode 100644 index 00000000000..abcba6f1078 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/88671231-6626-4e1b-abb7-6e361a171fbb_105.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "In Azure Active Directory (Azure AD), permissions to manage resources are assigned using roles. The Global Administrator is a role that enables users to have access to all administrative features in Azure AD and services that use Azure AD identities like the Microsoft 365 Defender portal, the Microsoft 365 compliance center, Exchange, SharePoint Online, and Skype for Business Online. Attackers can add users as Global Administrators to maintain access and manage all subscriptions and their settings and resources.", + "from": "now-25m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Global Administrator Role Assigned", + "note": "", + "query": "event.dataset:o365.audit and event.code:\"AzureActiveDirectory\" and event.action:\"Add member to role.\" and\no365.audit.ModifiedProperties.Role_DisplayName.NewValue:\"Global Administrator\"\n", + "references": [ + "https://docs.microsoft.com/en-us/azure/active-directory/roles/permissions-reference#global-administrator" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.ModifiedProperties.Role_DisplayName.NewValue", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "88671231-6626-4e1b-abb7-6e361a171fbb", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/", + "subtechnique": [ + { + "id": "T1098.003", + "name": "Additional Cloud Roles", + "reference": "https://attack.mitre.org/techniques/T1098/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "88671231-6626-4e1b-abb7-6e361a171fbb_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/88817a33-60d3-411f-ba79-7c905d865b2a_107.json b/packages/security_detection_engine/kibana/security_rule/88817a33-60d3-411f-ba79-7c905d865b2a_107.json new file mode 100644 index 00000000000..193d18c4820 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/88817a33-60d3-411f-ba79-7c905d865b2a_107.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may create or modify the Sublime application plugins or scripts to execute a malicious payload each time the Sublime application is started.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Sublime Plugin or Application Script Modification", + "query": "file where host.os.type == \"macos\" and event.type in (\"change\", \"creation\") and file.extension : \"py\" and\n file.path :\n (\n \"/Users/*/Library/Application Support/Sublime Text*/Packages/*.py\",\n \"/Applications/Sublime Text.app/Contents/MacOS/sublime.py\"\n ) and\n not process.executable :\n (\n \"/Applications/Sublime Text*.app/Contents/*\",\n \"/usr/local/Cellar/git/*/bin/git\",\n \"/Library/Developer/CommandLineTools/usr/bin/git\",\n \"/usr/libexec/xpcproxy\",\n \"/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/Resources/DesktopServicesHelper\"\n )\n", + "references": [ + "https://posts.specterops.io/persistent-jxa-66e1c3cd1cf5" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "88817a33-60d3-411f-ba79-7c905d865b2a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1554", + "name": "Compromise Client Software Binary", + "reference": "https://attack.mitre.org/techniques/T1554/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "88817a33-60d3-411f-ba79-7c905d865b2a_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/88fdcb8c-60e5-46ee-9206-2663adf1b1ce_105.json b/packages/security_detection_engine/kibana/security_rule/88fdcb8c-60e5-46ee-9206-2663adf1b1ce_105.json new file mode 100644 index 00000000000..467d70894cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/88fdcb8c-60e5-46ee-9206-2663adf1b1ce_105.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a sudo binary located at /usr/bin/sudo. Attackers may hijack the default sudo binary and replace it with a custom binary or script that can read the user's password in clear text to escalate privileges or enable persistence onto the system every time the sudo binary is executed.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Sudo Hijacking Detected", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:file and event.type:(\"creation\" or \"file_create_event\") and\nfile.path:(\"/usr/bin/sudo\" or \"/bin/sudo\") and not process.name:(docker or dockerd or pacman)\n", + "references": [ + "https://eapolsniper.github.io/2020/08/17/Sudo-Hijacking/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "88fdcb8c-60e5-46ee-9206-2663adf1b1ce", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.003", + "name": "Sudo and Sudo Caching", + "reference": "https://attack.mitre.org/techniques/T1548/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 105 + }, + "id": "88fdcb8c-60e5-46ee-9206-2663adf1b1ce_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/891cb88e-441a-4c3e-be2d-120d99fe7b0d_107.json b/packages/security_detection_engine/kibana/security_rule/891cb88e-441a-4c3e-be2d-120d99fe7b0d_107.json new file mode 100644 index 00000000000..674e0027760 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/891cb88e-441a-4c3e-be2d-120d99fe7b0d_107.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious image load (wmiutils.dll) from Microsoft Office processes. This behavior may indicate adversarial activity where child processes are spawned via Windows Management Instrumentation (WMI). This technique can be used to execute code and evade traditional parent/child processes spawned from Microsoft Office products.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious WMI Image Load from MS Office", + "query": "any where host.os.type == \"windows\" and\n (event.category : (\"library\", \"driver\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n process.name : (\"WINWORD.EXE\", \"EXCEL.EXE\", \"POWERPNT.EXE\", \"MSPUB.EXE\", \"MSACCESS.EXE\") and\n (?dll.name : \"wmiutils.dll\" or file.name : \"wmiutils.dll\")\n", + "references": [ + "https://medium.com/threatpunter/detecting-adversary-tradecraft-with-image-load-event-logging-and-eql-8de93338c16" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "891cb88e-441a-4c3e-be2d-120d99fe7b0d", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "891cb88e-441a-4c3e-be2d-120d99fe7b0d_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/897dc6b5-b39f-432a-8d75-d3730d50c782_109.json b/packages/security_detection_engine/kibana/security_rule/897dc6b5-b39f-432a-8d75-d3730d50c782_109.json new file mode 100644 index 00000000000..804c72d3638 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/897dc6b5-b39f-432a-8d75-d3730d50c782_109.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies network connections to the standard Kerberos port from an unusual process. On Windows, the only process that normally performs Kerberos traffic from a domain joined host is lsass.exe.", + "false_positives": [ + "HTTP traffic on a non standard port. Verify that the destination IP address is not related to a Domain Controller." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Kerberos Traffic from Unusual Process", + "note": "## Triage and analysis\n\n### Investigating Kerberos Traffic from Unusual Process\n\nKerberos is the default authentication protocol in Active Directory, designed to provide strong authentication for client/server applications by using secret-key cryptography.\n\nDomain-joined hosts usually perform Kerberos traffic using the `lsass.exe` process. This rule detects the occurrence of traffic on the Kerberos port (88) by processes other than `lsass.exe` to detect the unusual request and usage of Kerberos tickets.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check if the Destination IP is related to a Domain Controller.\n- Review event ID 4769 for suspicious ticket requests.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This rule uses a Kerberos-related port but does not identify the protocol used on that port. HTTP traffic on a non-standard port or destination IP address unrelated to Domain controllers can create false positives.\n- Exceptions can be added for noisy/frequent connections.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n - Ticket requests can be used to investigate potentially compromised accounts.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "network where host.os.type == \"windows\" and event.type == \"start\" and network.direction == \"egress\" and\n destination.port == 88 and source.port >= 49152 and process.pid != 4 and destination.address : \"*\" and\n not \n (\n process.executable : (\n \"\\\\device\\\\harddiskvolume?\\\\program files (x86)\\\\nmap\\\\nmap.exe\",\n \"\\\\device\\\\harddiskvolume?\\\\program files (x86)\\\\nmap oem\\\\nmap.exe\",\n \"\\\\device\\\\harddiskvolume?\\\\windows\\\\system32\\\\lsass.exe\",\n \"?:\\\\Program Files\\\\Amazon Corretto\\\\jdk1*\\\\bin\\\\java.exe\",\n \"?:\\\\Program Files\\\\BlackBerry\\\\UEM\\\\Proxy Server\\\\bin\\\\prunsrv.exe\",\n \"?:\\\\Program Files\\\\BlackBerry\\\\UEM\\\\Core\\\\tomcat-core\\\\bin\\\\tomcat9.exe\",\n \"?:\\\\Program Files\\\\DBeaver\\\\dbeaver.exe\",\n \"?:\\\\Program Files\\\\Docker\\\\Docker\\\\resources\\\\com.docker.backend.exe\",\n \"?:\\\\Program Files\\\\Docker\\\\Docker\\\\resources\\\\com.docker.vpnkit.exe\",\n \"?:\\\\Program Files\\\\Docker\\\\Docker\\\\resources\\\\vpnkit.exe\",\n \"?:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n \"?:\\\\Program Files\\\\Internet Explorer\\\\iexplore.exe\",\n \"?:\\\\Program Files\\\\JetBrains\\\\PyCharm Community Edition*\\\\bin\\\\pycharm64.exe\",\n \"?:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe\",\n \"?:\\\\Program Files\\\\Oracle\\\\VirtualBox\\\\VirtualBoxVM.exe\",\n \"?:\\\\Program Files\\\\Puppet Labs\\\\Puppet\\\\puppet\\\\bin\\\\ruby.exe\",\n \"?:\\\\Program Files\\\\rapid7\\\\nexpose\\\\nse\\\\.DLLCACHE\\\\nseserv.exe\",\n \"?:\\\\Program Files\\\\Silverfort\\\\Silverfort AD Adapter\\\\SilverfortServer.exe\",\n \"?:\\\\Program Files\\\\Tenable\\\\Nessus\\\\nessusd.exe\",\n \"?:\\\\Program Files\\\\VMware\\\\VMware View\\\\Server\\\\bin\\\\ws_TomcatService.exe\",\n \"?:\\\\Program Files (x86)\\\\Advanced Port Scanner\\\\advanced_port_scanner.exe\",\n \"?:\\\\Program Files (x86)\\\\DesktopCentral_Agent\\\\bin\\\\dcpatchscan.exe\",\n \"?:\\\\Program Files (x86)\\\\GFI\\\\LanGuard 12 Agent\\\\lnsscomm.exe\",\n \"?:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n \"?:\\\\Program Files (x86)\\\\Internet Explorer\\\\iexplore.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft\\\\Edge\\\\Application\\\\msedge.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft\\\\EdgeUpdate\\\\MicrosoftEdgeUpdate.exe\",\n \"?:\\\\Program Files (x86)\\\\Microsoft Silverlight\\\\sllauncher.exe\",\n \"?:\\\\Program Files (x86)\\\\Nmap\\\\nmap.exe\",\n \"?:\\\\Program Files (x86)\\\\Nmap OEM\\\\nmap.exe\",\n \"?:\\\\Program Files (x86)\\\\nwps\\\\NetScanTools Pro\\\\NSTPRO.exe\",\n \"?:\\\\Program Files (x86)\\\\SAP BusinessObjects\\\\tomcat\\\\bin\\\\tomcat9.exe\",\n \"?:\\\\Program Files (x86)\\\\SuperScan\\\\scanner.exe\",\n \"?:\\\\Program Files (x86)\\\\Zscaler\\\\ZSATunnel\\\\ZSATunnel.exe\",\n \"?:\\\\Windows\\\\System32\\\\lsass.exe\",\n \"?:\\\\Windows\\\\System32\\\\MicrosoftEdgeCP.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\vmnat.exe\",\n \"?:\\\\Windows\\\\SystemApps\\\\Microsoft.MicrosoftEdge_*\\\\MicrosoftEdge.exe\",\n \"System\"\n ) and process.code_signature.trusted == true\n ) and\n destination.address != \"127.0.0.1\" and destination.address != \"::1\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.address", + "type": "keyword" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "897dc6b5-b39f-432a-8d75-d3730d50c782", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "897dc6b5-b39f-432a-8d75-d3730d50c782_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/89f9a4b0-9f8f-4ee0-8823-c4751a6d6696_107.json b/packages/security_detection_engine/kibana/security_rule/89f9a4b0-9f8f-4ee0-8823-c4751a6d6696_107.json new file mode 100644 index 00000000000..95685b24c53 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/89f9a4b0-9f8f-4ee0-8823-c4751a6d6696_107.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies cmd.exe making a network connection. Adversaries could abuse cmd.exe to download or execute malware from a remote URL.", + "false_positives": [ + "Administrators may use the command prompt for regular administrative tasks. It's important to baseline your environment for network connections being made from the command prompt to determine any abnormal use of this tool." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Command Prompt Network Connection", + "note": "## Triage and analysis\n\n### Investigating Command Prompt Network Connection\n\nAttackers commonly transfer tooling or malware from external systems into a compromised environment using a command and control channel. However, they can also abuse signed utilities to drop these files.\n\nThis rule looks for a network connection to an external address from the `cmd.exe` utility, which can indicate the abuse of the utility to download malicious files and tools.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n - Investigate the file digital signature and process original filename, if suspicious, treat it as potential malware.\n- Investigate the target host that the signed binary is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Examine if any file was downloaded and check if it is an executable or script.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the downloaded file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of destination IP address and file name conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and process.name : \"cmd.exe\" and event.type == \"start\"]\n [network where host.os.type == \"windows\" and process.name : \"cmd.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\",\n \"192.0.0.171/32\", \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\",\n \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\", \"192.175.48.0/24\",\n \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\") and\n not dns.question.name : (\n \"wpad\", \"localhost\", \"ocsp.comodoca.com\", \"ocsp.digicert.com\", \"ocsp.sectigo.com\", \"crl.comodoca.com\"\n )]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "89f9a4b0-9f8f-4ee0-8823-c4751a6d6696", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "89f9a4b0-9f8f-4ee0-8823-c4751a6d6696_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/89fa6cb7-6b53-4de2-b604-648488841ab8_106.json b/packages/security_detection_engine/kibana/security_rule/89fa6cb7-6b53-4de2-b604-648488841ab8_106.json new file mode 100644 index 00000000000..1160d651838 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/89fa6cb7-6b53-4de2-b604-648488841ab8_106.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of a DirectoryService PlugIns (dsplug) file. The DirectoryService daemon launches on each system boot and automatically reloads after crash. It scans and executes bundles that are located in the DirectoryServices PlugIns folder and can be abused by adversaries to maintain persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Persistence via DirectoryService Plugin Modification", + "query": "event.category:file and host.os.type:macos and not event.type:deletion and\n file.path:/Library/DirectoryServices/PlugIns/*.dsplug\n", + "references": [ + "https://blog.chichou.me/2019/11/21/two-macos-persistence-tricks-abusing-plugins/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "89fa6cb7-6b53-4de2-b604-648488841ab8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "89fa6cb7-6b53-4de2-b604-648488841ab8_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8a024633-c444-45c0-a4fe-78128d8c1ab6_5.json b/packages/security_detection_engine/kibana/security_rule/8a024633-c444-45c0-a4fe-78128d8c1ab6_5.json new file mode 100644 index 00000000000..f2205118396 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8a024633-c444-45c0-a4fe-78128d8c1ab6_5.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a symbolic link to a suspicious file or location. A symbolic link is a reference to a file or directory that acts as a pointer or shortcut, allowing users to access the target file or directory from a different location in the file system. An attacker can potentially leverage symbolic links for privilege escalation by tricking a privileged process into following the symbolic link to a sensitive file, giving the attacker access to data or capabilities they would not normally have.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Symbolic Link Created", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name == \"ln\" and process.args in (\"-s\", \"-sf\") and \n (\n /* suspicious files */\n (process.args in (\"/etc/shadow\", \"/etc/shadow-\", \"/etc/shadow~\", \"/etc/gshadow\", \"/etc/gshadow-\") or \n (process.working_directory == \"/etc\" and process.args in (\"shadow\", \"shadow-\", \"shadow~\", \"gshadow\", \"gshadow-\"))) or \n \n /* suspicious bins */\n (process.args in (\"/bin/bash\", \"/bin/dash\", \"/bin/sh\", \"/bin/tcsh\", \"/bin/csh\", \"/bin/zsh\", \"/bin/ksh\", \"/bin/fish\") or \n (process.working_directory == \"/bin\" and process.args : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\"))) or \n (process.args in (\"/usr/bin/bash\", \"/usr/bin/dash\", \"/usr/bin/sh\", \"/usr/bin/tcsh\", \"/usr/bin/csh\", \"/usr/bin/zsh\", \"/usr/bin/ksh\", \"/usr/bin/fish\") or \n (process.working_directory == \"/usr/bin\" and process.args in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\"))) or\n \n /* suspicious locations */\n (process.args : (\"/etc/cron.d/*\", \"/etc/cron.daily/*\", \"/etc/cron.hourly/*\", \"/etc/cron.weekly/*\", \"/etc/cron.monthly/*\")) or\n (process.args : (\"/home/*/.ssh/*\", \"/root/.ssh/*\",\"/etc/sudoers.d/*\", \"/dev/shm/*\"))\n ) and \n process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and \n not user.Ext.real.id == \"0\" and not group.Ext.real.id == \"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "8a024633-c444-45c0-a4fe-78128d8c1ab6", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.008", + "name": "/etc/passwd and /etc/shadow", + "reference": "https://attack.mitre.org/techniques/T1003/008/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "8a024633-c444-45c0-a4fe-78128d8c1ab6_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8a0fbd26-867f-11ee-947c-f661ea17fbcd_3.json b/packages/security_detection_engine/kibana/security_rule/8a0fbd26-867f-11ee-947c-f661ea17fbcd_3.json new file mode 100644 index 00000000000..70895a3a31f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8a0fbd26-867f-11ee-947c-f661ea17fbcd_3.json @@ -0,0 +1,82 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects when an attacker abuses the Multi-Factor authentication mechanism by repeatedly issuing login requests until the user eventually accepts the Okta push notification. An adversary may attempt to bypass the Okta MFA policies configured for an organization to obtain unauthorized access.", + "event_category_override": "event.category", + "index": [ + "filebeat-*", + "logs-okta*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Okta MFA Bombing via Push Notifications", + "note": "## Triage and analysis\n\n### Investigating Potential Okta MFA Bombing via Push Notifications\n\nMulti-Factor Authentication (MFA) is an effective method to prevent unauthorized access. However, some adversaries may abuse the system by repeatedly sending MFA push notifications until the user unwittingly approves the access.\n\nThis rule detects when a user denies MFA Okta Verify push notifications twice, followed by a successful authentication event within a 10-minute window. This sequence could indicate an adversary's attempt to bypass the Okta MFA policy.\n\n#### Possible investigation steps:\n\n- Identify the user who received the MFA notifications by reviewing the `user.email` field.\n- Identify the time, source IP, and geographical location of the MFA requests and the subsequent successful login.\n- Review the `event.action` field to understand the nature of the events. It should include two `user.mfa.okta_verify.deny_push` actions and one `user.authentication.sso` action.\n- Ask the user if they remember receiving the MFA notifications and subsequently logging into their account.\n- Check if the MFA requests and the successful login occurred during the user's regular activity hours.\n- Look for any other suspicious activity on the account around the same time.\n- Identify whether the same pattern is repeated for other users in your organization. Multiple users receiving push notifications simultaneously might indicate a larger attack.\n\n### False positive analysis:\n\n- Determine if the MFA push notifications were legitimate. Sometimes, users accidentally trigger MFA requests or deny them unintentionally and later approve them.\n- Check if there are known issues with the MFA system causing false denials.\n\n### Response and remediation:\n\n- If unauthorized access is confirmed, initiate your incident response process.\n- Alert the user and your IT department immediately.\n- If possible, isolate the user's account until the issue is resolved.\n- Investigate the source of the unauthorized access.\n- If the account was accessed by an unauthorized party, determine the actions they took after logging in.\n- Consider enhancing your MFA policy to prevent such incidents in the future.\n- Encourage users to report any unexpected MFA notifications immediately.\n- Review and update your incident response plans and security policies based on the findings from the incident.\n", + "query": "sequence by okta.actor.id with maxspan=10m\n [authentication where event.dataset == \"okta.system\"\n and okta.event_type == \"user.mfa.okta_verify.deny_push\"] with runs=5\n until [authentication where event.dataset == \"okta.system\"\n and (okta.event_type: (\n \"user.authentication.sso\",\n \"user.authentication.auth_via_mfa\",\n \"user.authentication.verify\",\n \"user.session.start\") and okta.outcome.result == \"SUCCESS\")]\n", + "references": [ + "https://www.mandiant.com/resources/russian-targeting-gov-business", + "https://www.elastic.co/security-labs/testing-okta-visibility-and-detection-dorothy", + "https://sec.okta.com/articles/2023/08/cross-tenant-impersonation-prevention-and-detection", + "https://www.rezonate.io/blog/okta-logs-decoded-unveiling-identity-threats-through-threat-hunting/" + ], + "related_integrations": [ + { + "package": "okta", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": false, + "name": "okta.actor.id", + "type": "keyword" + }, + { + "ecs": false, + "name": "okta.event_type", + "type": "keyword" + }, + { + "ecs": false, + "name": "okta.outcome.result", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "8a0fbd26-867f-11ee-947c-f661ea17fbcd", + "setup": "## Setup\n\nThe Okta Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.\n", + "severity": "high", + "tags": [ + "Use Case: Identity and Access Audit", + "Tactic: Credential Access", + "Data Source: Okta" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1621", + "name": "Multi-Factor Authentication Request Generation", + "reference": "https://attack.mitre.org/techniques/T1621/" + } + ] + } + ], + "type": "eql", + "version": 3 + }, + "id": "8a0fbd26-867f-11ee-947c-f661ea17fbcd_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8a1d4831-3ce6-4859-9891-28931fa6101d_107.json b/packages/security_detection_engine/kibana/security_rule/8a1d4831-3ce6-4859-9891-28931fa6101d_107.json new file mode 100644 index 00000000000..9eb4e98da73 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8a1d4831-3ce6-4859-9891-28931fa6101d_107.json @@ -0,0 +1,143 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a script interpreter or signed binary is launched via a non-standard working directory. An attacker may use this technique to evade defenses.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Execution from a Mounted Device", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.executable : \"C:\\\\*\" and\n (process.working_directory : \"?:\\\\\" and not process.working_directory: \"C:\\\\\") and\n process.parent.name : \"explorer.exe\" and\n process.name : (\"rundll32.exe\", \"mshta.exe\", \"powershell.exe\", \"pwsh.exe\", \"cmd.exe\", \"regsvr32.exe\",\n \"cscript.exe\", \"wscript.exe\")\n", + "references": [ + "https://www.microsoft.com/security/blog/2021/05/27/new-sophisticated-email-based-attack-from-nobelium/", + "https://www.volexity.com/blog/2021/05/27/suspected-apt29-operation-launches-election-fraud-themed-phishing-campaigns/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "8a1d4831-3ce6-4859-9891-28931fa6101d", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.005", + "name": "Mshta", + "reference": "https://attack.mitre.org/techniques/T1218/005/" + }, + { + "id": "T1218.010", + "name": "Regsvr32", + "reference": "https://attack.mitre.org/techniques/T1218/010/" + }, + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "8a1d4831-3ce6-4859-9891-28931fa6101d_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8acb7614-1d92-4359-bfcf-478b6d9de150_208.json b/packages/security_detection_engine/kibana/security_rule/8acb7614-1d92-4359-bfcf-478b6d9de150_208.json new file mode 100644 index 00000000000..8217ebbba7a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8acb7614-1d92-4359-bfcf-478b6d9de150_208.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious child processes of the Java interpreter process. This may indicate an attempt to execute a malicious JAR file or an exploitation attempt via a JAVA specific vulnerability.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious JAVA Child Process", + "new_terms_fields": [ + "host.id", + "process.command_line" + ], + "note": "## Triage and analysis\n\n### Investigating Suspicious Java Child Process\n\nThis rule identifies a suspicious child process of the Java interpreter process. It may indicate an attempt to execute a malicious JAR file or an exploitation attempt via a Java specific vulnerability.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, file modifications, and any spawned child processes.\n- Examine the command line to determine if the command executed is potentially harmful or malicious.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of process and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and event.type:(\"start\" or \"process_started\") and process.parent.name:\"java\" and process.name:(\n bash or dash or sh or tcsh or csh or zsh or ksh or fish or python* or php* or perl or ruby or lua* or openssl or\n nc or netcat or ncat or telnet or awk or socat or wget or curl\n) and process.args :(\n whoami or id or uname or cat or hostname or ip or curl or wget or pwd or ls or cd or python* or php* or perl or\n ruby or lua* or openssl or nc or netcat or ncat or telnet or awk or socat\n)\n", + "references": [ + "https://www.lunasec.io/docs/blog/log4j-zero-day/", + "https://github.com/christophetd/log4shell-vulnerable-app", + "https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf", + "https://www.elastic.co/security-labs/detecting-log4j2-with-elastic-security", + "https://www.elastic.co/security-labs/analysis-of-log4shell-cve-2021-45046" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "8acb7614-1d92-4359-bfcf-478b6d9de150", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.007", + "name": "JavaScript", + "reference": "https://attack.mitre.org/techniques/T1059/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 208 + }, + "id": "8acb7614-1d92-4359-bfcf-478b6d9de150_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8af5b42f-8d74-48c8-a8d0-6d14b4197288_4.json b/packages/security_detection_engine/kibana/security_rule/8af5b42f-8d74-48c8-a8d0-6d14b4197288_4.json new file mode 100644 index 00000000000..64b7e2bcf08 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8af5b42f-8d74-48c8-a8d0-6d14b4197288_4.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of a suspicious sudo command that is leveraged in CVE-2019-14287 to escalate privileges to root. Sudo does not verify the presence of the designated user ID and proceeds to execute using a user ID that can be chosen arbitrarily. By using the sudo privileges, the command \"sudo -u#-1\" translates to an ID of 0, representing the root user. This exploit may work for sudo versions prior to v1.28.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Sudo Privilege Escalation via CVE-2019-14287", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"sudo\" and process.args == \"-u#-1\"\n", + "references": [ + "https://www.exploit-db.com/exploits/47502" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "8af5b42f-8d74-48c8-a8d0-6d14b4197288", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend", + "Use Case: Vulnerability", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "8af5b42f-8d74-48c8-a8d0-6d14b4197288_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8b2b3a62-a598-4293-bc14-3d5fa22bb98f_107.json b/packages/security_detection_engine/kibana/security_rule/8b2b3a62-a598-4293-bc14-3d5fa22bb98f_107.json new file mode 100644 index 00000000000..0df94945915 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8b2b3a62-a598-4293-bc14-3d5fa22bb98f_107.json @@ -0,0 +1,125 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Masquerading can allow an adversary to evade defenses and better blend in with the environment. One way it occurs is when the name or location of a file is manipulated as a means of tricking a user into executing what they think is a benign file type but is actually executable code.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Executable File Creation with Multiple Extensions", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and file.extension : \"exe\" and\n file.name regex~ \"\"\".*\\.(vbs|vbe|bat|js|cmd|wsh|ps1|pdf|docx?|xlsx?|pptx?|txt|rtf|gif|jpg|png|bmp|hta|txt|img|iso)\\.exe\"\"\" and\n not (process.executable : (\"?:\\\\Windows\\\\System32\\\\msiexec.exe\", \"C:\\\\Users\\\\*\\\\QGIS_SCCM\\\\Files\\\\QGIS-OSGeo4W-*-Setup-x86_64.exe\") and\n file.path : \"?:\\\\Program Files\\\\QGIS *\\\\apps\\\\grass\\\\*.exe\") and\n not process.executable : (\"/bin/sh\", \"/usr/sbin/MailScanner\", \"/usr/bin/perl\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "8b2b3a62-a598-4293-bc14-3d5fa22bb98f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.007", + "name": "Double File Extension", + "reference": "https://attack.mitre.org/techniques/T1036/007/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1204", + "name": "User Execution", + "reference": "https://attack.mitre.org/techniques/T1204/", + "subtechnique": [ + { + "id": "T1204.002", + "name": "Malicious File", + "reference": "https://attack.mitre.org/techniques/T1204/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "8b2b3a62-a598-4293-bc14-3d5fa22bb98f_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8b4f0816-6a65-4630-86a6-c21c179c0d09_108.json b/packages/security_detection_engine/kibana/security_rule/8b4f0816-6a65-4630-86a6-c21c179c0d09_108.json new file mode 100644 index 00000000000..742c2d294d8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8b4f0816-6a65-4630-86a6-c21c179c0d09_108.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the netsh.exe program to enable host discovery via the network. Attackers can use this command-line tool to weaken the host firewall settings.", + "false_positives": [ + "Host Windows Firewall planned system administration changes." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Enable Host Network Discovery via Netsh", + "note": "## Triage and analysis\n\n### Investigating Enable Host Network Discovery via Netsh\n\nThe Windows Defender Firewall is a native component that provides host-based, two-way network traffic filtering for a device and blocks unauthorized network traffic flowing into or out of the local device.\n\nAttackers can enable Network Discovery on the Windows firewall to find other systems present in the same network. Systems with this setting enabled will communicate with other systems using broadcast messages, which can be used to identify targets for lateral movement. This rule looks for the setup of this setting using the netsh utility.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the Administrator is aware of the activity and there are justifications for this configuration.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Disable Network Discovery:\n - Using netsh: `netsh advfirewall firewall set rule group=\"Network Discovery\" new enable=No`\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\nprocess.name : \"netsh.exe\" and\nprocess.args : (\"firewall\", \"advfirewall\") and process.args : \"group=Network Discovery\" and process.args : \"enable=Yes\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "8b4f0816-6a65-4630-86a6-c21c179c0d09", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.004", + "name": "Disable or Modify System Firewall", + "reference": "https://attack.mitre.org/techniques/T1562/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "8b4f0816-6a65-4630-86a6-c21c179c0d09_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45_109.json b/packages/security_detection_engine/kibana/security_rule/8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45_109.json new file mode 100644 index 00000000000..f414665f840 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45_109.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an unexpected process spawning from dns.exe, the process responsible for Windows DNS server services, which may indicate activity related to remote code execution or other forms of exploitation.", + "false_positives": [ + "Werfault.exe will legitimately spawn when dns.exe crashes, but the DNS service is very stable and so this is a low occurring event. Denial of Service (DoS) attempts by intentionally crashing the service will also cause werfault.exe to spawn." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Child Process of dns.exe", + "note": "## Triage and analysis\n\n### Investigating Unusual Child Process of dns.exe\n\nSIGRed (CVE-2020-1350) is a wormable, critical vulnerability in the Windows DNS server that affects Windows Server versions 2003 to 2019 and can be triggered by a malicious DNS response. Because the service is running in elevated privileges (SYSTEM), an attacker that successfully exploits it is granted Domain Administrator rights. This can effectively compromise the entire corporate infrastructure.\n\nThis rule looks for unusual children of the `dns.exe` process, which can indicate the exploitation of the SIGRed or a similar remote code execution vulnerability in the DNS server.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes.\n - Any suspicious or abnormal child process spawned from dns.exe should be carefully reviewed and investigated. It's impossible to predict what an adversary may deploy as the follow-on process after the exploit, but built-in discovery/enumeration utilities should be top of mind (`whoami.exe`, `netstat.exe`, `systeminfo.exe`, `tasklist.exe`).\n - Built-in Windows programs that contain capabilities used to download and execute additional payloads should also be considered. This is not an exhaustive list, but ideal candidates to start out would be: `mshta.exe`, `powershell.exe`, `regsvr32.exe`, `rundll32.exe`, `wscript.exe`, `wmic.exe`.\n - If a denial-of-service (DoS) exploit is successful and DNS Server service crashes, be mindful of potential child processes related to `werfault.exe` occurring.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the host during the past 48 hours.\n- Check whether the server is vulnerable to CVE-2020-1350.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system or restore the compromised server to a clean state.\n- Install the latest patches on systems that run Microsoft DNS Server.\n- Consider the implementation of a patch management system, such as the Windows Server Update Services (WSUS).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"dns.exe\" and\n not process.name : \"conhost.exe\"\n", + "references": [ + "https://research.checkpoint.com/2020/resolving-your-way-into-domain-admin-exploiting-a-17-year-old-bug-in-windows-dns-servers/", + "https://msrc-blog.microsoft.com/2020/07/14/july-2020-security-update-cve-2020-1350-vulnerability-in-windows-domain-name-system-dns-server/", + "https://github.com/maxpl0it/CVE-2020-1350-DoS", + "https://www.elastic.co/security-labs/detection-rules-for-sigred-vulnerability" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "8c37dc0e-e3ac-4c97-8aa0-cf6a9122de45_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8cb84371-d053-4f4f-bce0-c74990e28f28_10.json b/packages/security_detection_engine/kibana/security_rule/8cb84371-d053-4f4f-bce0-c74990e28f28_10.json new file mode 100644 index 00000000000..3299a128c46 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8cb84371-d053-4f4f-bce0-c74990e28f28_10.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple SSH login failures followed by a successful one from the same source address. Adversaries can attempt to login into multiple users with a common or known password to gain access to accounts.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-system.auth-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Successful SSH Brute Force Attack", + "note": "## Triage and analysis\n\n### Investigating Potential Successful SSH Brute Force Attack\n\nThe rule identifies consecutive SSH login failures followed by a successful login from the same source IP address to the same target host indicating a successful attempt of brute force password guessing.\n\n#### Possible investigation steps\n\n- Investigate the login failure user name(s).\n- Investigate the source IP address of the failed ssh login attempt(s).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n\n### False positive analysis\n\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Infrastructure or availability issue.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Ensure active session(s) on the host(s) are terminated as the attacker could have gained initial access to the system(s).\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, source.ip, user.name with maxspan=15s\n [authentication where host.os.type == \"linux\" and event.action in (\"ssh_login\", \"user_login\") and\n event.outcome == \"failure\" and source.ip != null and source.ip != \"0.0.0.0\" and source.ip != \"::\" ] with runs=10\n\n [authentication where host.os.type == \"linux\" and event.action in (\"ssh_login\", \"user_login\") and\n event.outcome == \"success\" and source.ip != null and source.ip != \"0.0.0.0\" and source.ip != \"::\" ]\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "8cb84371-d053-4f4f-bce0-c74990e28f28", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Auditbeat\n- Filebeat\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the \u201cFilebeat System Module\u201d to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 10 + }, + "id": "8cb84371-d053-4f4f-bce0-c74990e28f28_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108.json b/packages/security_detection_engine/kibana/security_rule/8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108.json new file mode 100644 index 00000000000..947af9c0346 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an attempt to exploit a local privilege escalation in polkit pkexec (CVE-2021-4034) via unsecure environment variable injection. Successful exploitation allows an unprivileged user to escalate to the root user.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via PKEXEC", + "query": "file where host.os.type == \"linux\" and file.path : \"/*GCONV_PATH*\"\n", + "references": [ + "https://seclists.org/oss-sec/2022/q1/80", + "https://haxx.in/files/blasty-vs-pkexec.c" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.007", + "name": "Path Interception by PATH Environment Variable", + "reference": "https://attack.mitre.org/techniques/T1574/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "8da41fc9-7735-4b24-9cc6-c78dfc9fc9c9_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/8f919d4b-a5af-47ca-a594-6be59cd924a4_106.json b/packages/security_detection_engine/kibana/security_rule/8f919d4b-a5af-47ca-a594-6be59cd924a4_106.json new file mode 100644 index 00000000000..16032ba4924 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/8f919d4b-a5af-47ca-a594-6be59cd924a4_106.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of Distributed Component Object Model (DCOM) to run commands from a remote host, which are launched via the ShellBrowserWindow or ShellWindows Application COM Object. This behavior may indicate an attacker abusing a DCOM application to stealthily move laterally.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Incoming DCOM Lateral Movement with ShellBrowserWindow or ShellWindows", + "query": "sequence by host.id with maxspan=5s\n [network where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"explorer.exe\" and\n network.direction : (\"incoming\", \"ingress\") and network.transport == \"tcp\" and\n source.port > 49151 and destination.port > 49151 and source.ip != \"127.0.0.1\" and source.ip != \"::1\"\n ] by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"explorer.exe\"\n ] by process.parent.entity_id\n", + "references": [ + "https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "8f919d4b-a5af-47ca-a594-6be59cd924a4", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.003", + "name": "Distributed Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1021/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "8f919d4b-a5af-47ca-a594-6be59cd924a4_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/90169566-2260-4824-b8e4-8615c3b4ed52_108.json b/packages/security_detection_engine/kibana/security_rule/90169566-2260-4824-b8e4-8615c3b4ed52_108.json new file mode 100644 index 00000000000..1bfc857d378 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/90169566-2260-4824-b8e4-8615c3b4ed52_108.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Hping ran on a Linux host. Hping is a FOSS command-line packet analyzer and has the ability to construct network packets for a wide variety of network security testing applications, including scanning and firewall auditing.", + "false_positives": [ + "Normal use of hping is uncommon apart from security testing and research. Use by non-security engineers is very uncommon." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Hping Process Activity", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\"hping\", \"hping2\", \"hping3\")\n", + "references": [ + "https://en.wikipedia.org/wiki/Hping" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "90169566-2260-4824-b8e4-8615c3b4ed52", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "90169566-2260-4824-b8e4-8615c3b4ed52_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9092cd6c-650f-4fa3-8a8a-28256c7489c9_107.json b/packages/security_detection_engine/kibana/security_rule/9092cd6c-650f-4fa3-8a8a-28256c7489c9_107.json new file mode 100644 index 00000000000..5898e3bb6ec --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9092cd6c-650f-4fa3-8a8a-28256c7489c9_107.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may collect keychain storage data from a system to in order to acquire credentials. Keychains are the built-in way for macOS to keep track of users' passwords and credentials for many services and features, including Wi-Fi and website passwords, secure notes, certificates, and Kerberos.", + "false_positives": [ + "Applications for password management." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Keychain Password Retrieval via Command Line", + "query": "process where host.os.type == \"macos\" and event.type == \"start\" and\n process.name : \"security\" and process.args : \"-wa\" and process.args : (\"find-generic-password\", \"find-internet-password\") and\n process.args : (\"Chrome*\", \"Chromium\", \"Opera\", \"Safari*\", \"Brave\", \"Microsoft Edge\", \"Edge\", \"Firefox*\") and\n not process.parent.executable : \"/Applications/Keeper Password Manager.app/Contents/Frameworks/Keeper Password Manager Helper*/Contents/MacOS/Keeper Password Manager Helper*\"\n", + "references": [ + "https://www.netmeister.org/blog/keychain-passwords.html", + "https://github.com/priyankchheda/chrome_password_grabber/blob/master/chrome.py", + "https://ss64.com/osx/security.html", + "https://www.intezer.com/blog/research/operation-electrorat-attacker-creates-fake-companies-to-drain-your-crypto-wallets/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "9092cd6c-650f-4fa3-8a8a-28256c7489c9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.001", + "name": "Keychain", + "reference": "https://attack.mitre.org/techniques/T1555/001/" + } + ] + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.003", + "name": "Credentials from Web Browsers", + "reference": "https://attack.mitre.org/techniques/T1555/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "9092cd6c-650f-4fa3-8a8a-28256c7489c9_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/92984446-aefb-4d5e-ad12-598042ca80ba_8.json b/packages/security_detection_engine/kibana/security_rule/92984446-aefb-4d5e-ad12-598042ca80ba_8.json new file mode 100644 index 00000000000..6183b33a715 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/92984446-aefb-4d5e-ad12-598042ca80ba_8.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that can get the contents of the clipboard, which attackers can abuse to retrieve sensitive information like credentials, messages, etc.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Suspicious Script with Clipboard Retrieval Capabilities", + "note": "## Triage and analysis\n\n### Investigating PowerShell Suspicious Script with Clipboard Retrieval Capabilities\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can abuse PowerShell capabilities to get the contents of the clipboard with the goal of stealing credentials and other valuable information, such as credit card data and confidential conversations.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Determine whether the script stores the captured data locally.\n- Investigate whether the script contains exfiltration capabilities and identify the exfiltration server.\n- Assess network data to determine if the host communicated with the exfiltration server.\n\n### False positive analysis\n\n- Regular users are unlikely to use scripting utilities to capture contents of the clipboard, making false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Related rules\n\n- PowerShell Keylogging Script - bd2c86a0-8b61-4457-ab38-96943984e889\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Prioritize the response if this alert involves key executives or potentially valuable targets for espionage.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n (powershell.file.script_block_text : (\n \"Windows.Clipboard\" or\n \"Windows.Forms.Clipboard\" or\n \"Windows.Forms.TextBox\"\n ) and\n powershell.file.script_block_text : (\n \"]::GetText\" or\n \".Paste()\"\n )) or powershell.file.script_block_text : \"Get-Clipboard\" and\n not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\" and \"PowerSploitIndicators\"\n ) and\n not user.id : \"S-1-5-18\" and\n not file.path : (\n ?\\:\\\\\\\\program?files\\\\\\\\powershell\\\\\\\\?\\\\\\\\Modules\\\\\\\\*.psd1 or\n ?\\:\\\\\\\\Windows\\\\\\\\system32\\\\\\\\WindowsPowerShell\\\\\\\\v1.0\\\\\\\\Modules\\\\\\\\*.psd1 or\n ?\\:\\\\\\\\WINDOWS\\\\\\\\system32\\\\\\\\WindowsPowerShell\\\\\\\\v1.0\\\\\\\\Modules\\\\\\\\*.psd1 or\n ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\Modules\\\\\\\\*.psd1 or\n ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\Modules\\\\\\\\*.psm1\n ) and \n not (\n file.path : ?\\:\\\\\\\\Program?Files\\\\\\\\WindowsPowerShell\\\\\\\\*Modules*.ps1 and\n file.name : (\"Convert-ExcelRangeToImage.ps1\" or \"Read-Clipboard.ps1\")\n )\n", + "references": [ + "https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-clipboard", + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/collection/Get-ClipboardContents.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "92984446-aefb-4d5e-ad12-598042ca80ba", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Data Source: PowerShell Logs", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1115", + "name": "Clipboard Data", + "reference": "https://attack.mitre.org/techniques/T1115/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 8 + }, + "id": "92984446-aefb-4d5e-ad12-598042ca80ba_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/92d3a04e-6487-4b62-892d-70e640a590dc_2.json b/packages/security_detection_engine/kibana/security_rule/92d3a04e-6487-4b62-892d-70e640a590dc_2.json new file mode 100644 index 00000000000..9dcd98af262 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/92d3a04e-6487-4b62-892d-70e640a590dc_2.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple Windows Filtering Platform block events and where the process name is related to an endpoint security software. Adversaries may add malicious WFP rules to prevent Endpoint security from sending telemetry.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.*", + "logs-system.security-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Evasion via Windows Filtering Platform", + "query": "sequence by winlog.computer_name with maxspan=1m\n [network where host.os.type == \"windows\" and \n event.action : (\"windows-firewall-packet-block\", \"windows-firewall-packet-drop\") and \n process.name : (\n \"bdagent.exe\", \"bdreinit.exe\", \"pdscan.exe\", \"pdiface.exe\", \"BDSubWiz.exe\", \"ProductAgentService.exe\",\n \"ProductAgentUI.exe\", \"WatchDog.exe\", \"CarbonBlackClientSetup.exe\", \"TrGUI.exe\", \"TracCAPI.exe\", \"cpmsi_tool.exe\",\n \"trac.exe\", \"vna_install64.exe\", \"vna_utils.exe\", \"TracSrvWrapper.exe\", \"vsmon.exe\", \"p95tray.exe\",\n \"CybereasonRansomFreeServiceHost.exe\", \"CrAmTray.exe\", \"minionhost.exe\", \"CybereasonSensor.exe\", \"CylanceUI.exe\",\n \"CylanceProtectSetup.exe\", \"cylancesvc.exe\", \"cyupdate.exe\", \"elastic-agent.exe\", \"elastic-endpoint.exe\",\n \"egui.exe\", \"minodlogin.exe\", \"emu-rep.exe\", \"emu_install.exe\", \"emu-cci.exe\", \"emu-gui.exe\", \"emu-uninstall.exe\",\n \"ndep.exe\", \"spike.exe\", \"ecls.exe\", \"ecmd.exe\", \"ecomserver.exe\", \"eeclnt.exe\", \"eh64.exe\", \"EHttpSrv.exe\",\n \"xagt.exe\", \"collectoragent.exe\", \"FSAEConfig.exe\", \"uninstalldcagent.exe\", \"rmon.exe\", \"fccomint.exe\",\n \"fclanguageselector.exe\", \"fortifw.exe\", \"fcreg.exe\", \"fortitray.exe\", \"fcappdb.exe\", \"fcwizard.exe\", \"submitv.exe\",\n \"av_task.exe\", \"fortiwf.exe\", \"fortiwadbd.exe\", \"fcauth.exe\", \"fcdblog.exe\", \"fcmgr.exe\", \"fortiwad.exe\",\n \"fortiproxy.exe\", \"fortiscand.exe\", \"fortivpnst.exe\", \"ipsec.exe\", \"fcwscd7.exe\", \"fcasc.exe\", \"fchelper.exe\",\n \"forticlient.exe\",\"fcwsc.exe\", \"FortiClient.exe\", \"fmon.exe\", \"FSSOMA.exe\", \"FCVbltScan.exe\", \"FortiESNAC.exe\",\n \"EPCUserAvatar.exe\", \"FortiAvatar.exe\", \"FortiClient_Diagnostic_Tool.exe\", \"FortiSSLVPNdaemon.exe\", \"avp.exe\",\n \"FCConfig.exe\", \"avpsus.exe\", \"klnagent.exe\", \"klnsacwsrv.exe\", \"kl_platf.exe\", \"stpass.exe\", \"klnagwds.exe\",\n \"mbae.exe\", \"mbae64.exe\", \"mbae-svc.exe\", \"mbae-uninstaller.exe\", \"mbaeLoader32.exe\", \"mbaeloader64.exe\",\n \"mbam-dor.exe\", \"mbamgui.exe\", \"mbamservice.exe\", \"mbamtrayctrl.exe\", \"mbampt.exe\", \"mbamscheduler.exe\",\n \"Coreinst.exe\", \"mbae-setup.exe\", \"mcupdate.exe\", \"ProtectedModuleHost.exe\", \"ESConfigTool.exe\", \"FWInstCheck.exe\",\n \"FwWindowsFirewallHandler.exe\", \"mfeesp.exe\", \"mfefw.exe\", \"mfeProvisionModeUtility.exe\", \"mfetp.exe\", \"avpui.exe\", \n \"WscAVExe.exe\", \"mcshield.exe\", \"McChHost.exe\", \"mfewc.exe\", \"mfewch.exe\", \"mfewcui.exe\", \"fwinfo.exe\",\n \"mfecanary.exe\", \"mfefire.exe\", \"mfehidin.exe\", \"mfemms.exe\", \"mfevtps.exe\", \"mmsinfo.exe\", \"vtpinfo.exe\",\n \"MarSetup.exe\", \"mctray.exe\", \"masvc.exe\", \"macmnsvc.exe\", \"McAPExe.exe\", \"McPvTray.exe\", \"mcods.exe\",\n \"mcuicnt.exe\", \"mcuihost.exe\", \"xtray.exe\", \"McpService.exe\", \"epefprtrainer.exe\", \"mfeffcoreservice.exe\",\n \"MfeEpeSvc.exe\", \"qualysagent.exe\", \"QualysProxy.exe\", \"QualysAgentUI.exe\", \"SVRTgui.exe\", \"SVRTcli.exe\",\n \"SVRTcli.exe\", \"SVRTgui.exe\", \"SCTCleanupService.exe\", \"SVRTservice.exe\", \"native.exe\", \"SCTBootTasks.exe\",\n \"ALMon.exe\", \"SAA.exe\", \"SUMService.exe\", \"ssp.exe\", \"SCFService.exe\", \"SCFManager.exe\", \"spa.exe\", \"cabarc.exe\",\n \"sargui.exe\", \"sntpservice.exe\", \"McsClient.exe\", \"McsAgent.exe\", \"McsHeartbeat.exe\", \"SAVAdminService.exe\",\n \"sav32cli.exe\", \"ForceUpdateAlongSideSGN.exe\", \"SAVCleanupService.exe\", \"SavMain.exe\", \"SavProgress.exe\", \n \"SavProxy.exe\", \"SavService.exe\", \"swc_service.exe\", \"swi_di.exe\", \"swi_service.exe\", \"swi_filter.exe\",\n \"ALUpdate.exe\", \"SophosUpdate.exe\", \"ALsvc.exe\", \"SophosAlert.exe\", \"osCheck.exe\", \"N360Downloader.exe\",\n \"InstWrap.exe\", \"symbos.exe\", \"nss.exe\", \"symcorpui.exe\", \"isPwdSvc.exe\", \"ccsvchst.exe\", \"ntrmv.exe\",\n \"pccntmon.exe\", \"AosUImanager.exe\", \"NTRTScan.exe\", \"TMAS_OL.exe\", \"TMAS_OLImp.exe\", \"TMAS_OLSentry.exe\",\n \"ufnavi.exe\", \"Clnrbin.exe\", \"vizorhtmldialog.exe\", \"pwmConsole.exe\", \"PwmSvc.exe\", \"coreServiceShell.exe\",\n \"ds_agent.exe\", \"SfCtlCom.exe\", \"MBAMHelper.exe\", \"cb.exe\", \"smc.exe\", \"tda.exe\", \"xagtnotif.exe\", \"ekrn.exe\",\n \"dsa.exe\", \"Notifier.exe\", \"rphcp.exe\", \"lc_sensor.exe\", \"CSFalconService.exe\", \"CSFalconController.exe\",\n \"SenseSampleUploader.exe\", \"windefend.exe\", \"MSASCui.exe\", \"MSASCuiL.exe\", \"msmpeng.exe\", \"msmpsvc.exe\",\n \"MsSense.exe\", \"esensor.exe\", \"sentinelone.exe\", \"tmccsf.exe\", \"csfalconcontainer.exe\", \"sensecncproxy.exe\",\n \"splunk.exe\", \"sysmon.exe\", \"sysmon64.exe\", \"taniumclient.exe\"\n )] with runs=5\n", + "references": [ + "https://github.com/dsnezhkov/shutter/tree/main", + "https://github.com/netero1010/EDRSilencer/tree/main", + "https://www.mdsec.co.uk/2023/09/nighthawk-0-2-6-three-wise-monkeys/", + "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-5157", + "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-5152" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "92d3a04e-6487-4b62-892d-70e640a590dc", + "setup": "## Setup\n\nThe 'Filtering Platform Connection' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nObject Access >\nFiltering Platform Connection (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.004", + "name": "Disable or Modify System Firewall", + "reference": "https://attack.mitre.org/techniques/T1562/004/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "92d3a04e-6487-4b62-892d-70e640a590dc_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/93b22c0a-06a0-4131-b830-b10d5e166ff4_109.json b/packages/security_detection_engine/kibana/security_rule/93b22c0a-06a0-4131-b830-b10d5e166ff4_109.json new file mode 100644 index 00000000000..f398a3cd1fd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/93b22c0a-06a0-4131-b830-b10d5e166ff4_109.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A suspicious SolarWinds child process was detected, which may indicate an attempt to execute malicious programs.", + "false_positives": [ + "Trusted SolarWinds child processes, verify process details such as network connections and file writes." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious SolarWinds Child Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name: (\"SolarWinds.BusinessLayerHost.exe\", \"SolarWinds.BusinessLayerHostx64.exe\") and\n not (\n process.name : (\n \"APMServiceControl*.exe\",\n \"ExportToPDFCmd*.Exe\",\n \"SolarWinds.Credentials.Orion.WebApi*.exe\",\n \"SolarWinds.Orion.Topology.Calculator*.exe\",\n \"Database-Maint.exe\",\n \"SolarWinds.Orion.ApiPoller.Service.exe\",\n \"WerFault.exe\",\n \"WerMgr.exe\",\n \"SolarWinds.BusinessLayerHost.exe\",\n \"SolarWinds.BusinessLayerHostx64.exe\",\n \"SolarWinds.Topology.Calculator.exe\",\n \"SolarWinds.Topology.Calculatorx64.exe\",\n \"SolarWinds.APM.RealTimeProcessPoller.exe\") and\n process.code_signature.trusted == true\n ) and\n not process.executable : (\"?:\\\\Windows\\\\SysWOW64\\\\ARP.EXE\", \"?:\\\\Windows\\\\SysWOW64\\\\lodctr.exe\", \"?:\\\\Windows\\\\SysWOW64\\\\unlodctr.exe\")\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html", + "https://github.com/mandiant/sunburst_countermeasures/blob/main/rules/SUNBURST/hxioc/SUNBURST%20SUSPICIOUS%20CHILD%20PROCESSES%20(METHODOLOGY).ioc" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "93b22c0a-06a0-4131-b830-b10d5e166ff4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1195", + "name": "Supply Chain Compromise", + "reference": "https://attack.mitre.org/techniques/T1195/", + "subtechnique": [ + { + "id": "T1195.002", + "name": "Compromise Software Supply Chain", + "reference": "https://attack.mitre.org/techniques/T1195/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "93b22c0a-06a0-4131-b830-b10d5e166ff4_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/93c1ce76-494c-4f01-8167-35edfb52f7b1_106.json b/packages/security_detection_engine/kibana/security_rule/93c1ce76-494c-4f01-8167-35edfb52f7b1_106.json new file mode 100644 index 00000000000..9e81dfbefbd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/93c1ce76-494c-4f01-8167-35edfb52f7b1_106.json @@ -0,0 +1,75 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies registry write modifications to hide an encoded portable executable. This could be indicative of adversary defense evasion by avoiding the storing of malicious content directly on disk.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Encoded Executable Stored in the Registry", + "query": "registry where host.os.type == \"windows\" and\n/* update here with encoding combinations */\n registry.data.strings : \"TVqQAAMAAAAEAAAA*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + } + ], + "risk_score": 47, + "rule_id": "93c1ce76-494c-4f01-8167-35edfb52f7b1", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + }, + { + "id": "T1140", + "name": "Deobfuscate/Decode Files or Information", + "reference": "https://attack.mitre.org/techniques/T1140/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "93c1ce76-494c-4f01-8167-35edfb52f7b1_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/947827c6-9ed6-4dec-903e-c856c86e72f3_3.json b/packages/security_detection_engine/kibana/security_rule/947827c6-9ed6-4dec-903e-c856c86e72f3_3.json new file mode 100644 index 00000000000..de2fdac8231 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/947827c6-9ed6-4dec-903e-c856c86e72f3_3.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies activity related to loading kernel modules on Linux via creation of new ko files in the LKM directory.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Creation of Kernel Module", + "query": "file where host.os.type == \"linux\" and event.type in (\"change\", \"creation\") and file.path : \"/lib/modules/*\" and\nfile.extension == \"ko\" and not process.name : (\n \"dpkg\", \"systemd\", \"falcon-sensor*\", \"dnf\", \"yum\", \"rpm\", \"cp\"\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "947827c6-9ed6-4dec-903e-c856c86e72f3", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "947827c6-9ed6-4dec-903e-c856c86e72f3_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/94a401ba-4fa2-455c-b7ae-b6e037afc0b7_7.json b/packages/security_detection_engine/kibana/security_rule/94a401ba-4fa2-455c-b7ae-b6e037afc0b7_7.json new file mode 100644 index 00000000000..4d25bb7ede2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/94a401ba-4fa2-455c-b7ae-b6e037afc0b7_7.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the usage of gpresult.exe to query group policy objects. Attackers may query group policy objects during the reconnaissance phase after compromising a system to gain a better understanding of the active directory environment and possible methods to escalate privileges or move laterally.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Group Policy Discovery via Microsoft GPResult Utility", + "note": "## Triage and analysis\n\n### Investigating Group Policy Discovery via Microsoft GPResult Utility\n\nGroup Policy is a Windows feature that allows administrators to manage and configure settings for users and computers in an Active Directory environment. The Microsoft GPResult utility (gpresult.exe) is a command-line tool used to query and display Group Policy Objects (GPOs) applied to a system. Attackers may abuse this utility to gain insights into the active directory environment and identify potential privilege escalation or lateral movement opportunities.\n\nThe detection rule 'Group Policy Discovery via Microsoft GPResult Utility' is designed to identify the usage of gpresult.exe with specific arguments (\"/z\", \"/v\", \"/r\", \"/x\") that are commonly used by adversaries during the reconnaissance phase to perform group policy discovery.\n\n#### Possible investigation steps\n\n- Review the alert details to understand the context of the gpresult.exe usage, such as the user account, system, and time of execution.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate any abnormal behavior by the parent process, such as network connections, registry or file modifications, and any other spawned child processes.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(process.name: \"gpresult.exe\" or ?process.pe.original_file_name == \"gprslt.exe\") and process.args: (\"/z\", \"/v\", \"/r\", \"/x\")\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "94a401ba-4fa2-455c-b7ae-b6e037afc0b7", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1615", + "name": "Group Policy Discovery", + "reference": "https://attack.mitre.org/techniques/T1615/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "94a401ba-4fa2-455c-b7ae-b6e037afc0b7_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/954ee7c8-5437-49ae-b2d6-2960883898e9_107.json b/packages/security_detection_engine/kibana/security_rule/954ee7c8-5437-49ae-b2d6-2960883898e9_107.json new file mode 100644 index 00000000000..4875d380856 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/954ee7c8-5437-49ae-b2d6-2960883898e9_107.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote scheduled task creations on a target host. This could be indicative of adversary lateral movement.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote Scheduled Task Creation", + "note": "## Triage and analysis\n\n### Investigating Remote Scheduled Task Creation\n\n[Scheduled tasks](https://docs.microsoft.com/en-us/windows/win32/taskschd/about-the-task-scheduler) are a great mechanism for persistence and program execution. These features can be used remotely for a variety of legitimate reasons, but at the same time used by malware and adversaries. When investigating scheduled tasks that were set up remotely, one of the first steps should be to determine the original intent behind the configuration and to verify if the activity is tied to benign behavior such as software installation or any kind of network administrator work. One objective for these alerts is to understand the configured action within the scheduled task. This is captured within the registry event data for this rule and can be base64 decoded to view the value.\n\n#### Possible investigation steps\n\n- Review the base64 encoded tasks actions registry value to investigate the task configured action.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Further examination should include review of host-based artifacts and network logs from around when the scheduled task was created, on both the source and target machines.\n\n### False positive analysis\n\n- There is a high possibility of benign activity tied to the creation of remote scheduled tasks as it is a general feature within Windows and used for legitimate purposes for a wide range of activity. Any kind of context should be found to further understand the source of the activity and determine the intent based on the scheduled task's contents.\n\n### Related rules\n\n- Service Command Lateral Movement - d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc\n- Remotely Started Services via RPC - aa9a274d-6b53-424d-ac5e-cb8ca4251650\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Remove scheduled task and any other related artifacts.\n- Review privileged account management and user account management settings. Consider implementing group policy object (GPO) policies to further restrict activity, or configuring settings that only allow administrators to create remote scheduled tasks.\n", + "query": "/* Task Scheduler service incoming connection followed by TaskCache registry modification */\n\nsequence by host.id, process.entity_id with maxspan = 1m\n [network where host.os.type == \"windows\" and process.name : \"svchost.exe\" and\n network.direction : (\"incoming\", \"ingress\") and source.port >= 49152 and destination.port >= 49152 and\n source.ip != \"127.0.0.1\" and source.ip != \"::1\"\n ]\n [registry where host.os.type == \"windows\" and registry.path : \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Schedule\\\\TaskCache\\\\Tasks\\\\*\\\\Actions\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "954ee7c8-5437-49ae-b2d6-2960883898e9", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "954ee7c8-5437-49ae-b2d6-2960883898e9_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/959a7353-1129-4aa7-9084-30746b256a70_108.json b/packages/security_detection_engine/kibana/security_rule/959a7353-1129-4aa7-9084-30746b256a70_108.json new file mode 100644 index 00000000000..60ad3ac18fb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/959a7353-1129-4aa7-9084-30746b256a70_108.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that can take screenshots, which is a common feature in post-exploitation kits and remote access tools (RATs).", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Suspicious Script with Screenshot Capabilities", + "note": "## Triage and analysis\n\n### Investigating PowerShell Suspicious Script with Screenshot Capabilities\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks, which makes it available for use in various environments and creates an attractive way for attackers to execute code.\n\nAttackers can abuse PowerShell capabilities and take screen captures of desktops to gather information over the course of an operation.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Determine whether the script stores the captured data locally.\n- Investigate whether the script contains exfiltration capabilities and identify the exfiltration server.\n- Assess network data to determine if the host communicated with the exfiltration server.\n\n### False positive analysis\n\n- Regular users do not have a business justification for using scripting utilities to take screenshots, which makes false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Related rules\n\n- PowerShell Keylogging Script - bd2c86a0-8b61-4457-ab38-96943984e889\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n CopyFromScreen and\n (\"System.Drawing.Bitmap\" or \"Drawing.Bitmap\")\n ) and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://docs.microsoft.com/en-us/dotnet/api/system.drawing.graphics.copyfromscreen" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "959a7353-1129-4aa7-9084-30746b256a70", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1113", + "name": "Screen Capture", + "reference": "https://attack.mitre.org/techniques/T1113/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "959a7353-1129-4aa7-9084-30746b256a70_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/968ccab9-da51-4a87-9ce2-d3c9782fd759_111.json b/packages/security_detection_engine/kibana/security_rule/968ccab9-da51-4a87-9ce2-d3c9782fd759_111.json new file mode 100644 index 00000000000..ef0c1868905 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/968ccab9-da51-4a87-9ce2-d3c9782fd759_111.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects a file being made immutable using the chattr binary. Making a file immutable means it cannot be deleted or renamed, no link can be created to this file, most of the file's metadata can not be modified, and the file can not be opened in write mode. Threat actors will commonly utilize this to prevent tampering or modification of their malicious files or any system files they have modified for purposes of persistence (e.g .ssh, /etc/passwd, etc.).", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "File made Immutable by Chattr", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and user.id == \"0\" and\n process.executable : \"/usr/bin/chattr\" and process.args : (\"-*i*\", \"+*i*\") and\n not process.parent.executable: (\"/lib/systemd/systemd\", \"/usr/local/uems_agent/bin/*\", \"/usr/lib/systemd/systemd\") and\n not process.parent.name in (\"systemd\", \"cf-agent\", \"ntpdate\", \"xargs\", \"px\", \"preinst\", \"auth\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "968ccab9-da51-4a87-9ce2-d3c9782fd759", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1222", + "name": "File and Directory Permissions Modification", + "reference": "https://attack.mitre.org/techniques/T1222/", + "subtechnique": [ + { + "id": "T1222.002", + "name": "Linux and Mac File and Directory Permissions Modification", + "reference": "https://attack.mitre.org/techniques/T1222/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "968ccab9-da51-4a87-9ce2-d3c9782fd759_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/96d11d31-9a79-480f-8401-da28b194608f_9.json b/packages/security_detection_engine/kibana/security_rule/96d11d31-9a79-480f-8401-da28b194608f_9.json new file mode 100644 index 00000000000..8e88cf1e2ed --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/96d11d31-9a79-480f-8401-da28b194608f_9.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Message of the day (MOTD) is the message that is presented to the user when a user connects to a Linux server via SSH or a serial connection. Linux systems contain several default MOTD files located in the \"/etc/update-motd.d/\" and \"/usr/lib/update-notifier/\" directories. These scripts run as the root user every time a user connects over SSH or a serial connection. Adversaries may create malicious MOTD files that grant them persistence onto the target every time a user connects to the system by executing a backdoor script or command. This rule detects the creation of potentially malicious files within the default MOTD file directories.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence Through MOTD File Creation Detected", + "new_terms_fields": [ + "host.id", + "file.path", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating Potential Persistence Through MOTD File Creation Detected\n\nThe message-of-the-day (MOTD) is used to display a customizable system-wide message or information to users upon login in Linux.\n\nAttackers can abuse message-of-the-day (motd) files to run scripts, commands or malicious software every time a user connects to a system over SSH or a serial connection, by creating a new file within the `/etc/update-motd.d/` or `/usr/lib/update-notifier/` directory. Executable files in these directories automatically run with root privileges.\n\nThis rule identifies the creation of new files within the `/etc/update-motd.d/` or `/usr/lib/update-notifier/` directories.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\"}}\n- Investigate whether any other files in the `/etc/update-motd.d/` or `/usr/lib/update-notifier/` directories have been altered.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (path LIKE '/etc/update-motd.d/%' OR path LIKE '/usr/lib/update-notifier/%')\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (path LIKE '/etc/update-motd.d/%' OR path LIKE '/usr/lib/update-notifier/%')\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate whether the modified scripts call other malicious scripts elsewhere on the file system.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### Related Rules\n\n- Suspicious Process Spawned from MOTD Detected - 4ec47004-b34a-42e6-8003-376a123ea447\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the MOTD files or restore their original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type :linux and event.action:(creation or file_create_event or rename or file_rename_event) and\nfile.path : (/etc/update-motd.d/* or /usr/lib/update-notifier/*) and not process.name : (\n dpkg or dockerd or rpm or executor or dnf or podman or ln or yum \n) and not (\n (process.name:mv and file.extension:dpkg-remove) or\n (file.extension:(swp or swpx))\n)\n", + "references": [ + "https://pberba.github.io/security/2022/02/06/linux-threat-hunting-for-persistence-initialization-scripts-and-shell-configuration/#10-boot-or-logon-initialization-scripts-motd" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "96d11d31-9a79-480f-8401-da28b194608f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 9 + }, + "id": "96d11d31-9a79-480f-8401-da28b194608f_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/96e90768-c3b7-4df6-b5d9-6237f8bc36a8_107.json b/packages/security_detection_engine/kibana/security_rule/96e90768-c3b7-4df6-b5d9-6237f8bc36a8_107.json new file mode 100644 index 00000000000..dd24f7afa2c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/96e90768-c3b7-4df6-b5d9-6237f8bc36a8_107.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may collect the keychain storage data from a system to acquire credentials. Keychains are the built-in way for macOS to keep track of users' passwords and credentials for many services and features such as WiFi passwords, websites, secure notes and certificates.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Access to Keychain Credentials Directories", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.args :\n (\n \"/Users/*/Library/Keychains/*\",\n \"/Library/Keychains/*\",\n \"/Network/Library/Keychains/*\",\n \"System.keychain\",\n \"login.keychain-db\",\n \"login.keychain\"\n ) and\n not process.args : (\"find-certificate\",\n \"add-trusted-cert\",\n \"set-keychain-settings\",\n \"delete-certificate\",\n \"/Users/*/Library/Keychains/openvpn.keychain-db\",\n \"show-keychain-info\",\n \"lock-keychain\",\n \"set-key-partition-list\",\n \"import\",\n \"find-identity\") and\n not process.parent.executable :\n (\n \"/Applications/OpenVPN Connect/OpenVPN Connect.app/Contents/MacOS/OpenVPN Connect\",\n \"/Applications/Microsoft Defender.app/Contents/MacOS/wdavdaemon_enterprise.app/Contents/MacOS/wdavdaemon_enterprise\",\n \"/opt/jc/bin/jumpcloud-agent\"\n ) and\n not process.executable : \"/opt/jc/bin/jumpcloud-agent\"\n", + "references": [ + "https://objective-see.com/blog/blog_0x25.html", + "https://securelist.com/calisto-trojan-for-macos/86543/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "96e90768-c3b7-4df6-b5d9-6237f8bc36a8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.001", + "name": "Keychain", + "reference": "https://attack.mitre.org/techniques/T1555/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "96e90768-c3b7-4df6-b5d9-6237f8bc36a8_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/97020e61-e591-4191-8a3b-2861a2b887cd_7.json b/packages/security_detection_engine/kibana/security_rule/97020e61-e591-4191-8a3b-2861a2b887cd_7.json new file mode 100644 index 00000000000..ca89d14b9df --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/97020e61-e591-4191-8a3b-2861a2b887cd_7.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a process running as SYSTEM and impersonating a Windows core binary privileges. Adversaries may create a new process with a different token to escalate privileges and bypass access controls.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "SeDebugPrivilege Enabled by a Suspicious Process", + "query": "any where host.os.type == \"windows\" and event.provider: \"Microsoft-Windows-Security-Auditing\" and\n event.action : \"Token Right Adjusted Events\" and\n\n winlog.event_data.EnabledPrivilegeList : \"SeDebugPrivilege\" and\n\n /* exclude processes with System Integrity */\n not winlog.event_data.SubjectUserSid : (\"S-1-5-18\", \"S-1-5-19\", \"S-1-5-20\") and\n\n not winlog.event_data.ProcessName :\n (\"?:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\System32\\\\lsass.exe\",\n \"?:\\\\Windows\\\\WinSxS\\\\*\",\n \"?:\\\\Program Files\\\\*\",\n \"?:\\\\Program Files (x86)\\\\*\",\n \"?:\\\\Windows\\\\System32\\\\MRT.exe\",\n \"?:\\\\Windows\\\\System32\\\\cleanmgr.exe\",\n \"?:\\\\Windows\\\\System32\\\\taskhostw.exe\",\n \"?:\\\\Windows\\\\System32\\\\mmc.exe\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\*-*\\\\DismHost.exe\",\n \"?:\\\\Windows\\\\System32\\\\auditpol.exe\",\n \"?:\\\\Windows\\\\System32\\\\wbem\\\\WmiPrvSe.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\wbem\\\\WmiPrvSe.exe\")\n", + "references": [ + "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4703", + "https://blog.palantir.com/windows-privilege-abuse-auditing-detection-and-defense-3078a403d74e" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.EnabledPrivilegeList", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.ProcessName", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserSid", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "97020e61-e591-4191-8a3b-2861a2b887cd", + "setup": "## Setup\n\nWindows Event 4703 logs Token Privileges changes and need to be configured (Enable).\n\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDetailed Tracking >\nToken Right Adjusted Events (Success)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1134", + "name": "Access Token Manipulation", + "reference": "https://attack.mitre.org/techniques/T1134/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "97020e61-e591-4191-8a3b-2861a2b887cd_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/97314185-2568-4561-ae81-f3e480e5e695_105.json b/packages/security_detection_engine/kibana/security_rule/97314185-2568-4561-ae81-f3e480e5e695_105.json new file mode 100644 index 00000000000..8c07de0084e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/97314185-2568-4561-ae81-f3e480e5e695_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the modification of an anti-phishing rule in Microsoft 365. By default, Microsoft 365 includes built-in features that help protect users from phishing attacks. Anti-phishing rules increase this protection by refining settings to better detect and prevent attacks.", + "false_positives": [ + "An anti-phishing rule may be deleted by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Anti-Phish Rule Modification", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:(\"Remove-AntiPhishRule\" or \"Disable-AntiPhishRule\") and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-antiphishrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/disable-antiphishrule?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "97314185-2568-4561-ae81-f3e480e5e695", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "97314185-2568-4561-ae81-f3e480e5e695_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/97aba1ef-6034-4bd3-8c1a-1e0996b27afa_109.json b/packages/security_detection_engine/kibana/security_rule/97aba1ef-6034-4bd3-8c1a-1e0996b27afa_109.json new file mode 100644 index 00000000000..f435cfdf3fd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/97aba1ef-6034-4bd3-8c1a-1e0996b27afa_109.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A suspicious Zoom child process was detected, which may indicate an attempt to run unnoticed. Verify process details such as command line, network connections, file writes and associated file signature details as well.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Zoom Child Process", + "note": "## Triage and analysis\n\n### Investigating Suspicious Zoom Child Process\n\nBy examining the specific traits of Windows binaries -- such as process trees, command lines, network connections, registry modifications, and so on -- it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity, such as masquerading, and deserve further investigation.\n\nThis rule identifies a potential malicious process masquerading as `Zoom.exe` or exploiting a vulnerability in the application causing it to execute code.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the command line of the child process to determine which commands or scripts were executed.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"Zoom.exe\" and process.name : (\"cmd.exe\", \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "97aba1ef-6034-4bd3-8c1a-1e0996b27afa", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + }, + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1203", + "name": "Exploitation for Client Execution", + "reference": "https://attack.mitre.org/techniques/T1203/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "97aba1ef-6034-4bd3-8c1a-1e0996b27afa_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/97db8b42-69d8-4bf3-9fd4-c69a1d895d68_6.json b/packages/security_detection_engine/kibana/security_rule/97db8b42-69d8-4bf3-9fd4-c69a1d895d68_6.json new file mode 100644 index 00000000000..1c76b43beed --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/97db8b42-69d8-4bf3-9fd4-c69a1d895d68_6.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where VMware-related files, such as those with extensions like \".vmdk\", \".vmx\", \".vmxf\", \".vmsd\", \".vmsn\", \".vswp\", \".vmss\", \".nvram\", and \".vmem\", are renamed on a Linux system. The rule monitors for the \"rename\" event action associated with these file types, which could indicate malicious activity.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Renaming of ESXI Files", + "query": "file where host.os.type == \"linux\" and event.action == \"rename\" and\nfile.Ext.original.name : (\"*.vmdk\", \"*.vmx\", \"*.vmxf\", \"*.vmsd\", \"*.vmsn\", \"*.vswp\", \"*.vmss\", \"*.nvram\", \"*.vmem\")\nand not file.name : (\"*.vmdk\", \"*.vmx\", \"*.vmxf\", \"*.vmsd\", \"*.vmsn\", \"*.vswp\", \"*.vmss\", \"*.nvram\", \"*.vmem\")\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "file.Ext.original.name", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "97db8b42-69d8-4bf3-9fd4-c69a1d895d68", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "97db8b42-69d8-4bf3-9fd4-c69a1d895d68_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/98995807-5b09-4e37-8a54-5cae5dc932d7_105.json b/packages/security_detection_engine/kibana/security_rule/98995807-5b09-4e37-8a54-5cae5dc932d7_105.json new file mode 100644 index 00000000000..765153bf251 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/98995807-5b09-4e37-8a54-5cae5dc932d7_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a new role is assigned to a management group in Microsoft 365. An adversary may attempt to add a role in order to maintain persistence in an environment.", + "false_positives": [ + "A new role may be assigned to a management group by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Management Group Role Assignment", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"New-ManagementRoleAssignment\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-managementroleassignment?view=exchange-ps", + "https://docs.microsoft.com/en-us/microsoft-365/admin/add-users/about-admin-roles?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "98995807-5b09-4e37-8a54-5cae5dc932d7", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "98995807-5b09-4e37-8a54-5cae5dc932d7_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/99239e7d-b0d4-46e3-8609-acafcf99f68c_106.json b/packages/security_detection_engine/kibana/security_rule/99239e7d-b0d4-46e3-8609-acafcf99f68c_106.json new file mode 100644 index 00000000000..a44da2f8ee3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/99239e7d-b0d4-46e3-8609-acafcf99f68c_106.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the execution of a MacOS installer package with an abnormal child process (e.g bash) followed immediately by a network connection via a suspicious process (e.g curl). Threat actors will build and distribute malicious MacOS installer packages, which have a .pkg extension, many times imitating valid software in order to persuade and infect their victims often using the package files (e.g pre/post install scripts etc.) to download additional tools or malicious software. If this rule fires it should indicate the installation of a malicious or suspicious package.", + "false_positives": [ + "Custom organization-specific macOS packages that use .pkg files to run cURL could trigger this rule. If known behavior is causing false positives, it can be excluded from the rule." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "MacOS Installer Package Spawns Network Event", + "query": "sequence by host.id, user.id with maxspan=30s\n[process where host.os.type == \"macos\" and event.type == \"start\" and event.action == \"exec\" and process.parent.name : (\"installer\", \"package_script_service\") and process.name : (\"bash\", \"sh\", \"zsh\", \"python\", \"osascript\", \"tclsh*\")]\n[network where host.os.type == \"macos\" and event.type == \"start\" and process.name : (\"curl\", \"osascript\", \"wget\", \"python\")]\n", + "references": [ + "https://redcanary.com/blog/clipping-silver-sparrows-wings", + "https://posts.specterops.io/introducing-mystikal-4fbd2f7ae520", + "https://github.com/D00MFist/Mystikal" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "99239e7d-b0d4-46e3-8609-acafcf99f68c", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.007", + "name": "JavaScript", + "reference": "https://attack.mitre.org/techniques/T1059/007/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/", + "subtechnique": [ + { + "id": "T1071.001", + "name": "Web Protocols", + "reference": "https://attack.mitre.org/techniques/T1071/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "99239e7d-b0d4-46e3-8609-acafcf99f68c_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/994e40aa-8c85-43de-825e-15f665375ee8_3.json b/packages/security_detection_engine/kibana/security_rule/994e40aa-8c85-43de-825e-15f665375ee8_3.json new file mode 100644 index 00000000000..e71889eadd0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/994e40aa-8c85-43de-825e-15f665375ee8_3.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A supervised machine learning model (ProblemChild) has identified a suspicious Windows process event with high probability of it being malicious activity. Alternatively, the model's blocklist identified the event as being malicious.", + "from": "now-10m", + "index": [ + "endgame-*", + "logs-endpoint.events.process-*", + "winlogbeat-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Machine Learning Detected a Suspicious Windows Event with a High Malicious Probability Score", + "query": "process where ((problemchild.prediction == 1 and problemchild.prediction_probability > 0.98) or\nblocklist_label == 1) and not process.args : (\"*C:\\\\WINDOWS\\\\temp\\\\nessus_*.txt*\", \"*C:\\\\WINDOWS\\\\temp\\\\nessus_*.tmp*\")\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "blocklist_label", + "type": "unknown" + }, + { + "ecs": false, + "name": "problemchild.prediction", + "type": "unknown" + }, + { + "ecs": false, + "name": "problemchild.prediction_probability", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "994e40aa-8c85-43de-825e-15f665375ee8", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n", + "severity": "low", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.004", + "name": "Masquerade Task or Service", + "reference": "https://attack.mitre.org/techniques/T1036/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "994e40aa-8c85-43de-825e-15f665375ee8_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9960432d-9b26-409f-972b-839a959e79e2_209.json b/packages/security_detection_engine/kibana/security_rule/9960432d-9b26-409f-972b-839a959e79e2_209.json new file mode 100644 index 00000000000..022c4106449 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9960432d-9b26-409f-972b-839a959e79e2_209.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious access to LSASS handle from a call trace pointing to DBGHelp.dll or DBGCore.dll, which both export the MiniDumpWriteDump method that can be used to dump LSASS memory content in preparation for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via LSASS Memory Dump", + "query": "process where host.os.type == \"windows\" and event.code == \"10\" and\n winlog.event_data.TargetImage : \"?:\\\\WINDOWS\\\\system32\\\\lsass.exe\" and\n\n /* DLLs exporting MiniDumpWriteDump API to create an lsass mdmp*/\n winlog.event_data.CallTrace : (\"*dbghelp*\", \"*dbgcore*\") and\n\n /* case of lsass crashing */\n not process.executable : (\n \"?:\\\\Windows\\\\System32\\\\WerFault.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\WerFault.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerFaultSecure.exe\"\n )\n", + "references": [ + "https://www.ired.team/offensive-security/credential-access-and-credential-dumping/dump-credentials-from-lsass-process-without-mimikatz", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.CallTrace", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.TargetImage", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "9960432d-9b26-409f-972b-839a959e79e2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic:Execution", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 209 + }, + "id": "9960432d-9b26-409f-972b-839a959e79e2_209", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9a3a3689-8ed1-4cdb-83fb-9506db54c61f_208.json b/packages/security_detection_engine/kibana/security_rule/9a3a3689-8ed1-4cdb-83fb-9506db54c61f_208.json new file mode 100644 index 00000000000..a84a8484ca2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9a3a3689-8ed1-4cdb-83fb-9506db54c61f_208.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies access to the /etc/shadow file via the commandline using standard system utilities. After elevating privileges to root, threat actors may attempt to read or dump this file in order to gain valid credentials. They may utilize these to move laterally undetected and access additional resources.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Shadow File Read via Command Line Utilities", + "new_terms_fields": [ + "process.command_line", + "host.id", + "process.executable" + ], + "query": "host.os.type : \"linux\" and event.category : \"process\" and event.action : (\"exec\" or \"exec_event\") and\n(process.args : \"/etc/shadow\" or (process.working_directory: \"/etc\" and process.args: \"shadow\")) and not \n(process.executable : (\"/bin/chown\" or \"/usr/bin/chown\") and process.args : \"root:shadow\") and not \n(process.executable : (\"/bin/chmod\" or \"/usr/bin/chmod\") and process.args : \"640\")\n", + "references": [ + "https://www.cyberciti.biz/faq/unix-linux-password-cracking-john-the-ripper/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9a3a3689-8ed1-4cdb-83fb-9506db54c61f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.008", + "name": "/etc/passwd and /etc/shadow", + "reference": "https://attack.mitre.org/techniques/T1003/008/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 208 + }, + "id": "9a3a3689-8ed1-4cdb-83fb-9506db54c61f_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9a5b4e31-6cde-4295-9ff7-6be1b8567e1b_108.json b/packages/security_detection_engine/kibana/security_rule/9a5b4e31-6cde-4295-9ff7-6be1b8567e1b_108.json new file mode 100644 index 00000000000..c65e9ac22f4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9a5b4e31-6cde-4295-9ff7-6be1b8567e1b_108.json @@ -0,0 +1,157 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious Windows explorer child process. Explorer.exe can be abused to launch malicious scripts or executables from a trusted parent process.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Explorer Child Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n process.name : (\"cscript.exe\", \"wscript.exe\", \"powershell.exe\", \"rundll32.exe\", \"cmd.exe\", \"mshta.exe\", \"regsvr32.exe\") or\n process.pe.original_file_name in (\"cscript.exe\", \"wscript.exe\", \"PowerShell.EXE\", \"RUNDLL32.EXE\", \"Cmd.Exe\", \"MSHTA.EXE\", \"REGSVR32.EXE\")\n ) and\n /* Explorer started via DCOM */\n process.parent.name : \"explorer.exe\" and process.parent.args : \"-Embedding\" and\n not process.parent.args:\n (\n /* Noisy CLSID_SeparateSingleProcessExplorerHost Explorer COM Class IDs */\n \"/factory,{5BD95610-9434-43C2-886C-57852CC8A120}\",\n \"/factory,{ceff45ee-c862-41de-aee2-a022c81eda92}\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9a5b4e31-6cde-4295-9ff7-6be1b8567e1b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + }, + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + }, + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "9a5b4e31-6cde-4295-9ff7-6be1b8567e1b_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9aa0e1f6-52ce-42e1-abb3-09657cee2698_108.json b/packages/security_detection_engine/kibana/security_rule/9aa0e1f6-52ce-42e1-abb3-09657cee2698_108.json new file mode 100644 index 00000000000..744c57ac710 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9aa0e1f6-52ce-42e1-abb3-09657cee2698_108.json @@ -0,0 +1,114 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to enable the Windows scheduled tasks AT command via the registry. Attackers may use this method to move laterally or persist locally. The AT command has been deprecated since Windows 8 and Windows Server 2012, but still exists for backwards compatibility.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Scheduled Tasks AT Command Enabled", + "query": "registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Schedule\\\\Configuration\\\\EnableAt\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Schedule\\\\Configuration\\\\EnableAt\"\n ) and registry.data.strings : (\"1\", \"0x00000001\")\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-scheduledjob" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9aa0e1f6-52ce-42e1-abb3-09657cee2698", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.002", + "name": "At", + "reference": "https://attack.mitre.org/techniques/T1053/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "9aa0e1f6-52ce-42e1-abb3-09657cee2698_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c_110.json b/packages/security_detection_engine/kibana/security_rule/9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c_110.json new file mode 100644 index 00000000000..fc624d7b8d3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c_110.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary can use Windows Management Instrumentation (WMI) to install event filters, providers, consumers, and bindings that execute code when a defined event occurs. Adversaries may use the capabilities of WMI to subscribe to an event and execute arbitrary code when that event occurs, providing persistence on a system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via WMI Event Subscription", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"wmic.exe\" or ?process.pe.original_file_name == \"wmic.exe\") and\n process.args : \"create\" and\n process.args : (\"ActiveScriptEventConsumer\", \"CommandLineEventConsumer\")\n", + "references": [ + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-1" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.003", + "name": "Windows Management Instrumentation Event Subscription", + "reference": "https://attack.mitre.org/techniques/T1546/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "9b6813a1-daf1-457e-b0e6-0bb4e55b8a4c_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9b80cb26-9966-44b5-abbf-764fbdbc3586_2.json b/packages/security_detection_engine/kibana/security_rule/9b80cb26-9966-44b5-abbf-764fbdbc3586_2.json new file mode 100644 index 00000000000..897652b8b49 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9b80cb26-9966-44b5-abbf-764fbdbc3586_2.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where a process (granted CAP_SETUID and/or CAP_SETGID capabilities) is executed, after which the user's access is elevated to UID/GID 0 (root). In Linux, the CAP_SETUID and CAP_SETGID capabilities allow a process to change its UID and GID, respectively, providing control over user and group identity management. Attackers may leverage a misconfiguration for exploitation in order to escalate their privileges to root.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via CAP_SETUID/SETGID Capabilities", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name != null and\n (process.thread.capabilities.effective : \"CAP_SET?ID\" or process.thread.capabilities.permitted : \"CAP_SET?ID\") and \n user.id != \"0\"]\n [process where host.os.type == \"linux\" and event.action == \"uid_change\" and event.type == \"change\" and \n (process.thread.capabilities.effective : \"CAP_SET?ID\" or process.thread.capabilities.permitted : \"CAP_SET?ID\")\n and user.id == \"0\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9b80cb26-9966-44b5-abbf-764fbdbc3586", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + }, + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.001", + "name": "Setuid and Setgid", + "reference": "https://attack.mitre.org/techniques/T1548/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "9b80cb26-9966-44b5-abbf-764fbdbc3586_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9c260313-c811-4ec8-ab89-8f6530e0246c_108.json b/packages/security_detection_engine/kibana/security_rule/9c260313-c811-4ec8-ab89-8f6530e0246c_108.json new file mode 100644 index 00000000000..71411de9e26 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9c260313-c811-4ec8-ab89-8f6530e0246c_108.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "The hosts file on endpoints is used to control manual IP address to hostname resolutions. The hosts file is the first point of lookup for DNS hostname resolution so if adversaries can modify the endpoint hosts file, they can route traffic to malicious infrastructure. This rule detects modifications to the hosts file on Microsoft Windows, Linux (Ubuntu or RHEL) and macOS systems.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Hosts File Modified", + "note": "## Triage and analysis\n\n### Investigating Hosts File Modified\n\nOperating systems use the hosts file to map a connection between an IP address and domain names before going to domain name servers. Attackers can abuse this mechanism to route traffic to malicious infrastructure or disrupt security that depends on server communications. For example, Russian threat actors modified this file on a domain controller to redirect Duo MFA calls to localhost instead of the Duo server, which prevented the MFA service from contacting its server to validate MFA login. This effectively disabled MFA for active domain accounts because the default policy of Duo for Windows is to \"Fail open\" if the MFA server is unreachable. This can happen in any MFA implementation and is not exclusive to Duo. Find more details in this [CISA Alert](https://www.cisa.gov/uscert/ncas/alerts/aa22-074a).\n\nThis rule identifies modifications in the hosts file across multiple operating systems using process creation events for Linux and file events in Windows and macOS.\n\n#### Possible investigation steps\n\n- Identify the specifics of the involved assets, such as role, criticality, and associated users.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the changes to the hosts file by comparing it against file backups, volume shadow copies, and other restoration mechanisms.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and the configuration was justified.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Consider isolating the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Review the privileges of the administrator account that performed the action.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where\n\n /* file events for creation; file change events are not captured by some of the included sources for linux and so may\n miss this, which is the purpose of the process + command line args logic below */\n (\n event.category == \"file\" and event.type in (\"change\", \"creation\") and\n file.path : (\"/private/etc/hosts\", \"/etc/hosts\", \"?:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts\") and \n not process.name in (\"dockerd\", \"rootlesskit\", \"podman\", \"crio\")\n )\n or\n\n /* process events for change targeting linux only */\n (\n event.category == \"process\" and event.type in (\"start\") and\n process.name in (\"nano\", \"vim\", \"vi\", \"emacs\", \"echo\", \"sed\") and\n process.args : (\"/etc/hosts\") and \n not process.parent.name in (\"dhclient-script\", \"google_set_hostname\")\n )\n", + "references": [ + "https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-reference-yml.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9c260313-c811-4ec8-ab89-8f6530e0246c", + "setup": "## Setup\n\nFor Windows systems using Auditbeat, this rule requires adding `C:/Windows/System32/drivers/etc` as an additional path in the 'file_integrity' module of auditbeat.yml.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: Windows", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1565", + "name": "Data Manipulation", + "reference": "https://attack.mitre.org/techniques/T1565/", + "subtechnique": [ + { + "id": "T1565.001", + "name": "Stored Data Manipulation", + "reference": "https://attack.mitre.org/techniques/T1565/001/" + } + ] + } + ] + } + ], + "timeline_id": "4d4c0b59-ea83-483f-b8c1-8c360ee53c5c", + "timeline_title": "Comprehensive File Timeline", + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "9c260313-c811-4ec8-ab89-8f6530e0246c_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9ccf3ce0-0057-440a-91f5-870c6ad39093_109.json b/packages/security_detection_engine/kibana/security_rule/9ccf3ce0-0057-440a-91f5-870c6ad39093_109.json new file mode 100644 index 00000000000..77e0aabe1c1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9ccf3ce0-0057-440a-91f5-870c6ad39093_109.json @@ -0,0 +1,150 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies command shell activity started via RunDLL32, which is commonly abused by attackers to host malicious code.", + "false_positives": [ + "Microsoft Windows installers leveraging RunDLL32 for installation." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Command Shell Activity Started via RunDLL32", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"cmd.exe\", \"powershell.exe\") and\n process.parent.name : \"rundll32.exe\" and process.parent.command_line != null and\n /* common FPs can be added here */\n not process.parent.args : (\"C:\\\\Windows\\\\System32\\\\SHELL32.dll,RunAsNewUser_RunDLL\",\n \"C:\\\\WINDOWS\\\\*.tmp,zzzzInvokeManagedCustomActionOutOfProc\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9ccf3ce0-0057-440a-91f5-870c6ad39093", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1552", + "name": "Unsecured Credentials", + "reference": "https://attack.mitre.org/techniques/T1552/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "9ccf3ce0-0057-440a-91f5-870c6ad39093_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208.json new file mode 100644 index 00000000000..e35c91e4b38 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, was started by a script or the Windows command interpreter. This behavior is unusual and is sometimes used by malicious payloads.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual." + ], + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft Build Engine Started by a Script Process", + "new_terms_fields": [ + "host.id", + "user.name", + "process.command_line" + ], + "query": "host.os.type:windows and event.category:process and event.type:start and (\n process.name.caseless:\"msbuild.exe\" or process.pe.original_file_name:\"MSBuild.exe\") and \n process.parent.name:(\"cmd.exe\" or \"powershell.exe\" or \"pwsh.exe\" or \"powershell_ise.exe\" or \"cscript.exe\" or\n \"wscript.exe\" or \"mshta.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.name.caseless", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + }, + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 208 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae2_208", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109.json new file mode 100644 index 00000000000..dc228d27682 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, was started by Explorer or the WMI (Windows Management Instrumentation) subsystem. This behavior is unusual and is sometimes used by malicious payloads.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Build Engine Started by a System Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"MSBuild.exe\" and\n process.parent.name : (\"explorer.exe\", \"wmiprvse.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae3_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111.json new file mode 100644 index 00000000000..7d649c1e25e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, was started after being renamed. This is uncommon behavior and may indicate an attempt to run unnoticed or undetected.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Build Engine Using an Alternate Name", + "note": "## Triage and analysis\n\n### Investigating Microsoft Build Engine Using an Alternate Name\n\nThe OriginalFileName attribute of a PE (Portable Executable) file is a metadata field that contains the original name of the executable file when compiled or linked. By using this attribute, analysts can identify renamed instances that attackers can use with the intent of evading detections, application allowlists, and other security protections.\n\nThe Microsoft Build Engine is a platform for building applications. This engine, also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software, and can be abused to proxy execution of code.\n\nThis rule checks for renamed instances of MSBuild, which can indicate an attempt of evading detections, application allowlists, and other security protections.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.pe.original_file_name == \"MSBuild.exe\" and\n not process.name : \"MSBuild.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + }, + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae4_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109.json new file mode 100644 index 00000000000..6f71e1d16a7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109.json @@ -0,0 +1,154 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, loaded DLLs (dynamically linked libraries) responsible for Windows credential management. This technique is sometimes used for credential dumping.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via Trusted Developer Utility", + "note": "## Triage and analysis\n\n### Investigating Potential Credential Access via Trusted Developer Utility\n\nThe Microsoft Build Engine is a platform for building applications. This engine, also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software.\n\nAdversaries can abuse MSBuild to proxy the execution of malicious code. The inline task capability of MSBuild that was introduced in .NET version 4 allows for C# or Visual Basic code to be inserted into an XML project file. MSBuild will compile and execute the inline task. `MSBuild.exe` is a signed Microsoft binary, and the execution of code using it can bypass application control defenses that are configured to allow `MSBuild.exe` execution.\n\nThis rule looks for the MSBuild process loading `vaultcli.dll` or `SAMLib.DLL`, which indicates the execution of credential access activities.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate abnormal behaviors observed by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the command line to identify the `.csproj` file location.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and (process.name : \"MSBuild.exe\" or process.pe.original_file_name == \"MSBuild.exe\")]\n [any where host.os.type == \"windows\" and (event.category == \"library\" or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : (\"vaultcli.dll\", \"SAMLib.DLL\") or file.name : (\"vaultcli.dll\", \"SAMLib.DLL\"))]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + } + ] + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.004", + "name": "Windows Credential Manager", + "reference": "https://attack.mitre.org/techniques/T1555/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 109 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210.json new file mode 100644 index 00000000000..952442a24a6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, started a PowerShell script or the Visual C# Command Line Compiler. This technique is sometimes used to deploy a malicious payload using the Build Engine.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual. If a build system triggers this rule it can be exempted by process, user or host name." + ], + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "logs-system.security*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft Build Engine Started an Unusual Process", + "new_terms_fields": [ + "host.id", + "user.name" + ], + "query": "host.os.type:windows and event.category:process and event.type:start and process.parent.name:(\"MSBuild.exe\" or \"msbuild.exe\") and\nprocess.name:(\"csc.exe\" or \"iexplore.exe\" or \"powershell.exe\")\n", + "references": [ + "https://blog.talosintelligence.com/2020/02/building-bypass-with-msbuild.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/", + "subtechnique": [ + { + "id": "T1027.004", + "name": "Compile After Delivery", + "reference": "https://attack.mitre.org/techniques/T1027/004/" + } + ] + }, + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 210 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae6_210", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106.json b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106.json new file mode 100644 index 00000000000..b536aa83afa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, created a thread in another process. This technique is sometimes used to evade detection or elevate privileges.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual." + ], + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Process Injection by the Microsoft Build Engine", + "query": "process.name:MSBuild.exe and host.os.type:windows and event.action:\"CreateRemoteThread detected (rule: CreateRemoteThread)\"\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Privilege Escalation", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + }, + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae9_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9d19ece6-c20e-481a-90c5-ccca596537de_106.json b/packages/security_detection_engine/kibana/security_rule/9d19ece6-c20e-481a-90c5-ccca596537de_106.json new file mode 100644 index 00000000000..f7c2115d571 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9d19ece6-c20e-481a-90c5-ccca596537de_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Indicates the creation or modification of a launch daemon, which adversaries may use to repeatedly execute malicious payloads as part of persistence.", + "false_positives": [ + "Trusted applications persisting via LaunchDaemons" + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "LaunchDaemon Creation or Modification and Immediate Loading", + "query": "sequence by host.id with maxspan=1m\n [file where host.os.type == \"macos\" and event.type != \"deletion\" and file.path : (\"/System/Library/LaunchDaemons/*\", \"/Library/LaunchDaemons/*\")]\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name == \"launchctl\" and process.args == \"load\"]\n", + "references": [ + "https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9d19ece6-c20e-481a-90c5-ccca596537de", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "9d19ece6-c20e-481a-90c5-ccca596537de_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9f1c4ca3-44b5-481d-ba42-32dc215a2769_110.json b/packages/security_detection_engine/kibana/security_rule/9f1c4ca3-44b5-481d-ba42-32dc215a2769_110.json new file mode 100644 index 00000000000..00fa2794882 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9f1c4ca3-44b5-481d-ba42-32dc215a2769_110.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the EarthWorm tunneler. Adversaries may tunnel network communications to and from a victim system within a separate protocol to avoid detection and network filtering, or to enable access to otherwise unreachable systems.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Protocol Tunneling via EarthWorm", + "note": "## Triage and analysis\n\n### Investigating Potential Protocol Tunneling via EarthWorm\n\nAttackers can leverage `earthworm` to clandestinely tunnel network communications and evade security measures, potentially gaining unauthorized access to sensitive systems.\n\nThis rule looks for several command line arguments that are consistent with `earthworm` tunneling behavior. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate protocol tunneling. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and\n process.args : \"-s\" and process.args : \"-d\" and process.args : \"rssocks\"\n", + "references": [ + "http://rootkiter.com/EarthWorm/", + "https://decoded.avast.io/luigicamastra/apt-group-targeting-governmental-agencies-in-east-asia/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "9f1c4ca3-44b5-481d-ba42-32dc215a2769", + "setup": "## Setup\n\nThis rule requires data coming in either from Elastic Defend, or Auditbeat integration.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "9f1c4ca3-44b5-481d-ba42-32dc215a2769_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9f962927-1a4f-45f3-a57b-287f2c7029c1_113.json b/packages/security_detection_engine/kibana/security_rule/9f962927-1a4f-45f3-a57b-287f2c7029c1_113.json new file mode 100644 index 00000000000..bc2c07c29aa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9f962927-1a4f-45f3-a57b-287f2c7029c1_113.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies when a User Account starts the Active Directory Replication Process. Attackers can use the DCSync technique to get credential information of individual accounts or the entire domain, thus compromising the entire domain.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via DCSync", + "note": "## Triage and analysis\n\n### Investigating Potential Credential Access via DCSync\n\nActive Directory replication is the process by which the changes that originate on one domain controller are automatically transferred to other domain controllers that store the same data.\n\nActive Directory data consists of objects that have properties, or attributes. Each object is an instance of an object class, and object classes and their respective attributes are defined in the Active Directory schema. Objects are defined by the values of their attributes, and changes to attribute values must be transferred from the domain controller on which they occur to every other domain controller that stores a replica of an affected object.\n\nAdversaries can use the DCSync technique that uses Windows Domain Controller's API to simulate the replication process from a remote domain controller, compromising major credential material such as the Kerberos krbtgt keys used legitimately for tickets creation, but also tickets forging by attackers. This attack requires some extended privileges to succeed (DS-Replication-Get-Changes and DS-Replication-Get-Changes-All), which are granted by default to members of the Administrators, Domain Admins, Enterprise Admins, and Domain Controllers groups. Privileged accounts can be abused to grant controlled objects the right to DCsync/Replicate.\n\nMore details can be found on [Threat Hunter Playbook](https://threathunterplaybook.com/library/windows/active_directory_replication.html?highlight=dcsync#directory-replication-services-auditing) and [The Hacker Recipes](https://www.thehacker.recipes/ad/movement/credentials/dumping/dcsync).\n\nThis rule monitors for Event ID 4662 (Operation was performed on an Active Directory object) and identifies events that use the access mask 0x100 (Control Access) and properties that contain at least one of the following or their equivalent Schema-Id-GUID (DS-Replication-Get-Changes, DS-Replication-Get-Changes-All, DS-Replication-Get-Changes-In-Filtered-Set). It also filters out events that use computer accounts and also Azure AD Connect MSOL accounts (more details [here](https://techcommunity.microsoft.com/t5/microsoft-defender-for-identity/ad-connect-msol-user-suspected-dcsync-attack/m-p/788028)).\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account and system owners and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Correlate security events 4662 and 4624 (Logon Type 3) by their Logon ID (`winlog.logon.id`) on the Domain Controller (DC) that received the replication request. This will tell you where the AD replication request came from, and if it came from another DC or not.\n- Scope which credentials were compromised (for example, whether all accounts were replicated or specific ones).\n\n### False positive analysis\n\n- Administrators may use custom accounts on Azure AD Connect, investigate if it is the case, and if it is properly secured. If noisy in your environment due to expected activity, consider adding the corresponding account as a exception.\n- Although replicating Active Directory (AD) data to non-Domain Controllers is not a common practice and is generally not recommended from a security perspective, some software vendors may require it for their products to function correctly. If this rule is noisy in your environment due to expected activity, consider adding the corresponding account as a exception.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the entire domain or the `krbtgt` user was compromised:\n - Activate your incident response plan for total Active Directory compromise which should include, but not be limited to, a password reset (twice) of the `krbtgt` user.\n- Investigate how the attacker escalated privileges and identify systems they used to conduct lateral movement. Use this information to determine ways the attacker could regain access to the environment.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where event.action : (\"Directory Service Access\", \"object-operation-performed\") and\n event.code == \"4662\" and winlog.event_data.Properties : (\n\n /* Control Access Rights/Permissions Symbol */\n\n \"*DS-Replication-Get-Changes*\",\n \"*DS-Replication-Get-Changes-All*\",\n \"*DS-Replication-Get-Changes-In-Filtered-Set*\",\n\n /* Identifying GUID used in ACE */\n\n \"*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*\",\n \"*1131f6aa-9c07-11d1-f79f-00c04fc2dcd2*\",\n \"*89e95b76-444d-4c62-991a-0facbeda640c*\")\n\n /* The right to perform an operation controlled by an extended access right. */\n\n and winlog.event_data.AccessMask : \"0x100\" and\n not winlog.event_data.SubjectUserName : (\n \"*$\", \"MSOL_*\", \"OpenDNS_Connector\", \"adconnect\", \"SyncADConnect\",\n \"SyncADConnectCM\", \"aadsync\", \"svcAzureADSync\", \"-\"\n )\n\n /* The Umbrella AD Connector uses the OpenDNS_Connector account to perform replication */\n", + "references": [ + "https://threathunterplaybook.com/notebooks/windows/06_credential_access/WIN-180815210510.html", + "https://threathunterplaybook.com/library/windows/active_directory_replication.html?highlight=dcsync#directory-replication-services-auditing", + "https://github.com/SigmaHQ/sigma/blob/master/rules/windows/builtin/security/win_ad_replication_non_machine_account.yml", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0027_windows_audit_directory_service_access.md", + "https://attack.stealthbits.com/privilege-escalation-using-mimikatz-dcsync", + "https://www.thehacker.recipes/ad/movement/credentials/dumping/dcsync" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessMask", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.Properties", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserName", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "9f962927-1a4f-45f3-a57b-287f2c7029c1", + "setup": "## Setup\n\nThe 'Audit Directory Service Access' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Access (Success,Failure)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Privilege Escalation", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.006", + "name": "DCSync", + "reference": "https://attack.mitre.org/techniques/T1003/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 113 + }, + "id": "9f962927-1a4f-45f3-a57b-287f2c7029c1_113", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/9f9a2a82-93a8-4b1a-8778-1780895626d4_210.json b/packages/security_detection_engine/kibana/security_rule/9f9a2a82-93a8-4b1a-8778-1780895626d4_210.json new file mode 100644 index 00000000000..18621c0401d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/9f9a2a82-93a8-4b1a-8778-1780895626d4_210.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies file permission modifications in common writable directories by a non-root user. Adversaries often drop files or payloads into a writable directory and change permissions prior to execution.", + "false_positives": [ + "Certain programs or applications may modify files or change ownership in writable directories. These can be exempted by username." + ], + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "File Permission Modification in Writable Directory", + "new_terms_fields": [ + "host.id", + "process.parent.executable", + "process.command_line" + ], + "query": "host.os.type:linux and event.category:process and event.type:start and\nprocess.name:(chattr or chgrp or chmod or chown) and process.working_directory:(/dev/shm or /tmp or /var/tmp) and\nnot process.parent.name:(apt-key or update-motd-updates-available)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "9f9a2a82-93a8-4b1a-8778-1780895626d4", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1222", + "name": "File and Directory Permissions Modification", + "reference": "https://attack.mitre.org/techniques/T1222/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 210 + }, + "id": "9f9a2a82-93a8-4b1a-8778-1780895626d4_210", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a00681e3-9ed6-447c-ab2c-be648821c622_309.json b/packages/security_detection_engine/kibana/security_rule/a00681e3-9ed6-447c-ab2c-be648821c622_309.json new file mode 100644 index 00000000000..0a4510b5fbd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a00681e3-9ed6-447c-ab2c-be648821c622_309.json @@ -0,0 +1,105 @@ +{ + "attributes": { + "author": [ + "Nick Jones", + "Elastic" + ], + "description": "An adversary with access to a compromised AWS service such as an EC2 instance, Lambda function, or other service may attempt to leverage the compromised service to access secrets in AWS Secrets Manager. This rule looks for the first time a specific user identity has programmatically retrieved a specific secret value from Secrets Manager using the `GetSecretValue` action. This rule assumes that AWS services such as Lambda functions and EC2 instances are setup with IAM role's assigned that have the necessary permissions to access the secrets in Secrets Manager. An adversary with access to a compromised AWS service such as an EC2 instance, Lambda function, or other service would rely on the compromised service's IAM role to access the secrets in Secrets Manager.", + "false_positives": [ + "Verify whether the user identity, user agent, and/or hostname should be using GetSecretString API for the specified SecretId. If known behavior is causing false positives, it can be exempted from the rule." + ], + "from": "now-60m", + "history_window_start": "now-15d", + "index": [ + "filebeat-*", + "logs-aws.cloudtrail*" + ], + "interval": "10m", + "language": "kuery", + "license": "Elastic License v2", + "name": "First Time Seen AWS Secret Value Accessed in Secrets Manager", + "new_terms_fields": [ + "user.id", + "aws.cloudtrail.request_parameters" + ], + "note": "## Triage and analysis\n\n### Investigating First Time Seen AWS Secret Value Accessed in Secrets Manager\n\nAWS Secrets Manager is a service that enables the replacement of hardcoded credentials in code, including passwords, with an API call to Secrets Manager to retrieve the secret programmatically.\n\nThis rule looks for the retrieval of credentials using `GetSecretValue` action in Secrets Manager programmatically. This is a [New Terms](https://www.elastic.co/guide/en/security/master/rules-ui-create.html#create-new-terms-rule) rule indicating this is the first time a specific user identity has successfuly retrieved a specific secret value from Secrets Manager within the last 15 days.\n\n#### Possible investigation steps\n\n- Identify the account and its role in the environment, and inspect the related policy.\n- Identify the applications that should use this account.\n- Investigate other alerts associated with the user account during the past 48 hours.\n- Investigate abnormal values in the `user_agent.original` field by comparing them with the intended and authorized usage and historical data. Suspicious user agent values include non-SDK, AWS CLI, custom user agents, etc.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences involving other users.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Considering the source IP address and geolocation of the user who issued the command:\n - Do they look normal for the calling user?\n - If the source is an EC2 IP address, is it associated with an EC2 instance in one of your accounts or is the source IP from an EC2 instance that's not under your control?\n - If it is an authorized EC2 instance, is the activity associated with normal behavior for the instance role or roles? Are there any other alerts or signs of suspicious activity involving this instance?\n- Review IAM permission policies for the user identity and specific secrets accessed.\n- Examine the request parameters. These might indicate the source of the program or the nature of its tasks.\n- If you suspect the account has been compromised, scope potentially compromised assets by tracking servers, services, and data accessed by the account in the last 24 hours.\n\n### False positive analysis\n\n- False positives may occur due to the intended usage of the service. Tuning is needed in order to have higher confidence. Consider adding exceptions \u2014 preferably with a combination of user agent and IP address conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Disable or limit the account during the investigation and response.\n- Identify the possible impact of the incident and prioritize accordingly; the following actions can help you gain context:\n - Identify the account role in the cloud environment.\n - Assess the criticality of affected services and servers.\n - Work with your IT team to identify and minimize the impact on users.\n - Identify if the attacker is moving laterally and compromising other accounts, servers, or services.\n - Identify any regulatory or legal ramifications related to this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Rotate secrets or delete API keys as needed to revoke the attacker's access to the environment. Work with your IT teams to minimize the impact on business operations during these actions.\n- Check if unauthorized new users were created, remove unauthorized new accounts, and request password resets for other IAM users.\n- Consider enabling multi-factor authentication for users.\n- Review the permissions assigned to the implicated user to ensure that the least privilege principle is being followed.\n- Implement security best practices [outlined](https://aws.amazon.com/premiumsupport/knowledge-center/security-best-practices/) by AWS.\n- Take the actions needed to return affected systems, data, or services to their normal operational levels.\n- Identify the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).", + "query": "event.dataset:aws.cloudtrail and event.provider:secretsmanager.amazonaws.com and\n event.action:GetSecretValue and event.outcome:success and aws.cloudtrail.user_identity.session_context.session_issuer.type: Role and\n not user_agent.name: (\"Chrome\" or \"Firefox\" or \"Safari\" or \"Edge\" or \"Brave\" or \"Opera\")\n", + "references": [ + "https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html", + "https://detectioninthe.cloud/ttps/credential_access/access_secret_in_secrets_manager/", + "https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum" + ], + "related_integrations": [ + { + "integration": "cloudtrail", + "package": "aws", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "aws.cloudtrail.user_identity.session_context.session_issuer.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": true, + "name": "user_agent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a00681e3-9ed6-447c-ab2c-be648821c622", + "setup": "The AWS Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: AWS", + "Data Source: Amazon Web Services", + "Tactic: Credential Access", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1528", + "name": "Steal Application Access Token", + "reference": "https://attack.mitre.org/techniques/T1528/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 309 + }, + "id": "a00681e3-9ed6-447c-ab2c-be648821c622_309", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a0ddb77b-0318-41f0-91e4-8c1b5528834f_3.json b/packages/security_detection_engine/kibana/security_rule/a0ddb77b-0318-41f0-91e4-8c1b5528834f_3.json new file mode 100644 index 00000000000..933ca77c2ec --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a0ddb77b-0318-41f0-91e4-8c1b5528834f_3.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule monitors for the execution of a system command with setuid or setgid capabilities via Python, followed by a uid or gid change to the root user. This sequence of events may indicate successful privilege escalation. Setuid (Set User ID) and setgid (Set Group ID) are Unix-like OS features that enable processes to run with elevated privileges, based on the file owner or group. Threat actors can exploit these attributes to escalate privileges to the privileges that are set on the binary that is being executed.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via Python cap_setuid", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.args : \"import os;os.set?id(0);os.system(*)\" and process.args : \"*python*\" and user.id != \"0\"]\n [process where host.os.type == \"linux\" and event.action in (\"uid_change\", \"gid_change\") and event.type == \"change\" and \n (user.id == \"0\" or group.id == \"0\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "group.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a0ddb77b-0318-41f0-91e4-8c1b5528834f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + }, + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.001", + "name": "Setuid and Setgid", + "reference": "https://attack.mitre.org/techniques/T1548/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 3 + }, + "id": "a0ddb77b-0318-41f0-91e4-8c1b5528834f_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a13167f1-eec2-4015-9631-1fee60406dcf_106.json b/packages/security_detection_engine/kibana/security_rule/a13167f1-eec2-4015-9631-1fee60406dcf_106.json new file mode 100644 index 00000000000..9954b8dc12c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a13167f1-eec2-4015-9631-1fee60406dcf_106.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies InstallUtil.exe making outbound network connections. This may indicate adversarial activity as InstallUtil is often leveraged by adversaries to execute code and evade detection.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "InstallUtil Process Making Network Connections", + "query": "/* the benefit of doing this as an eql sequence vs kql is this will limit to alerting only on the first network connection */\n\nsequence by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"installutil.exe\"]\n [network where host.os.type == \"windows\" and process.name : \"installutil.exe\" and network.direction : (\"outgoing\", \"egress\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a13167f1-eec2-4015-9631-1fee60406dcf", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.004", + "name": "InstallUtil", + "reference": "https://attack.mitre.org/techniques/T1218/004/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "a13167f1-eec2-4015-9631-1fee60406dcf_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a1329140-8de3-4445-9f87-908fb6d824f4_109.json b/packages/security_detection_engine/kibana/security_rule/a1329140-8de3-4445-9f87-908fb6d824f4_109.json new file mode 100644 index 00000000000..f9636cb757c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a1329140-8de3-4445-9f87-908fb6d824f4_109.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Malware or other files dropped or created on a system by an adversary may leave traces behind as to what was done within a network and how. Adversaries may remove these files over the course of an intrusion to keep their footprint low or remove them at the end as part of the post-intrusion cleanup process.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "File Deletion via Shred", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and process.name == \"shred\" and process.args in (\n \"-u\", \"--remove\", \"-z\", \"--zero\"\n) and not process.parent.name == \"logrotate\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "a1329140-8de3-4445-9f87-908fb6d824f4", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.004", + "name": "File Deletion", + "reference": "https://attack.mitre.org/techniques/T1070/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "a1329140-8de3-4445-9f87-908fb6d824f4_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a16612dd-b30e-4d41-86a0-ebe70974ec00_106.json b/packages/security_detection_engine/kibana/security_rule/a16612dd-b30e-4d41-86a0-ebe70974ec00_106.json new file mode 100644 index 00000000000..48a3c113d79 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a16612dd-b30e-4d41-86a0-ebe70974ec00_106.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of an LSASS process clone via PssCaptureSnapShot where the parent process is the initial LSASS process instance. This may indicate an attempt to evade detection and dump LSASS memory for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential LSASS Clone Creation via PssCaptureSnapShot", + "query": "process where host.os.type == \"windows\" and event.code:\"4688\" and\n process.executable : \"?:\\\\Windows\\\\System32\\\\lsass.exe\" and\n process.parent.executable : \"?:\\\\Windows\\\\System32\\\\lsass.exe\"\n", + "references": [ + "https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/", + "https://medium.com/@Achilles8284/the-birth-of-a-process-part-2-97c6fb9c42a2" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "a16612dd-b30e-4d41-86a0-ebe70974ec00", + "setup": "## Setup\n\nThis is meant to run only on datasources using Windows security event 4688 that captures the process clone creation.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "a16612dd-b30e-4d41-86a0-ebe70974ec00_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a1699af0-8e1e-4ed0-8ec1-89783538a061_6.json b/packages/security_detection_engine/kibana/security_rule/a1699af0-8e1e-4ed0-8ec1-89783538a061_6.json new file mode 100644 index 00000000000..3879cc54c22 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a1699af0-8e1e-4ed0-8ec1-89783538a061_6.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects changes to the registry that indicates the install of a new Windows Subsystem for Linux distribution by name. Adversaries may enable and use WSL for Linux to avoid detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Subsystem for Linux Distribution Installed", + "note": "## Triage and analysis\n\n### Investigating Windows Subsystem for Linux Distribution Installed\n\nThe Windows Subsystem for Linux (WSL) lets developers install a Linux distribution (such as Ubuntu, OpenSUSE, Kali, Debian, Arch Linux, etc) and use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup. Attackers may abuse WSL to avoid security protections on a Windows host and perform a wide range of attacks.\n\nThis rule identifies the installation of a new Windows Subsystem for Linux distribution via registry events.\n\n### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Examine which distribution was installed. Some distributions such as Kali Linux can facilitate the compromise of the environment.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate that the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This is a dual-use tool, meaning its usage is not inherently malicious. Analysts can dismiss the alert if the administrator is aware of the activity, no other suspicious activity was identified, and the WSL distribution is homologated and approved in the environment.\n\n### Related Rules\n\n- Host Files System Changes via Windows Subsystem for Linux - e88d1fe9-b2f4-48d4-bace-a026dc745d4b\n- Execution via Windows Subsystem for Linux - db7dbad5-08d2-4d25-b9b1-d3a1e4a15efd\n- Suspicious Execution via Windows Subsystem for Linux - 3e0eeb75-16e8-4f2f-9826-62461ca128b7\n- Windows Subsystem for Linux Enabled via Dism Utility - e2e0537d-7d8f-4910-a11d-559bcf61295a\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and\n registry.path : \n (\"HK*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Lxss\\\\*\\\\PackageFamilyName\",\n \"\\\\REGISTRY\\\\*\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Lxss\\\\*\\\\PackageFamilyName\")\n", + "references": [ + "https://learn.microsoft.com/en-us/windows/wsl/wsl-config" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a1699af0-8e1e-4ed0-8ec1-89783538a061", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + }, + { + "id": "T1202", + "name": "Indirect Command Execution", + "reference": "https://attack.mitre.org/techniques/T1202/" + } + ] + } + ], + "timeline_id": "3e47ef71-ebfc-4520-975c-cb27fc090799", + "timeline_title": "Comprehensive Registry Timeline", + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "a1699af0-8e1e-4ed0-8ec1-89783538a061_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a198fbbd-9413-45ec-a269-47ae4ccf59ce_3.json b/packages/security_detection_engine/kibana/security_rule/a198fbbd-9413-45ec-a269-47ae4ccf59ce_3.json new file mode 100644 index 00000000000..13efd71f65e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a198fbbd-9413-45ec-a269-47ae4ccf59ce_3.json @@ -0,0 +1,53 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule helps you test and practice using alerts with Elastic Security as you get set up. It\u2019s not a sign of threat activity.", + "enabled": false, + "false_positives": [ + "This rule is not looking for threat activity. Disable the rule if you're already familiar with alerts." + ], + "from": "now-30m", + "index": [ + "auditbeat-*", + "filebeat-*", + "logs-*", + "winlogbeat-*" + ], + "interval": "24h", + "language": "kuery", + "license": "Elastic License v2", + "max_signals": 1, + "name": "My First Rule", + "note": "This is a test alert.\n\nThis alert does not show threat activity. Elastic created this alert to help you understand how alerts work.\n\nFor normal rules, the Investigation Guide will help analysts investigate alerts.\n\nThis alert will show once every 24 hours for each host. It is safe to disable this rule.\n", + "query": "event.kind:event\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-rules.html" + ], + "required_fields": [ + { + "ecs": true, + "name": "event.kind", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "a198fbbd-9413-45ec-a269-47ae4ccf59ce", + "severity": "low", + "tags": [ + "Use Case: Guided Onboarding" + ], + "threshold": { + "field": [ + "host.name" + ], + "value": 1 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 3 + }, + "id": "a198fbbd-9413-45ec-a269-47ae4ccf59ce_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a1a0375f-22c2-48c0-81a4-7c2d11cc6856_108.json b/packages/security_detection_engine/kibana/security_rule/a1a0375f-22c2-48c0-81a4-7c2d11cc6856_108.json new file mode 100644 index 00000000000..f397cb8f6a6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a1a0375f-22c2-48c0-81a4-7c2d11cc6856_108.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a shell process with suspicious arguments which may be indicative of reverse shell activity.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell Activity via Terminal", + "note": "## Triage and analysis\n\n### Investigating Potential Reverse Shell Activity via Terminal\n\nA reverse shell is a mechanism that's abused to connect back to an attacker-controlled system. It effectively redirects the system's input and output and delivers a fully functional remote shell to the attacker. Even private systems are vulnerable since the connection is outgoing. This activity is typically the result of vulnerability exploitation, malware infection, or penetration testing.\n\nThis rule identifies commands that are potentially related to reverse shell activities using shell applications.\n\n#### Possible investigation steps\n\n- Examine the command line and extract the target domain or IP address information.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - Scope other potentially compromised hosts in your environment by mapping hosts that also communicated with the domain or IP address.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, file modifications, and any spawned child processes.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Take actions to terminate processes and connections used by the attacker.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where event.type in (\"start\", \"process_started\") and\n process.name in (\"sh\", \"bash\", \"zsh\", \"dash\", \"zmodload\") and\n process.args : (\"*/dev/tcp/*\", \"*/dev/udp/*\", \"*zsh/net/tcp*\", \"*zsh/net/udp*\") and\n\n /* noisy FPs */\n not (process.parent.name : \"timeout\" and process.executable : \"/var/lib/docker/overlay*\") and\n not process.command_line : (\n \"*/dev/tcp/sirh_db/*\", \"*/dev/tcp/remoteiot.com/*\", \"*dev/tcp/elk.stag.one/*\", \"*dev/tcp/kafka/*\",\n \"*/dev/tcp/$0/$1*\", \"*/dev/tcp/127.*\", \"*/dev/udp/127.*\", \"*/dev/tcp/localhost/*\", \"*/dev/tcp/itom-vault/*\") and\n not process.parent.command_line : \"runc init\"\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md", + "https://github.com/WangYihang/Reverse-Shell-Manager", + "https://www.netsparker.com/blog/web-security/understanding-reverse-shells/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "a1a0375f-22c2-48c0-81a4-7c2d11cc6856", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "a1a0375f-22c2-48c0-81a4-7c2d11cc6856_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4.json b/packages/security_detection_engine/kibana/security_rule/a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4.json new file mode 100644 index 00000000000..82b9cdbc238 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to create a new group. Attackers may create new groups to establish persistence on a system.", + "from": "now-9m", + "index": [ + "logs-system.auth-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux Group Creation", + "note": "## Triage and analysis\n\n### Investigating Linux Group Creation\n\nThe `groupadd` and `addgroup` commands are used to create new user groups in Linux-based operating systems.\n\nAttackers may create new groups to maintain access to victim systems or escalate privileges by assigning a compromised account to a privileged group.\n\nThis rule identifies the usages of `groupadd` and `addgroup` to create new groups.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Investigate whether the group was created succesfully.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific Group\",\"query\":\"SELECT * FROM groups WHERE groupname = {{group.name}}\"}}\n- Identify if a user account was added to this group after creation.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- Group creation is a common administrative task, so there is a high chance of the activity being legitimate. Before investigating further, verify that this activity is not benign.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Delete the created group and, in case an account was added to this group, delete the account.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "iam where host.os.type == \"linux\" and (event.type == \"group\" and event.type == \"creation\") and\nprocess.name in (\"groupadd\", \"addgroup\") and group.name != null\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "group.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f", + "setup": "## Setup\n\nThis rule requires data coming in from Filebeat.\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the \u201cFilebeat System Module\u201d to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "a1c2589e-0c8c-4ca8-9eb6-f83c4bbdbe8f_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a22a09c2-2162-4df0-a356-9aacbeb56a04_108.json b/packages/security_detection_engine/kibana/security_rule/a22a09c2-2162-4df0-a356-9aacbeb56a04_108.json new file mode 100644 index 00000000000..bbedecdec44 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a22a09c2-2162-4df0-a356-9aacbeb56a04_108.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when a user enables DNS-over-HTTPS. This can be used to hide internet activity or the process of exfiltrating data. With this enabled, an organization will lose visibility into data such as query type, response, and originating IP, which are used to determine bad actors.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "DNS-over-HTTPS Enabled via Registry", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n (registry.path : \"*\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Edge\\\\BuiltInDnsClientEnabled\" and\n registry.data.strings : \"1\") or\n (registry.path : \"*\\\\SOFTWARE\\\\Google\\\\Chrome\\\\DnsOverHttpsMode\" and\n registry.data.strings : \"secure\") or\n (registry.path : \"*\\\\SOFTWARE\\\\Policies\\\\Mozilla\\\\Firefox\\\\DNSOverHTTPS\" and\n registry.data.strings : \"1\")\n", + "references": [ + "https://www.tenforums.com/tutorials/151318-how-enable-disable-dns-over-https-doh-microsoft-edge.html", + "https://chromeenterprise.google/policies/?policy=DnsOverHttpsMode" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "a22a09c2-2162-4df0-a356-9aacbeb56a04", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "a22a09c2-2162-4df0-a356-9aacbeb56a04_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a2d04374-187c-4fd9-b513-3ad4e7fdd67a_7.json b/packages/security_detection_engine/kibana/security_rule/a2d04374-187c-4fd9-b513-3ad4e7fdd67a_7.json new file mode 100644 index 00000000000..a11962b556e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a2d04374-187c-4fd9-b513-3ad4e7fdd67a_7.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that can be used to collect data from mailboxes. Adversaries may target user email to collect sensitive information.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Mailbox Collection Script", + "note": "## Triage and analysis\n\n### Investigating PowerShell Mailbox Collection Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nEmail mailboxes and their information can be valuable assets for attackers. Company mailboxes often contain sensitive information such as login credentials, intellectual property, financial data, and personal information, making them high-value targets for malicious actors.\n\nThis rule identifies scripts that contains methods and classes that can be abused to collect emails from local and remote mailboxes.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Determine whether the script was executed and capture relevant information, such as arguments that reveal intent or are indicators of compromise (IoCs).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Determine whether the script stores the captured data locally.\n- Investigate whether the script contains exfiltration capabilities and identify the exfiltration server.\n - Assess network data to determine if the host communicated with the exfiltration server.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and it is done with proper approval.\n\n### Related rules\n\n- Exporting Exchange Mailbox via PowerShell - 6aace640-e631-4870-ba8e-5fdda09325db\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- If the involved host is not the Exchange server, isolate the host to prevent further post-compromise behavior.\n- Prioritize cases that involve personally identifiable information (PII) or other classified data.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n (\n powershell.file.script_block_text : (\n \"Microsoft.Office.Interop.Outlook\" or\n \"Interop.Outlook.olDefaultFolders\" or\n \"::olFolderInBox\"\n ) or\n powershell.file.script_block_text : (\n \"Microsoft.Exchange.WebServices.Data.Folder\" or\n \"Microsoft.Exchange.WebServices.Data.FileAttachment\"\n )\n ) and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://github.com/dafthack/MailSniper/blob/master/MailSniper.ps1", + "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/blob/master/apt29/Archive/CALDERA_DIY/evals/payloads/stepSeventeen_email.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a2d04374-187c-4fd9-b513-3ad4e7fdd67a", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Data Source: PowerShell Logs", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1114", + "name": "Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/", + "subtechnique": [ + { + "id": "T1114.001", + "name": "Local Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/001/" + }, + { + "id": "T1114.002", + "name": "Remote Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 7 + }, + "id": "a2d04374-187c-4fd9-b513-3ad4e7fdd67a_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a3ea12f3-0d4e-4667-8b44-4230c63f3c75_107.json b/packages/security_detection_engine/kibana/security_rule/a3ea12f3-0d4e-4667-8b44-4230c63f3c75_107.json new file mode 100644 index 00000000000..648878be1ca --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a3ea12f3-0d4e-4667-8b44-4230c63f3c75_107.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation, change, or deletion of a DLL module within a Windows SxS local folder. Adversaries may abuse shared modules to execute malicious payloads by instructing the Windows module loader to load DLLs from arbitrary local paths.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution via local SxS Shared Module", + "note": "## Triage and analysis\n\nThe SxS DotLocal folder is a legitimate feature that can be abused to hijack standard modules loading order by forcing an executable on the same application.exe.local folder to load a malicious DLL module from the same directory.\n", + "query": "file where host.os.type == \"windows\" and file.extension : \"dll\" and file.path : \"C:\\\\*\\\\*.exe.local\\\\*.dll\"\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-redirection" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a3ea12f3-0d4e-4667-8b44-4230c63f3c75", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1129", + "name": "Shared Modules", + "reference": "https://attack.mitre.org/techniques/T1129/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "a3ea12f3-0d4e-4667-8b44-4230c63f3c75_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a577e524-c2ee-47bd-9c5b-e917d01d3276_2.json b/packages/security_detection_engine/kibana/security_rule/a577e524-c2ee-47bd-9c5b-e917d01d3276_2.json new file mode 100644 index 00000000000..86defd7fae5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a577e524-c2ee-47bd-9c5b-e917d01d3276_2.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies instances where a binary is granted the CAP_SYS_ADMIN capability. In Linux, the CAP_SYS_ADMIN capability is a powerful and broad capability that allows a process to perform a range of system administration operations, such as mounting and unmounting filesystems, configuring network interfaces, and accessing hardware devices. Attackers may leverage a misconfiguration for exploitation in order to escalate their privileges to root. The rule identifies previously unknown processes executing with CAP_SYS_ADMIN capabilities through the use of the new terms rule type.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "CAP_SYS_ADMIN Assigned to Binary", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "event.category:\"process\" and host.os.type:\"linux\" and event.type:\"start\" and event.action:\"exec\" and process.name:* and\n(process.thread.capabilities.effective:\"CAP_SYS_ADMIN\" or process.thread.capabilities.permitted:\"CAP_SYS_ADMIN\") and\nnot user.id:\"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "a577e524-c2ee-47bd-9c5b-e917d01d3276", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 2 + }, + "id": "a577e524-c2ee-47bd-9c5b-e917d01d3276_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a5eb21b7-13cc-4b94-9fe2-29bb2914e037_6.json b/packages/security_detection_engine/kibana/security_rule/a5eb21b7-13cc-4b94-9fe2-29bb2914e037_6.json new file mode 100644 index 00000000000..fb46b1f60fa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a5eb21b7-13cc-4b94-9fe2-29bb2914e037_6.json @@ -0,0 +1,138 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule identifies suspicious network traffic patterns associated with UDP reverse shell activity. This activity consists of a sample of an execve, socket and connect syscall executed by the same process, where the auditd.data.a0-1 indicate a UDP connection, ending with an egress connection event. An attacker may establish a Linux UDP reverse shell to bypass traditional firewall restrictions and gain remote access to a target system covertly.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via UDP", + "query": "sample by host.id, process.pid, process.parent.pid\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"executed\" and process.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"perl\", \"python*\", \"nc\", \"ncat\", \"netcat\", \"php*\",\n \"ruby\", \"openssl\", \"awk\", \"telnet\", \"lua*\", \"socat\"\n )]\n [process where host.os.type == \"linux\" and auditd.data.syscall == \"socket\" and process.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"perl\", \"python*\", \"nc\", \"ncat\", \"netcat\", \"php*\",\n \"ruby\", \"openssl\", \"awk\", \"telnet\", \"lua*\", \"socat\"\n ) and auditd.data.a1 == \"2\"]\n [network where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"connected-to\" and\n process.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"perl\", \"python*\", \"nc\", \"ncat\", \"netcat\", \"php*\",\n \"ruby\", \"openssl\", \"awk\", \"telnet\", \"lua*\", \"socat\"\n ) and network.direction == \"egress\" and destination.ip != null and\n not cidrmatch(destination.ip, \"127.0.0.0/8\", \"169.254.0.0/16\", \"224.0.0.0/4\", \"::1\")]\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a1", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "a5eb21b7-13cc-4b94-9fe2-29bb2914e037", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Auditbeat\n- Auditd Manager\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule no additional audit rules are required to be added to the integration.\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "a5eb21b7-13cc-4b94-9fe2-29bb2914e037_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a61809f3-fb5b-465c-8bff-23a8a068ac60_6.json b/packages/security_detection_engine/kibana/security_rule/a61809f3-fb5b-465c-8bff-23a8a068ac60_6.json new file mode 100644 index 00000000000..0a679843b0b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a61809f3-fb5b-465c-8bff-23a8a068ac60_6.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule is triggered when a Windows registry indicator from the Threat Intel Filebeat module or integrations has a match against an event that contains registry data.", + "from": "now-65m", + "index": [ + "auditbeat-*", + "endgame-*", + "filebeat-*", + "logs-*", + "winlogbeat-*" + ], + "interval": "1h", + "language": "kuery", + "license": "Elastic License v2", + "name": "Threat Intel Windows Registry Indicator Match", + "note": "## Triage and Analysis\n\n### Investigating Threat Intel Windows Registry Indicator Match\n\nThreat Intel indicator match rules allow matching from a local observation, such as an endpoint event that records a file hash with an entry of a file hash stored within the Threat Intel integrations index.\n\nMatches are based on threat intelligence data that's been ingested during the last 30 days. Some integrations don't place expiration dates on their threat indicators, so we strongly recommend validating ingested threat indicators and reviewing match results. When reviewing match results, check associated activity to determine whether the event requires additional investigation.\n\nThis rule is triggered when a Windows registry indicator from the Threat Intel Filebeat module or a threat intelligence integration matches against an event that contains registry data.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Check related threat reports to gain context about the registry indicator of compromise (IoC) and to understand if it's a system-native mechanism abused for persistence, to store data, to disable security mechanisms, etc. Use this information to define the appropriate triage and respond steps.\n- Identify the process responsible for the registry operation and investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Retrieve the involved process executable and examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Using the data collected through the analysis, scope users targeted and other machines infected in the environment.\n\n### False Positive Analysis\n\n- Adversaries can leverage dual-use registry mechanisms that are commonly used by normal applications. These registry keys can be added into indicator lists creating the potential for false positives.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry.path:*\n", + "references": [ + "https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-threatintel.html", + "https://www.elastic.co/guide/en/security/master/es-threat-intel-integrations.html", + "https://www.elastic.co/security/tip" + ], + "required_fields": [ + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 99, + "rule_id": "a61809f3-fb5b-465c-8bff-23a8a068ac60", + "setup": "## Setup\n\nThis rule needs threat intelligence indicators to work.\nThreat intelligence indicators can be collected using an [Elastic Agent integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#agent-ti-integration),\nthe [Threat Intel module](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#ti-mod-integration),\nor a [custom integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#custom-ti-integration).\n\nMore information can be found [here](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html).\n", + "severity": "critical", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Rule Type: Indicator Match" + ], + "threat_filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.category", + "negate": false, + "params": { + "query": "threat" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.category": "threat" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.kind", + "negate": false, + "params": { + "query": "enrichment" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.kind": "enrichment" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.type", + "negate": false, + "params": { + "query": "indicator" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.type": "indicator" + } + } + } + ], + "threat_index": [ + "filebeat-*", + "logs-ti_*" + ], + "threat_indicator_path": "threat.indicator", + "threat_language": "kuery", + "threat_mapping": [ + { + "entries": [ + { + "field": "registry.path", + "type": "mapping", + "value": "threat.indicator.registry.path" + } + ] + } + ], + "threat_query": "@timestamp >= \"now-30d/d\" and event.module:(threatintel or ti_*) and threat.indicator.registry.path:* and not labels.is_ioc_transform_source:\"true\"", + "timeline_id": "495ad7a7-316e-4544-8a0f-9c098daee76e", + "timeline_title": "Generic Threat Match Timeline", + "timestamp_override": "event.ingested", + "type": "threat_match", + "version": 6 + }, + "id": "a61809f3-fb5b-465c-8bff-23a8a068ac60_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a624863f-a70d-417f-a7d2-7a404638d47f_111.json b/packages/security_detection_engine/kibana/security_rule/a624863f-a70d-417f-a7d2-7a404638d47f_111.json new file mode 100644 index 00000000000..2f7e92ec9f1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a624863f-a70d-417f-a7d2-7a404638d47f_111.json @@ -0,0 +1,151 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious child processes of frequently targeted Microsoft Office applications (Word, PowerPoint, Excel). These child processes are often launched during exploitation of Office applications or from documents with malicious macros.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious MS Office Child Process", + "note": "## Triage and analysis\n\n### Investigating Suspicious MS Office Child Process\n\nMicrosoft Office (MS Office) is a suite of applications designed to help with productivity and completing common tasks on a computer. You can create and edit documents containing text and images, work with data in spreadsheets and databases, and create presentations and posters. As it is some of the most-used software across companies, MS Office is frequently targeted for initial access. It also has a wide variety of capabilities that attackers can take advantage of.\n\nThis rule looks for suspicious processes spawned by MS Office programs. This is generally the result of the execution of malicious documents.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve MS Office documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\n \"eqnedt32.exe\", \"excel.exe\", \"fltldr.exe\", \"msaccess.exe\",\n \"mspub.exe\", \"powerpnt.exe\", \"winword.exe\", \"outlook.exe\"\n ) and\n process.name : (\n \"Microsoft.Workflow.Compiler.exe\", \"arp.exe\", \"atbroker.exe\", \"bginfo.exe\", \"bitsadmin.exe\", \"cdb.exe\",\n \"certutil.exe\", \"cmd.exe\", \"cmstp.exe\", \"control.exe\", \"cscript.exe\", \"csi.exe\", \"dnx.exe\", \"dsget.exe\",\n \"dsquery.exe\", \"forfiles.exe\", \"fsi.exe\", \"ftp.exe\", \"gpresult.exe\", \"hostname.exe\", \"ieexec.exe\", \"iexpress.exe\",\n \"installutil.exe\", \"ipconfig.exe\", \"mshta.exe\", \"msxsl.exe\", \"nbtstat.exe\", \"net.exe\", \"net1.exe\", \"netsh.exe\",\n \"netstat.exe\", \"nltest.exe\", \"odbcconf.exe\", \"ping.exe\", \"powershell.exe\", \"pwsh.exe\", \"qprocess.exe\",\n \"quser.exe\", \"qwinsta.exe\", \"rcsi.exe\", \"reg.exe\", \"regasm.exe\", \"regsvcs.exe\", \"regsvr32.exe\", \"sc.exe\",\n \"schtasks.exe\", \"systeminfo.exe\", \"tasklist.exe\", \"tracert.exe\", \"whoami.exe\", \"wmic.exe\", \"wscript.exe\",\n \"xwizard.exe\", \"explorer.exe\", \"rundll32.exe\", \"hh.exe\", \"msdt.exe\"\n ) and\n not (\n process.parent.name : \"outlook.exe\" and\n process.name : \"rundll32.exe\" and\n process.args : \"shell32.dll,Control_RunDLL\" and\n process.args : \"srchadmin.dll\"\n )\n", + "references": [ + "https://www.elastic.co/blog/vulnerability-summary-follina" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a624863f-a70d-417f-a7d2-7a404638d47f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "a624863f-a70d-417f-a7d2-7a404638d47f_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a6bf4dd4-743e-4da8-8c03-3ebd753a6c90_107.json b/packages/security_detection_engine/kibana/security_rule/a6bf4dd4-743e-4da8-8c03-3ebd753a6c90_107.json new file mode 100644 index 00000000000..4399f166d26 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a6bf4dd4-743e-4da8-8c03-3ebd753a6c90_107.json @@ -0,0 +1,83 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of the Event Monitor Daemon (emond) rules. Adversaries may abuse this service by writing a rule to execute commands when a defined event occurs, such as system start up or user authentication.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Emond Rules Creation or Modification", + "query": "file where host.os.type == \"macos\" and event.type != \"deletion\" and\n file.path : (\"/private/etc/emond.d/rules/*.plist\", \"/etc/emon.d/rules/*.plist\", \"/private/var/db/emondClients/*\")\n", + "references": [ + "https://www.xorrior.com/emond-persistence/", + "https://www.sentinelone.com/blog/how-malware-persists-on-macos/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a6bf4dd4-743e-4da8-8c03-3ebd753a6c90", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.014", + "name": "Emond", + "reference": "https://attack.mitre.org/techniques/T1546/014/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "a6bf4dd4-743e-4da8-8c03-3ebd753a6c90_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a74c60cb-70ee-4629-a127-608ead14ebf1_3.json b/packages/security_detection_engine/kibana/security_rule/a74c60cb-70ee-4629-a127-608ead14ebf1_3.json new file mode 100644 index 00000000000..cea5593b47e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a74c60cb-70ee-4629-a127-608ead14ebf1_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected unusually high mean of RDP session duration. Long RDP sessions can be used to evade detection mechanisms via session persistence, and might be used to perform tasks such as lateral movement, that might require uninterrupted access to a compromised machine.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_mean_rdp_session_duration", + "name": "High Mean of RDP Session Duration", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "a74c60cb-70ee-4629-a127-608ead14ebf1", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "a74c60cb-70ee-4629-a127-608ead14ebf1_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a7ccae7b-9d2c-44b2-a061-98e5946971fa_110.json b/packages/security_detection_engine/kibana/security_rule/a7ccae7b-9d2c-44b2-a061-98e5946971fa_110.json new file mode 100644 index 00000000000..9c13032025c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a7ccae7b-9d2c-44b2-a061-98e5946971fa_110.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to exploit privilege escalation vulnerabilities related to the Print Spooler service including CVE-2020-1048 and CVE-2020-1337.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Print Spooler SPL File Created", + "note": "## Triage and analysis\n\n### Investigating Suspicious Print Spooler SPL File Created\n\nPrint Spooler is a Windows service enabled by default in all Windows clients and servers. The service manages print jobs by loading printer drivers, receiving files to be printed, queuing them, scheduling, etc.\n\nThe Print Spooler service has some known vulnerabilities that attackers can abuse to escalate privileges to SYSTEM, like CVE-2020-1048 and CVE-2020-1337. This rule looks for unusual processes writing SPL files to the location `?:\\Windows\\System32\\spool\\PRINTERS\\`, which is an essential step in exploiting these vulnerabilities.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of process executable and file conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Ensure that the machine has the latest security updates and is not running legacy Windows versions.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.extension : \"spl\" and\n file.path : \"?:\\\\Windows\\\\System32\\\\spool\\\\PRINTERS\\\\*\" and\n not process.name : (\"spoolsv.exe\",\n \"printfilterpipelinesvc.exe\",\n \"PrintIsolationHost.exe\",\n \"splwow64.exe\",\n \"msiexec.exe\",\n \"poqexec.exe\",\n \"System\") and\n not user.id : \"S-1-5-18\" and\n not process.executable :\n (\"?:\\\\Windows\\\\System32\\\\mmc.exe\",\n \"\\\\Device\\\\Mup\\\\*.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\System32\\\\mmc.exe\",\n \"?:\\\\Windows\\\\System32\\\\printui.exe\",\n \"?:\\\\Windows\\\\System32\\\\mstsc.exe\",\n \"?:\\\\Windows\\\\System32\\\\spool\\\\*.exe\",\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\PROGRA~1\\\\*.exe\",\n \"?:\\\\PROGRA~2\\\\*.exe\",\n \"?:\\\\Windows\\\\System32\\\\rundll32.exe\")\n", + "references": [ + "https://safebreach.com/Post/How-we-bypassed-CVE-2020-1048-Patch-and-got-CVE-2020-1337" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a7ccae7b-9d2c-44b2-a061-98e5946971fa", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "a7ccae7b-9d2c-44b2-a061-98e5946971fa_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a7e7bfa3-088e-4f13-b29e-3986e0e756b8_109.json b/packages/security_detection_engine/kibana/security_rule/a7e7bfa3-088e-4f13-b29e-3986e0e756b8_109.json new file mode 100644 index 00000000000..ca4258025a0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a7e7bfa3-088e-4f13-b29e-3986e0e756b8_109.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to export a registry hive which may contain credentials using the Windows reg.exe tool.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Credential Acquisition via Registry Hive Dumping", + "note": "## Triage and analysis\n\n### Investigating Credential Acquisition via Registry Hive Dumping\n\nDumping registry hives is a common way to access credential information as some hives store credential material.\n\nFor example, the SAM hive stores locally cached credentials (SAM Secrets), and the SECURITY hive stores domain cached credentials (LSA secrets).\n\nDumping these hives in combination with the SYSTEM hive enables the attacker to decrypt these secrets.\n\nThis rule identifies the usage of `reg.exe` to dump SECURITY and/or SAM hives, which potentially indicates the compromise of the credentials stored in the host.\n\n#### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate if the credential material was exfiltrated or processed locally by other tools.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (e.g., 4624) to the target host.\n\n### False positive analysis\n\n- Administrators can export registry hives for backup purposes using command line tools like `reg.exe`. Check whether the user is legitamitely performing this kind of activity.\n\n### Related rules\n\n- Registry Hive File Creation via SMB - a4c7473a-5cb4-4bc1-9d06-e4a75adbc494\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system and restore compromised files to clean versions.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (?process.pe.original_file_name == \"reg.exe\" or process.name : \"reg.exe\") and\n process.args : (\"save\", \"export\") and\n process.args : (\"hklm\\\\sam\", \"hklm\\\\security\")\n", + "references": [ + "https://medium.com/threatpunter/detecting-attempts-to-steal-passwords-from-the-registry-7512674487f8", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "a7e7bfa3-088e-4f13-b29e-3986e0e756b8", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + }, + { + "id": "T1003.004", + "name": "LSA Secrets", + "reference": "https://attack.mitre.org/techniques/T1003/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "a7e7bfa3-088e-4f13-b29e-3986e0e756b8_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a8d35ca0-ad8d-48a9-9f6c-553622dca61a_3.json b/packages/security_detection_engine/kibana/security_rule/a8d35ca0-ad8d-48a9-9f6c-553622dca61a_3.json new file mode 100644 index 00000000000..70cf8718c4a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a8d35ca0-ad8d-48a9-9f6c-553622dca61a_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected unusually high variance of RDP session duration. Long RDP sessions can be used to evade detection mechanisms via session persistence, and might be used to perform tasks such as lateral movement, that might require uninterrupted access to a compromised machine.", + "from": "now-12h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_var_rdp_session_duration", + "name": "High Variance in RDP Session Duration", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "a8d35ca0-ad8d-48a9-9f6c-553622dca61a", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows RDP process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Before enabling the Anomaly Detection jobs, confirm that the Pivot Transform asset is installed and actively gathering data in the destination index `ml-rdp-lmd`.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your transformed RDP process data i.e.`ml-rdp-lmd`.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "a8d35ca0-ad8d-48a9-9f6c-553622dca61a_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105.json b/packages/security_detection_engine/kibana/security_rule/a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105.json new file mode 100644 index 00000000000..c330677b483 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a Safe Link policy is disabled in Microsoft 365. Safe Link policies for Office applications extend phishing protection to documents that contain hyperlinks, even after they have been delivered to a user.", + "false_positives": [ + "Disabling safe links may be done by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Safe Link Policy Disabled", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Disable-SafeLinksRule\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/disable-safelinksrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/atp-safe-links?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Identity and Access Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "a989fa1b-9a11-4dd8-a3e9-f0de9c6eb5f2_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/a9b05c3b-b304-4bf9-970d-acdfaef2944c_107.json b/packages/security_detection_engine/kibana/security_rule/a9b05c3b-b304-4bf9-970d-acdfaef2944c_107.json new file mode 100644 index 00000000000..a736075a2b1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/a9b05c3b-b304-4bf9-970d-acdfaef2944c_107.json @@ -0,0 +1,119 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a persistence mechanism that utilizes the NtSetValueKey native API to create a hidden (null terminated) registry key. An adversary may use this method to hide from system utilities such as the Registry Editor (regedit).", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Hidden Run Key Detected", + "query": "/* Registry Path ends with backslash */\nregistry where host.os.type == \"windows\" and /* length(registry.data.strings) > 0 and */\n registry.path : (\"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"HKU\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"HKLM\\\\Software\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\\",\n \"HKU\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer\\\\Run\\\\\")\n", + "references": [ + "https://github.com/outflanknl/SharpHide", + "https://github.com/ewhitehats/InvisiblePersistence/blob/master/InvisibleRegValues_Whitepaper.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "a9b05c3b-b304-4bf9-970d-acdfaef2944c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "a9b05c3b-b304-4bf9-970d-acdfaef2944c_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/aa895aea-b69c-4411-b110-8d7599634b30_110.json b/packages/security_detection_engine/kibana/security_rule/aa895aea-b69c-4411-b110-8d7599634b30_110.json new file mode 100644 index 00000000000..295377c13f7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/aa895aea-b69c-4411-b110-8d7599634b30_110.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the deletion of sensitive Linux system logs. This may indicate an attempt to evade detection or destroy forensic evidence on a system.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "System Log File Deletion", + "query": "file where host.os.type == \"linux\" and event.type == \"deletion\" and\n file.path :\n (\n \"/var/run/utmp\",\n \"/var/log/wtmp\",\n \"/var/log/btmp\",\n \"/var/log/lastlog\",\n \"/var/log/faillog\",\n \"/var/log/syslog\",\n \"/var/log/messages\",\n \"/var/log/secure\",\n \"/var/log/auth.log\",\n \"/var/log/boot.log\",\n \"/var/log/kern.log\"\n ) and\n not process.name in (\"gzip\", \"executor\", \"dockerd\")\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2020/11/live-off-the-land-an-overview-of-unc1945.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "aa895aea-b69c-4411-b110-8d7599634b30", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.002", + "name": "Clear Linux or Mac System Logs", + "reference": "https://attack.mitre.org/techniques/T1070/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "aa895aea-b69c-4411-b110-8d7599634b30_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/aa9a274d-6b53-424d-ac5e-cb8ca4251650_110.json b/packages/security_detection_engine/kibana/security_rule/aa9a274d-6b53-424d-ac5e-cb8ca4251650_110.json new file mode 100644 index 00000000000..665c0d488be --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/aa9a274d-6b53-424d-ac5e-cb8ca4251650_110.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies remote execution of Windows services over remote procedure call (RPC). This could be indicative of lateral movement, but will be noisy if commonly done by administrators.\"", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remotely Started Services via RPC", + "note": "## Triage and analysis\n\n### Investigating Remotely Started Services via RPC\n\nThe Service Control Manager Remote Protocol is a client/server protocol used for configuring and controlling service programs running on a remote computer. A remote service management session begins with the client initiating the connection request to the server. If the server grants the request, the connection is established. The client can then make multiple requests to modify, query the configuration, or start and stop services on the server by using the same session until the session is terminated.\n\nThis rule detects the remote creation or start of a service by correlating a `services.exe` network connection and the spawn of a child process.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Review login events (e.g., 4624) in the alert timeframe to identify the account used to perform this action. Use the `source.address` field to help identify the source system.\n- Review network events from the source system using the source port identified on the alert and try to identify the program used to initiate the action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- Remote management software like SCCM may trigger this rule. If noisy on your environment, consider adding exceptions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence with maxspan=1s\n [network where host.os.type == \"windows\" and process.name : \"services.exe\" and\n network.direction : (\"incoming\", \"ingress\") and network.transport == \"tcp\" and\n source.port >= 49152 and destination.port >= 49152 and source.ip != \"127.0.0.1\" and source.ip != \"::1\"\n ] by host.id, process.entity_id\n [process where host.os.type == \"windows\" and \n event.type == \"start\" and process.parent.name : \"services.exe\" and\n not (process.executable : \"?:\\\\Windows\\\\System32\\\\msiexec.exe\" and process.args : \"/V\") and\n not process.executable : (\n \"?:\\\\Pella Corporation\\\\OSCToGPAutoService\\\\OSCToGPAutoSvc.exe\",\n \"?:\\\\Pella Corporation\\\\Pella Order Management\\\\GPAutoSvc.exe\",\n \"?:\\\\Pella Corporation\\\\Pella Order Management\\\\GPAutoSvc.exe\",\n \"?:\\\\Program Files (x86)\\\\*.exe\",\n \"?:\\\\Program Files\\\\*.exe\",\n \"?:\\\\Windows\\\\ADCR_Agent\\\\adcrsvc.exe\",\n \"?:\\\\Windows\\\\AdminArsenal\\\\PDQ*.exe\",\n \"?:\\\\Windows\\\\CAInvokerService.exe\",\n \"?:\\\\Windows\\\\ccmsetup\\\\ccmsetup.exe\",\n \"?:\\\\Windows\\\\eset-remote-install-service.exe\",\n \"?:\\\\Windows\\\\ProPatches\\\\Scheduler\\\\STSchedEx.exe\",\n \"?:\\\\Windows\\\\PSEXESVC.EXE\",\n \"?:\\\\Windows\\\\RemoteAuditService.exe\",\n \"?:\\\\Windows\\\\servicing\\\\TrustedInstaller.exe\",\n \"?:\\\\Windows\\\\System32\\\\certsrv.exe\",\n \"?:\\\\Windows\\\\System32\\\\sppsvc.exe\",\n \"?:\\\\Windows\\\\System32\\\\srmhost.exe\",\n \"?:\\\\Windows\\\\System32\\\\svchost.exe\",\n \"?:\\\\Windows\\\\System32\\\\taskhostex.exe\",\n \"?:\\\\Windows\\\\System32\\\\upfc.exe\",\n \"?:\\\\Windows\\\\System32\\\\vds.exe\",\n \"?:\\\\Windows\\\\System32\\\\VSSVC.exe\",\n \"?:\\\\Windows\\\\System32\\\\wbem\\\\WmiApSrv.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\NwxExeSvc\\\\NwxExeSvc.exe\",\n \"?:\\\\Windows\\\\Veeam\\\\Backup\\\\VeeamDeploymentSvc.exe\",\n \"?:\\\\Windows\\\\VeeamLogShipper\\\\VeeamLogShipper.exe\",\n \"?:\\\\Windows\\\\VeeamVssSupport\\\\VeeamGuestHelper.exe\"\n )] by host.id, process.parent.entity_id\n", + "references": [ + "https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/705b624a-13de-43cc-b8a2-99573da3635f" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "aa9a274d-6b53-424d-ac5e-cb8ca4251650", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "type": "eql", + "version": 110 + }, + "id": "aa9a274d-6b53-424d-ac5e-cb8ca4251650_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/aaab30ec-b004-4191-95e1-4a14387ef6a6_1.json b/packages/security_detection_engine/kibana/security_rule/aaab30ec-b004-4191-95e1-4a14387ef6a6_1.json new file mode 100644 index 00000000000..28385709480 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/aaab30ec-b004-4191-95e1-4a14387ef6a6_1.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential credential decrypt operations by PowerShell or unsigned processes using the Veeam.Backup.Common.dll library. Attackers can use Veeam Credentials to target backups as part of destructive operations such as Ransomware attacks.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.library*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Veeam Backup Library Loaded by Unusual Process", + "query": "library where host.os.type == \"windows\" and event.action == \"load\" and\n (dll.name : \"Veeam.Backup.Common.dll\" or dll.pe.original_file_name : \"Veeam.Backup.Common.dll\") and\n (\n process.code_signature.trusted == false or\n process.code_signature.exists == false or\n process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\")\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "dll.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.exists", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "aaab30ec-b004-4191-95e1-4a14387ef6a6", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 1 + }, + "id": "aaab30ec-b004-4191-95e1-4a14387ef6a6_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/aab184d3-72b3-4639-b242-6597c99d8bca_7.json b/packages/security_detection_engine/kibana/security_rule/aab184d3-72b3-4639-b242-6597c99d8bca_7.json new file mode 100644 index 00000000000..d278ace0473 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/aab184d3-72b3-4639-b242-6597c99d8bca_7.json @@ -0,0 +1,209 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule is triggered when a hash indicator from the Threat Intel Filebeat module or integrations has a match against an event that contains file hashes, such as antivirus alerts, process creation, library load, and file operation events.", + "from": "now-65m", + "index": [ + "auditbeat-*", + "endgame-*", + "filebeat-*", + "logs-*", + "winlogbeat-*" + ], + "interval": "1h", + "language": "kuery", + "license": "Elastic License v2", + "name": "Threat Intel Hash Indicator Match", + "note": "## Triage and Analysis\n\n### Investigating Threat Intel Hash Indicator Match\n\nThreat Intel indicator match rules allow matching from a local observation, such as an endpoint event that records a file hash with an entry of a file hash stored within the Threat Intel integrations index.\n\nMatches are based on threat intelligence data that's been ingested during the last 30 days. Some integrations don't place expiration dates on their threat indicators, so we strongly recommend validating ingested threat indicators and reviewing match results. When reviewing match results, check associated activity to determine whether the event requires additional investigation.\n\nThis rule is triggered when a hash indicator from the Threat Intel Filebeat module or an indicator ingested from a threat intelligence integration matches against an event that contains file hashes, such as antivirus alerts, file operation events, etc.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Gain context about the field that matched the local observation. This information can be found in the `threat.indicator.matched.field` field.\n- Investigate the hash , which can be found in the `threat.indicator.matched.atomic` field:\n - Search for the existence and reputation of the hash in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n - Scope other potentially compromised hosts in your environment by mapping hosts with file operations involving the same hash.\n- Identify the process that created the file.\n - Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Enrich the information that you have right now by determining how the file was dropped, where it was downloaded from, etc. This can help you determine if the event is part of an ongoing campaign against the organization.\n- Retrieve the involved file and examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Using the data collected through the analysis, scope users targeted and other machines infected in the environment.\n\n### False Positive Analysis\n\n- Adversaries often use legitimate tools as network administrators, such as `PsExec` or `AdFind`. These tools are often included in indicator lists, which creates the potential for false positives.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file.hash.*:* or process.hash.*:* or dll.hash.*:*\n", + "references": [ + "https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-threatintel.html", + "https://www.elastic.co/guide/en/security/master/es-threat-intel-integrations.html", + "https://www.elastic.co/security/tip" + ], + "required_fields": [ + { + "ecs": false, + "name": "dll.hash.*", + "type": "unknown" + }, + { + "ecs": false, + "name": "file.hash.*", + "type": "unknown" + }, + { + "ecs": false, + "name": "process.hash.*", + "type": "unknown" + } + ], + "risk_score": 99, + "rule_id": "aab184d3-72b3-4639-b242-6597c99d8bca", + "setup": "## Setup\n\nThis rule needs threat intelligence indicators to work.\nThreat intelligence indicators can be collected using an [Elastic Agent integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#agent-ti-integration),\nthe [Threat Intel module](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#ti-mod-integration),\nor a [custom integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#custom-ti-integration).\n\nMore information can be found [here](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html).\n", + "severity": "critical", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Rule Type: Indicator Match" + ], + "threat_filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.category", + "negate": false, + "params": { + "query": "threat" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.category": "threat" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.kind", + "negate": false, + "params": { + "query": "enrichment" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.kind": "enrichment" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.type", + "negate": false, + "params": { + "query": "indicator" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.type": "indicator" + } + } + } + ], + "threat_index": [ + "filebeat-*", + "logs-ti_*" + ], + "threat_indicator_path": "threat.indicator", + "threat_language": "kuery", + "threat_mapping": [ + { + "entries": [ + { + "field": "file.hash.md5", + "type": "mapping", + "value": "threat.indicator.file.hash.md5" + } + ] + }, + { + "entries": [ + { + "field": "file.hash.sha1", + "type": "mapping", + "value": "threat.indicator.file.hash.sha1" + } + ] + }, + { + "entries": [ + { + "field": "file.hash.sha256", + "type": "mapping", + "value": "threat.indicator.file.hash.sha256" + } + ] + }, + { + "entries": [ + { + "field": "dll.hash.md5", + "type": "mapping", + "value": "threat.indicator.file.hash.md5" + } + ] + }, + { + "entries": [ + { + "field": "dll.hash.sha1", + "type": "mapping", + "value": "threat.indicator.file.hash.sha1" + } + ] + }, + { + "entries": [ + { + "field": "dll.hash.sha256", + "type": "mapping", + "value": "threat.indicator.file.hash.sha256" + } + ] + }, + { + "entries": [ + { + "field": "process.hash.md5", + "type": "mapping", + "value": "threat.indicator.file.hash.md5" + } + ] + }, + { + "entries": [ + { + "field": "process.hash.sha1", + "type": "mapping", + "value": "threat.indicator.file.hash.sha1" + } + ] + }, + { + "entries": [ + { + "field": "process.hash.sha256", + "type": "mapping", + "value": "threat.indicator.file.hash.sha256" + } + ] + } + ], + "threat_query": "@timestamp >= \"now-30d/d\" and event.module:(threatintel or ti_*) and (threat.indicator.file.hash.*:* or threat.indicator.file.pe.imphash:*) and not labels.is_ioc_transform_source:\"true\"", + "timeline_id": "495ad7a7-316e-4544-8a0f-9c098daee76e", + "timeline_title": "Generic Threat Match Timeline", + "timestamp_override": "event.ingested", + "type": "threat_match", + "version": 7 + }, + "id": "aab184d3-72b3-4639-b242-6597c99d8bca_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ac412404-57a5-476f-858f-4e8fbb4f48d8_107.json b/packages/security_detection_engine/kibana/security_rule/ac412404-57a5-476f-858f-4e8fbb4f48d8_107.json new file mode 100644 index 00000000000..1e9f1c090b4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ac412404-57a5-476f-858f-4e8fbb4f48d8_107.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of the login window property list (plist). Adversaries may modify plist files to run a program during system boot or user login for persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence via Login Hook", + "note": "## Triage and analysis\n\nStarting in Mac OS X 10.7 (Lion), users can specify certain applications to be re-opened when a user reboots their machine. This can be abused to establish or maintain persistence on a compromised system.", + "query": "event.category:file and host.os.type:macos and not event.type:\"deletion\" and\n file.name:\"com.apple.loginwindow.plist\" and\n process.name:(* and not (systemmigrationd or DesktopServicesHelper or diskmanagementd or rsync or launchd or cfprefsd or xpcproxy or ManagedClient or MCXCompositor or backupd or \"iMazing Profile Editor\"\n))\n", + "references": [ + "https://github.com/D00MFist/PersistentJXA/blob/master/LoginScript.js" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ac412404-57a5-476f-858f-4e8fbb4f48d8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1647", + "name": "Plist File Modification", + "reference": "https://attack.mitre.org/techniques/T1647/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 107 + }, + "id": "ac412404-57a5-476f-858f-4e8fbb4f48d8_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ac5012b8-8da8-440b-aaaf-aedafdea2dff_111.json b/packages/security_detection_engine/kibana/security_rule/ac5012b8-8da8-440b-aaaf-aedafdea2dff_111.json new file mode 100644 index 00000000000..ce89d26eb79 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ac5012b8-8da8-440b-aaaf-aedafdea2dff_111.json @@ -0,0 +1,145 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A suspicious WerFault child process was detected, which may indicate an attempt to run via the SilentProcessExit registry key manipulation. Verify process details such as command line, network connections and file writes.", + "false_positives": [ + "Custom Windows error reporting debugger or applications restarted by WerFault after a crash." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious WerFault Child Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n\n process.parent.name : \"WerFault.exe\" and \n \n /* args -s and -t used to execute a process via SilentProcessExit mechanism */\n (process.parent.args : \"-s\" and process.parent.args : \"-t\" and process.parent.args : \"-c\") and \n \n not process.executable : (\"?:\\\\Windows\\\\SysWOW64\\\\Initcrypt.exe\", \"?:\\\\Program Files (x86)\\\\Heimdal\\\\Heimdal.Guard.exe\")\n", + "references": [ + "https://www.hexacorn.com/blog/2019/09/19/silentprocessexit-quick-look-under-the-hood/", + "https://www.hexacorn.com/blog/2019/09/20/werfault-command-line-switches-v0-1/", + "https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES/blob/master/Persistence/persistence_SilentProcessExit_ImageHijack_sysmon_13_1.evtx", + "http://web.archive.org/web/20230530011556/https://blog.menasec.net/2021/01/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ac5012b8-8da8-440b-aaaf-aedafdea2dff", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.012", + "name": "Image File Execution Options Injection", + "reference": "https://attack.mitre.org/techniques/T1546/012/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.012", + "name": "Image File Execution Options Injection", + "reference": "https://attack.mitre.org/techniques/T1546/012/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "ac5012b8-8da8-440b-aaaf-aedafdea2dff_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ac8805f6-1e08-406c-962e-3937057fa86f_6.json b/packages/security_detection_engine/kibana/security_rule/ac8805f6-1e08-406c-962e-3937057fa86f_6.json new file mode 100644 index 00000000000..9871c6c9155 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ac8805f6-1e08-406c-962e-3937057fa86f_6.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for common command line flags leveraged by the Chisel server utility followed by a received connection within a timespan of 1 minute. Chisel is a command-line utility used for creating and managing TCP and UDP tunnels, enabling port forwarding and secure communication between machines. Attackers can abuse the Chisel utility to establish covert communication channels, bypass network restrictions, and carry out malicious activities by creating tunnels that allow unauthorized access to internal systems.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Protocol Tunneling via Chisel Server", + "note": "## Triage and analysis\n\n### Investigating Potential Protocol Tunneling via Chisel Server\n\nAttackers can leverage `chisel` to clandestinely tunnel network communications and evade security measures, potentially gaining unauthorized access to sensitive systems.\n\nThis rule looks for a sequence of command line arguments that are consistent with `chisel` server tunneling behavior, followed by a network event by an uncommon process. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate protocol tunneling. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Linux Tunneling and/or Port Forwarding - 6ee947e9-de7e-4281-a55d-09289bdf947e\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id with maxspan=1m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.args == \"server\" and process.args in (\"--port\", \"-p\", \"--reverse\", \"--backend\", \"--socks5\") and \n process.args_count >= 3 and process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")]\n [network where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"connection_accepted\" and \n destination.ip != null and destination.ip != \"127.0.0.1\" and destination.ip != \"::1\" and \n not process.name : (\n \"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\", \"java\", \"telnet\",\n \"ftp\", \"socat\", \"curl\", \"wget\", \"dpkg\", \"docker\", \"dockerd\", \"yum\", \"apt\", \"rpm\", \"dnf\", \"ssh\", \"sshd\", \"hugo\")]\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform", + "https://book.hacktricks.xyz/generic-methodologies-and-resources/tunneling-and-port-forwarding" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ac8805f6-1e08-406c-962e-3937057fa86f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "type": "eql", + "version": 6 + }, + "id": "ac8805f6-1e08-406c-962e-3937057fa86f_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ac96ceb8-4399-4191-af1d-4feeac1f1f46_108.json b/packages/security_detection_engine/kibana/security_rule/ac96ceb8-4399-4191-af1d-4feeac1f1f46_108.json new file mode 100644 index 00000000000..9150ebb15f9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ac96ceb8-4399-4191-af1d-4feeac1f1f46_108.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Mimikatz is a credential dumper capable of obtaining plaintext Windows account logins and passwords, along with many other features that make it useful for testing the security of networks. This rule detects Invoke-Mimikatz PowerShell script and alike.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Invoke-Mimikatz PowerShell Script", + "note": "## Triage and analysis\n\n### Investigating Mimikatz PowerShell Activity\n\n[Mimikatz](https://github.com/gentilkiwi/mimikatz) is an open-source tool used to collect, decrypt, and/or use cached credentials. This tool is commonly abused by adversaries during the post-compromise stage where adversaries have gained an initial foothold on an endpoint and are looking to elevate privileges and seek out additional authentication objects such as tokens/hashes/credentials that can then be used to move laterally and pivot across a network.\n\nThis rule looks for PowerShell scripts that load mimikatz in memory, like Invoke-Mimikataz, which are used to dump credentials from the Local Security Authority Subsystem Service (LSASS). Any activity triggered from this rule should be treated with high priority as it typically represents an active adversary.\n\nMore information about Mimikatz components and how to detect/prevent them can be found on [ADSecurity](https://adsecurity.org/?page_id=1821).\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - Invoke-Mimitakz and alike scripts heavily use other capabilities covered by other detections described in the \"Related Rules\" section.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host.\n - Examine network and security events in the environment to identify potential lateral movement using compromised credentials.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Suspicious .NET Reflection via PowerShell - e26f042e-c590-4e82-8e05-41e81bd822ad\n- PowerShell Suspicious Payload Encoded and Compressed - 81fe9dc6-a2d7-4192-a2d8-eed98afc766a\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- Mimikatz Memssp Log File Detected - ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6\n- Modification of WDigest Security Provider - d703a5af-d5b0-43bd-8ddb-7a5d500b7da5\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Validate that cleartext passwords are disabled in memory for use with `WDigest`.\n- Look into preventing access to `LSASS` using capabilities such as LSA protection or antivirus/EDR tools that provide this capability.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\npowershell.file.script_block_text:(\n (DumpCreds and\n DumpCerts) or\n \"sekurlsa::logonpasswords\" or\n (\"crypto::certificates\" and\n \"CERT_SYSTEM_STORE_LOCAL_MACHINE\")\n)\n", + "references": [ + "https://attack.mitre.org/software/S0002/", + "https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "ac96ceb8-4399-4191-af1d-4feeac1f1f46", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be configured (Enable).\n\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 108 + }, + "id": "ac96ceb8-4399-4191-af1d-4feeac1f1f46_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/acd611f3-2b93-47b3-a0a3-7723bcc46f6d_105.json b/packages/security_detection_engine/kibana/security_rule/acd611f3-2b93-47b3-a0a3-7723bcc46f6d_105.json new file mode 100644 index 00000000000..64fd29575c7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/acd611f3-2b93-47b3-a0a3-7723bcc46f6d_105.json @@ -0,0 +1,130 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances of Internet Explorer (iexplore.exe) being started via the Component Object Model (COM) making unusual network connections. Adversaries could abuse Internet Explorer via COM to avoid suspicious processes making network connections and bypass host-based firewall restrictions.", + "false_positives": [ + "Processes such as MS Office using IEproxy to render HTML content." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Command and Control via Internet Explorer", + "query": "sequence by host.id, user.name with maxspan = 5s\n [library where host.os.type == \"windows\" and dll.name : \"IEProxy.dll\" and process.name : (\"rundll32.exe\", \"regsvr32.exe\")]\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"iexplore.exe\" and process.parent.args : \"-Embedding\"]\n /* IE started via COM in normal conditions makes few connections, mainly to Microsoft and OCSP related domains, add FPs here */\n [network where host.os.type == \"windows\" and network.protocol == \"dns\" and process.name : \"iexplore.exe\" and\n not dns.question.name :\n (\n \"*.microsoft.com\",\n \"*.digicert.com\",\n \"*.msocsp.com\",\n \"*.windowsupdate.com\",\n \"*.bing.com\",\n \"*.identrust.com\",\n \"*.sharepoint.com\",\n \"*.office365.com\",\n \"*.office.com\"\n )\n ] /* with runs=5 */\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "acd611f3-2b93-47b3-a0a3-7723bcc46f6d", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/", + "subtechnique": [ + { + "id": "T1559.001", + "name": "Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1559/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 105 + }, + "id": "acd611f3-2b93-47b3-a0a3-7723bcc46f6d_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ace1e989-a541-44df-93a8-a8b0591b63c0_108.json b/packages/security_detection_engine/kibana/security_rule/ace1e989-a541-44df-93a8-a8b0591b63c0_108.json new file mode 100644 index 00000000000..d345cfb6e71 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ace1e989-a541-44df-93a8-a8b0591b63c0_108.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a high number (20) of macOS SSH KeyGen process executions from the same host. An adversary may attempt a brute force attack to obtain unauthorized access to user accounts.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential macOS SSH Brute Force Detected", + "query": "event.category:process and host.os.type:macos and event.type:start and process.name:\"sshd-keygen-wrapper\" and process.parent.name:launchd\n", + "references": [ + "https://themittenmac.com/detecting-ssh-activity-via-process-monitoring/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ace1e989-a541-44df-93a8-a8b0591b63c0", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/" + } + ] + } + ], + "threshold": { + "field": [ + "host.id" + ], + "value": 20 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 108 + }, + "id": "ace1e989-a541-44df-93a8-a8b0591b63c0_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/acf738b5-b5b2-4acc-bad9-1e18ee234f40_108.json b/packages/security_detection_engine/kibana/security_rule/acf738b5-b5b2-4acc-bad9-1e18ee234f40_108.json new file mode 100644 index 00000000000..14d81e8f186 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/acf738b5-b5b2-4acc-bad9-1e18ee234f40_108.json @@ -0,0 +1,81 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious managed code hosting process which could indicate code injection or other form of suspicious code execution.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.file-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Managed Code Hosting Process", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.name : (\"wscript.exe.log\",\n \"cscript.exe.log\",\n \"mshta.exe.log\",\n \"wmic.exe.log\",\n \"svchost.exe.log\",\n \"dllhost.exe.log\",\n \"cmstp.exe.log\",\n \"regsvr32.exe.log\")\n", + "references": [ + "http://web.archive.org/web/20230329154538/https://blog.menasec.net/2019/07/interesting-difr-traces-of-net-clr.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "acf738b5-b5b2-4acc-bad9-1e18ee234f40", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "acf738b5-b5b2-4acc-bad9-1e18ee234f40_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ad0d2742-9a49-11ec-8d6b-acde48001122_108.json b/packages/security_detection_engine/kibana/security_rule/ad0d2742-9a49-11ec-8d6b-acde48001122_108.json new file mode 100644 index 00000000000..742ab1012d2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ad0d2742-9a49-11ec-8d6b-acde48001122_108.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies the use of Windows Work Folders to execute a potentially masqueraded control.exe file in the current working directory. Misuse of Windows Work Folders could indicate malicious activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Signed Proxy Execution via MS Work Folders", + "note": "## Triage and analysis\n\n### Investigating Signed Proxy Execution via MS Work Folders\n\nWork Folders is a role service for file servers running Windows Server that provides a consistent way for users to access their work files from their PCs and devices. This allows users to store work files and access them from anywhere. When called, Work Folders will automatically execute any Portable Executable (PE) named control.exe as an argument before accessing the synced share.\n\nUsing Work Folders to execute a masqueraded control.exe could allow an adversary to bypass application controls and increase privileges.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Examine the location of the WorkFolders.exe binary to determine if it was copied to the location of the control.exe binary. It resides in the System32 directory by default.\n- Trace the activity related to the control.exe binary to identify any continuing intrusion activity on the host.\n- Review the control.exe binary executed with Work Folders to determine maliciousness such as additional host activity or network traffic.\n- Determine if control.exe was synced to sync share, indicating potential lateral movement.\n- Review how control.exe was originally delivered on the host, such as emailed, downloaded from the web, or written to\ndisk from a separate binary.\n\n### False positive analysis\n\n- Windows Work Folders are used legitimately by end users and administrators for file sharing and syncing but not in the instance where a suspicious control.exe is passed as an argument.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Review the Work Folders synced share to determine if the control.exe was shared and if so remove it.\n- If no lateral movement was identified during investigation, take the affected host offline if possible and remove the control.exe binary as well as any additional artifacts identified during investigation.\n- Review integrating Windows Information Protection (WIP) to enforce data protection by encrypting the data on PCs using Work Folders.\n- Confirm with the user whether this was expected or not, and reset their password.\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\"\n and process.name : \"control.exe\" and process.parent.name : \"WorkFolders.exe\"\n and not process.executable : (\"?:\\\\Windows\\\\System32\\\\control.exe\", \"?:\\\\Windows\\\\SysWOW64\\\\control.exe\")\n", + "references": [ + "https://docs.microsoft.com/en-us/windows-server/storage/work-folders/work-folders-overview", + "https://twitter.com/ElliotKillick/status/1449812843772227588", + "https://lolbas-project.github.io/lolbas/Binaries/WorkFolders/" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ad0d2742-9a49-11ec-8d6b-acde48001122", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "ad0d2742-9a49-11ec-8d6b-acde48001122_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ad84d445-b1ce-4377-82d9-7c633f28bf9a_110.json b/packages/security_detection_engine/kibana/security_rule/ad84d445-b1ce-4377-82d9-7c633f28bf9a_110.json new file mode 100644 index 00000000000..095ce3c30de --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ad84d445-b1ce-4377-82d9-7c633f28bf9a_110.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the presence of a portable executable (PE) in a PowerShell script by looking for its encoded header. Attackers embed PEs into PowerShell scripts to inject them into memory, avoiding defences by not writing to disk.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Portable Executable Encoded in Powershell Script", + "note": "## Triage and analysis\n\n### Investigating Suspicious Portable Executable Encoded in Powershell Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can abuse PowerShell in-memory capabilities to inject executables into memory without touching the disk, bypassing file-based security protections. These executables are generally base64 encoded.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- Suspicious .NET Reflection via PowerShell - e26f042e-c590-4e82-8e05-41e81bd822ad\n- PowerShell Suspicious Payload Encoded and Compressed - 81fe9dc6-a2d7-4192-a2d8-eed98afc766a\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n TVqQAAMAAAAEAAAA\n ) and not user.id : \"S-1-5-18\"\n", + "references": [ + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ad84d445-b1ce-4377-82d9-7c633f28bf9a", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "ad84d445-b1ce-4377-82d9-7c633f28bf9a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ad88231f-e2ab-491c-8fc6-64746da26cfe_106.json b/packages/security_detection_engine/kibana/security_rule/ad88231f-e2ab-491c-8fc6-64746da26cfe_106.json new file mode 100644 index 00000000000..894bb7a7435 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ad88231f-e2ab-491c-8fc6-64746da26cfe_106.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the Kerberos credential cache (kcc) utility to dump locally cached Kerberos tickets. Adversaries may attempt to dump credential material in the form of tickets that can be leveraged for lateral movement.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Kerberos Cached Credentials Dumping", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:kcc and\n process.args:copy_cred_cache\n", + "references": [ + "https://github.com/EmpireProject/EmPyre/blob/master/lib/modules/collection/osx/kerberosdump.py", + "https://opensource.apple.com/source/Heimdal/Heimdal-323.12/kuser/kcc-commands.in.auto.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "ad88231f-e2ab-491c-8fc6-64746da26cfe", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/", + "subtechnique": [ + { + "id": "T1558.003", + "name": "Kerberoasting", + "reference": "https://attack.mitre.org/techniques/T1558/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "ad88231f-e2ab-491c-8fc6-64746da26cfe_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ad959eeb-2b7b-4722-ba08-a45f6622f005_2.json b/packages/security_detection_engine/kibana/security_rule/ad959eeb-2b7b-4722-ba08-a45f6622f005_2.json new file mode 100644 index 00000000000..634524ad8ae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ad959eeb-2b7b-4722-ba08-a45f6622f005_2.json @@ -0,0 +1,139 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects suspicious process events executed by the APT package manager, potentially indicating persistence through an APT backdoor. In Linux, APT (Advanced Package Tool) is a command-line utility used for handling packages on Debian-based systems, providing functions for installing, updating, upgrading, and removing software along with managing package repositories. Attackers can backdoor APT to gain persistence by injecting malicious code into scripts that APT runs, thereby ensuring continued unauthorized access or control each time APT is used for package management.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious APT Package Manager Execution", + "query": "sequence by host.id with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.parent.name == \"apt\" and process.args == \"-c\" and process.name in (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\"\n )\n ] by process.entity_id\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"python*\", \"php*\",\n \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\"\n )\n ] by process.parent.entity_id\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ad959eeb-2b7b-4722-ba08-a45f6622f005", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [] + } + ], + "type": "eql", + "version": 2 + }, + "id": "ad959eeb-2b7b-4722-ba08-a45f6622f005_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/adb961e0-cb74-42a0-af9e-29fc41f88f5f_110.json b/packages/security_detection_engine/kibana/security_rule/adb961e0-cb74-42a0-af9e-29fc41f88f5f_110.json new file mode 100644 index 00000000000..ffca0702e23 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/adb961e0-cb74-42a0-af9e-29fc41f88f5f_110.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A netcat process is engaging in network activity on a Linux host. Netcat is often used as a persistence mechanism by exporting a reverse shell or by serving a shell on a listening port. Netcat is also sometimes used for data exfiltration.", + "false_positives": [ + "Netcat is a dual-use tool that can be used for benign or malicious activity. Netcat is included in some Linux distributions so its presence is not necessarily suspicious. Some normal use of this program, while uncommon, may originate from scripts, automation tools, and frameworks." + ], + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "File Transfer or Listener Established via Netcat", + "note": "## Triage and analysis\n\n### Investigating Netcat Network Activity\n\nNetcat is a dual-use command line tool that can be used for various purposes, such as port scanning, file transfers, and connection tests. Attackers can abuse its functionality for malicious purposes such creating bind shells or reverse shells to gain access to the target system.\n\nA reverse shell is a mechanism that's abused to connect back to an attacker-controlled system. It effectively redirects the system's input and output and delivers a fully functional remote shell to the attacker. Even private systems are vulnerable since the connection is outgoing.\n\nA bind shell is a type of backdoor that attackers set up on the target host and binds to a specific port to listen for an incoming connection from the attacker.\n\nThis rule identifies potential reverse shell or bind shell activity using Netcat by checking for the execution of Netcat followed by a network connection.\n\n#### Possible investigation steps\n\n- Examine the command line to identify if the command is suspicious.\n- Extract and examine the target domain or IP address.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - Scope other potentially compromised hosts in your environment by mapping hosts that also communicated with the domain or IP address.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, file modifications, and any spawned child processes.\n\n### False positive analysis\n\n- Netcat is a dual-use tool that can be used for benign or malicious activity. It is included in some Linux distributions, so its presence is not necessarily suspicious. Some normal use of this program, while uncommon, may originate from scripts, automation tools, and frameworks.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Block the identified indicators of compromise (IoCs).\n- Take actions to terminate processes and connections used by the attacker.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"linux\" and event.type == \"start\" and\n process.name:(\"nc\",\"ncat\",\"netcat\",\"netcat.openbsd\",\"netcat.traditional\") and (\n /* bind shell to echo for command execution */\n (process.args:(\"-l\",\"-p\") and process.args:(\"-c\",\"echo\",\"$*\"))\n /* bind shell to specific port */\n or process.args:(\"-l\",\"-p\",\"-lp\")\n /* reverse shell to command-line interpreter used for command execution */\n or (process.args:(\"-e\") and process.args:(\"/bin/bash\",\"/bin/sh\"))\n /* file transfer via stdout */\n or process.args:(\">\",\"<\")\n /* file transfer via pipe */\n or (process.args:(\"|\") and process.args:(\"nc\",\"ncat\"))\n )]\n [network where host.os.type == \"linux\" and (process.name == \"nc\" or process.name == \"ncat\" or process.name == \"netcat\" or\n process.name == \"netcat.openbsd\" or process.name == \"netcat.traditional\")]\n", + "references": [ + "http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet", + "https://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf", + "https://en.wikipedia.org/wiki/Netcat", + "https://www.hackers-arise.com/hacking-fundamentals", + "https://null-byte.wonderhowto.com/how-to/hack-like-pro-use-netcat-swiss-army-knife-hacking-tools-0148657/", + "https://levelup.gitconnected.com/ethical-hacking-part-15-netcat-nc-and-netcat-f6a8f7df43fd" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "adb961e0-cb74-42a0-af9e-29fc41f88f5f", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 110 + }, + "id": "adb961e0-cb74-42a0-af9e-29fc41f88f5f_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ae343298-97bc-47bc-9ea2-5f2ad831c16e_3.json b/packages/security_detection_engine/kibana/security_rule/ae343298-97bc-47bc-9ea2-5f2ad831c16e_3.json new file mode 100644 index 00000000000..fe0c05ad9e6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ae343298-97bc-47bc-9ea2-5f2ad831c16e_3.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for a file creation event originating from a kworker parent process. kworker, or kernel worker, processes are part of the kernel's workqueue mechanism. They are responsible for executing work that has been scheduled to be done in kernel space, which might include tasks like handling interrupts, background activities, and other kernel-related tasks. Attackers may attempt to evade detection by masquerading as a kernel worker process.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious File Creation via Kworker", + "note": "## Triage and analysis\n\n### Investigating Suspicious File Creation via Kworker\n\nKworker, or kernel worker, processes are part of the kernel's workqueue mechanism. They are responsible for executing work that has been scheduled to be done in kernel space, which might include tasks like handling interrupts, background activities, and other kernel-related tasks.\n\nAttackers may attempt to evade detection by masquerading as a kernel worker process.\n\nThis rule monitors for suspicious file creation events through the kworker process. This is not common, and could indicate malicious behaviour.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the file that was created or modified through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE path = {{file.path}}\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator that performed these actions for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Suspicious Kworker UID Elevation - 7dfaaa17-425c-4fe7-bd36-83705fde7c2b\n- Network Activity Detected via Kworker - 25d917c4-aa3c-4111-974c-286c0312ff95\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where event.action in (\"creation\", \"file_create_event\") and process.name : \"kworker*\" and not (\n (process.name : \"kworker*kcryptd*\") or \n (file.path : (\"/var/log/*\", \"/var/crash/*\", \"/var/run/*\", \"/var/lib/systemd/coredump/*\", \"/var/spool/*\"))\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ae343298-97bc-47bc-9ea2-5f2ad831c16e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click Add integrations.\n- In the query bar, search for Elastic Defend and select the integration to see more details about it.\n- Click Add Elastic Defend.\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either Traditional Endpoints or Cloud Workloads.\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in New agent policy name. If other agent policies already exist, you can click the Existing hosts tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click Save and Continue.\n- To complete the integration, select Add Elastic Agent to your hosts and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "ae343298-97bc-47bc-9ea2-5f2ad831c16e_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ae8a142c-6a1d-4918-bea7-0b617e99ecfa_4.json b/packages/security_detection_engine/kibana/security_rule/ae8a142c-6a1d-4918-bea7-0b617e99ecfa_4.json new file mode 100644 index 00000000000..f4488de327e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ae8a142c-6a1d-4918-bea7-0b617e99ecfa_4.json @@ -0,0 +1,134 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution of common Microsoft Office applications to launch an Office Add-In from a suspicious path or with an unusual parent process. This may indicate an attempt to get initial access via a malicious phishing MS Office Add-In.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Execution via Microsoft Office Add-Ins", + "query": "process where \n \n host.os.type == \"windows\" and event.type == \"start\" and \n \n process.name : (\"WINWORD.EXE\", \"EXCEL.EXE\", \"POWERPNT.EXE\", \"MSACCESS.EXE\", \"VSTOInstaller.exe\") and \n \n process.args regex~ \"\"\".+\\.(wll|xll|ppa|ppam|xla|xlam|vsto)\"\"\" and \n \n /* Office Add-In from suspicious paths */\n (process.args :\n (\"?:\\\\Users\\\\*\\\\Temp\\\\7z*\",\n \"?:\\\\Users\\\\*\\\\Temp\\\\Rar$*\",\n \"?:\\\\Users\\\\*\\\\Temp\\\\Temp?_*\",\n \"?:\\\\Users\\\\*\\\\Temp\\\\BNZ.*\",\n \"?:\\\\Users\\\\*\\\\Downloads\\\\*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\*\",\n \"?:\\\\Users\\\\Public\\\\*\",\n \"?:\\\\ProgramData\\\\*\",\n \"?:\\\\Windows\\\\Temp\\\\*\",\n \"\\\\Device\\\\*\",\n \"http*\") or\n\t \n process.parent.name : (\"explorer.exe\", \"OpenWith.exe\") or \n \n /* Office Add-In from suspicious parent */\n process.parent.name : (\"cmd.exe\", \"powershell.exe\")) and\n\t \n /* False Positives */\n not (process.args : \"*.vsto\" and\n process.parent.executable :\n (\"?:\\\\Program Files\\\\Logitech\\\\LogiOptions\\\\PlugInInstallerUtility*.exe\",\n \"?:\\\\ProgramData\\\\Logishrd\\\\LogiOptions\\\\Plugins\\\\VSTO\\\\*\\\\VSTOInstaller.exe\",\n \"?:\\\\Program Files\\\\Logitech\\\\LogiOptions\\\\PlugInInstallerUtility.exe\",\n \"?:\\\\Program Files\\\\LogiOptionsPlus\\\\PlugInInstallerUtility*.exe\",\n \"?:\\\\ProgramData\\\\Logishrd\\\\LogiOptionsPlus\\\\Plugins\\\\VSTO\\\\*\\\\VSTOInstaller.exe\",\n \"?:\\\\Program Files\\\\Common Files\\\\microsoft shared\\\\VSTO\\\\*\\\\VSTOInstaller.exe\")) and\n not (process.args : \"/Uninstall\" and process.name : \"VSTOInstaller.exe\") and\n not (process.parent.name : \"rundll32.exe\" and\n process.parent.args : \"?:\\\\WINDOWS\\\\Installer\\\\MSI*.tmp,zzzzInvokeManagedCustomActionOutOfProc\") and\n not (process.name : \"VSTOInstaller.exe\" and process.args : \"https://dl.getsidekick.com/outlook/vsto/Sidekick.vsto\")\n", + "references": [ + "https://github.com/Octoberfest7/XLL_Phishing", + "https://labs.f-secure.com/archive/add-in-opportunities-for-office-persistence/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ae8a142c-6a1d-4918-bea7-0b617e99ecfa", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1137", + "name": "Office Application Startup", + "reference": "https://attack.mitre.org/techniques/T1137/", + "subtechnique": [ + { + "id": "T1137.006", + "name": "Add-ins", + "reference": "https://attack.mitre.org/techniques/T1137/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "ae8a142c-6a1d-4918-bea7-0b617e99ecfa_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/aebaa51f-2a91-4f6a-850b-b601db2293f4_7.json b/packages/security_detection_engine/kibana/security_rule/aebaa51f-2a91-4f6a-850b-b601db2293f4_7.json new file mode 100644 index 00000000000..60dfc020829 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/aebaa51f-2a91-4f6a-850b-b601db2293f4_7.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors the creation of shared object files by previously unknown processes. The creation of a shared object file involves compiling code into a dynamically linked library that can be loaded by other programs at runtime. While this process is typically used for legitimate purposes, malicious actors can leverage shared object files to execute unauthorized code, inject malicious functionality into legitimate processes, or bypass security controls. This allows malware to persist on the system, evade detection, and potentially compromise the integrity and confidentiality of the affected system and its data.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Shared Object Created or Changed by Previously Unknown Process", + "new_terms_fields": [ + "host.id", + "file.path", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating Shared Object Created or Changed by Previously Unknown Process\n\nA shared object file is a compiled library file (typically with a .so extension) that can be dynamically linked to executable programs at runtime, allowing for code reuse and efficient memory usage. The creation of a shared object file involves compiling code into a dynamically linked library that can be loaded by other programs at runtime.\n\nMalicious actors can leverage shared object files to execute unauthorized code, inject malicious functionality into legitimate processes, or bypass security controls. This allows malware to persist on the system, evade detection, and potentially compromise the integrity and confidentiality of the affected system and its data.\n\nThis rule monitors the creation of shared object files by previously unknown processes through the usage of the new terms rule type.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the shared object that was created or modified through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE path = {{file.path}}\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE path = {{file.path}}\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator that performed these actions for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:linux and event.action:(creation or file_create_event or file_rename_event or rename) and \nfile.path:(/dev/shm/* or /usr/lib/*) and file.extension:so and process.name:* and not (\n process.name:(\"dockerd\" or \"dpkg\" or \"rpm\" or \"snapd\" or \"yum\" or \"vmis-launcher\" or \"pacman\" or\n \"apt-get\" or \"dnf\" or \"podman\" or \"platform-python\") or \n (process.name:vmware-install.pl and file.path:/usr/lib/vmware-tools/*)\n)\n", + "references": [ + "https://threatpost.com/sneaky-malware-backdoors-linux/180158/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "aebaa51f-2a91-4f6a-850b-b601db2293f4", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.006", + "name": "Dynamic Linker Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 7 + }, + "id": "aebaa51f-2a91-4f6a-850b-b601db2293f4_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/afa135c0-a365-43ab-aa35-fd86df314a47_4.json b/packages/security_detection_engine/kibana/security_rule/afa135c0-a365-43ab-aa35-fd86df314a47_4.json new file mode 100644 index 00000000000..f4d6e794c9e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/afa135c0-a365-43ab-aa35-fd86df314a47_4.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for a sequence of 20 \"id\" command executions within 1 second by the same parent process. This behavior is unusual, and may be indicative of the execution of an enumeration script such as LinPEAS or LinEnum. These scripts leverage the \"id\" command to enumerate the privileges of all users present on the system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual User Privilege Enumeration via id", + "query": "sequence by host.id, process.parent.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name == \"id\" and process.args_count == 2 and \n not (process.parent.name == \"rpm\" or process.parent.args : \"/var/tmp/rpm-tmp*\")] with runs=20\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "afa135c0-a365-43ab-aa35-fd86df314a47", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1033", + "name": "System Owner/User Discovery", + "reference": "https://attack.mitre.org/techniques/T1033/" + } + ] + } + ], + "type": "eql", + "version": 4 + }, + "id": "afa135c0-a365-43ab-aa35-fd86df314a47_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/afcce5ad-65de-4ed2-8516-5e093d3ac99a_106.json b/packages/security_detection_engine/kibana/security_rule/afcce5ad-65de-4ed2-8516-5e093d3ac99a_106.json new file mode 100644 index 00000000000..07ebcdade4e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/afcce5ad-65de-4ed2-8516-5e093d3ac99a_106.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Indicates the creation of a scheduled task. Adversaries can use these to establish persistence, move laterally, and/or escalate privileges.", + "false_positives": [ + "Legitimate scheduled tasks may be created during installation of new software." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Local Scheduled Task Creation", + "query": "sequence with maxspan=1m\n [process where host.os.type == \"windows\" and event.type != \"end\" and\n ((process.name : (\"cmd.exe\", \"wscript.exe\", \"rundll32.exe\", \"regsvr32.exe\", \"wmic.exe\", \"mshta.exe\",\n \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\", \"WmiPrvSe.exe\", \"wsmprovhost.exe\", \"winrshost.exe\") or\n process.pe.original_file_name : (\"cmd.exe\", \"wscript.exe\", \"rundll32.exe\", \"regsvr32.exe\", \"wmic.exe\", \"mshta.exe\",\n \"powershell.exe\", \"pwsh.dll\", \"powershell_ise.exe\", \"WmiPrvSe.exe\", \"wsmprovhost.exe\",\n \"winrshost.exe\")) or\n ?process.code_signature.trusted == false)] by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"schtasks.exe\" or process.pe.original_file_name == \"schtasks.exe\") and\n process.args : (\"/create\", \"-create\") and process.args : (\"/RU\", \"/SC\", \"/TN\", \"/TR\", \"/F\", \"/XML\") and\n /* exclude SYSTEM Integrity Level - look for task creations by non-SYSTEM user */\n not (?process.Ext.token.integrity_level_name : \"System\" or ?winlog.event_data.IntegrityLevel : \"System\")\n ] by process.parent.entity_id\n", + "references": [ + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-1", + "https://www.elastic.co/security-labs/hunting-for-persistence-using-elastic-security-part-2" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.IntegrityLevel", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "afcce5ad-65de-4ed2-8516-5e093d3ac99a", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "afcce5ad-65de-4ed2-8516-5e093d3ac99a_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/afd04601-12fc-4149-9b78-9c3f8fe45d39_6.json b/packages/security_detection_engine/kibana/security_rule/afd04601-12fc-4149-9b78-9c3f8fe45d39_6.json new file mode 100644 index 00000000000..26a789ea5fa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/afd04601-12fc-4149-9b78-9c3f8fe45d39_6.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of the cat command, followed by a connection attempt by the same process. Cat is capable of transfering data via tcp/udp channels by redirecting its read output to a /dev/tcp or /dev/udp channel. This activity is highly suspicious, and should be investigated. Attackers may leverage this capability to transfer tools or files to another host in the network or exfiltrate data while attempting to evade detection in the process.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Activity Detected via cat", + "note": "## Triage and analysis\n\n### Investigating Network Activity Detected via cat\n\nAttackers may leverage the `cat` utility in conjunction with a listener to read all bytes of a file, and output the content to a `/dev/tcp` or `/dev/udp` channel to transfer/exfiltrate file contents to a remote system. \n\nThis rule looks for a sequence of a `cat` execution event followed by a network connection attempt by the same `cat` process. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate command and control activity or data exfiltration. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Suspicious Network Activity to the Internet by Previously Unknown Executable - 53617418-17b4-4e9c-8a2c-8deb8086ca4b\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name == \"cat\" and process.parent.name in (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")]\n [network where host.os.type == \"linux\" and event.action in (\"connection_attempted\", \"disconnect_received\") and\n process.name == \"cat\" and not (destination.ip == null or destination.ip == \"0.0.0.0\" or cidrmatch(\n destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\",\n \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\",\n \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\",\n \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\",\n \"FF00::/8\"\n )\n )]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "afd04601-12fc-4149-9b78-9c3f8fe45d39", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [] + } + ], + "type": "eql", + "version": 6 + }, + "id": "afd04601-12fc-4149-9b78-9c3f8fe45d39_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/afe6b0eb-dd9d-4922-b08a-1910124d524d_5.json b/packages/security_detection_engine/kibana/security_rule/afe6b0eb-dd9d-4922-b08a-1910124d524d_5.json new file mode 100644 index 00000000000..e5f8ecfaf4d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/afe6b0eb-dd9d-4922-b08a-1910124d524d_5.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of processes that interact with Linux containers through an interactive shell without root permissions. Utilities such as runc and ctr are universal command-line utilities leveraged to interact with containers via root permissions. On systems where the access to these utilities are misconfigured, attackers might be able to create and run a container that mounts the root folder or spawn a privileged container vulnerable to a container escape attack, which might allow them to escalate privileges and gain further access onto the host file system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via Container Misconfiguration", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and (\n (process.name == \"runc\" and process.args == \"run\") or\n (process.name == \"ctr\" and process.args == \"run\" and process.args in (\"--privileged\", \"--mount\"))\n) and not user.Ext.real.id == \"0\" and not group.Ext.real.id == \"0\" and \nprocess.interactive == true and process.parent.interactive == true\n", + "references": [ + "https://book.hacktricks.xyz/linux-hardening/privilege-escalation/runc-privilege-escalation", + "https://book.hacktricks.xyz/linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "group.Ext.real.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.interactive", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.interactive", + "type": "boolean" + }, + { + "ecs": false, + "name": "user.Ext.real.id", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "afe6b0eb-dd9d-4922-b08a-1910124d524d", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\nSession View uses process data collected by the Elastic Defend integration, but this data is not always collected by default. Session View is available on enterprise subscription for versions 8.3 and above.\n#### To confirm that Session View data is enabled:\n- Go to \u201cManage \u2192 Policies\u201d, and edit one or more of your Elastic Defend integration policies.\n- Select the\u201d Policy settings\u201d tab, then scroll down to the \u201cLinux event collection\u201d section near the bottom.\n- Check the box for \u201cProcess events\u201d, and turn on the \u201cInclude session data\u201d toggle.\n- If you want to include file and network alerts in Session View, check the boxes for \u201cNetwork and File events\u201d.\n- If you want to enable terminal output capture, turn on the \u201cCapture terminal output\u201d toggle.\nFor more information about the additional fields collected when this setting is enabled and the usage of Session View for Analysis refer to the [helper guide](https://www.elastic.co/guide/en/security/current/session-view.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Domain: Container", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1611", + "name": "Escape to Host", + "reference": "https://attack.mitre.org/techniques/T1611/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "afe6b0eb-dd9d-4922-b08a-1910124d524d_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b0046934-486e-462f-9487-0d4cf9e429c6_106.json b/packages/security_detection_engine/kibana/security_rule/b0046934-486e-462f-9487-0d4cf9e429c6_106.json new file mode 100644 index 00000000000..dc600914412 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b0046934-486e-462f-9487-0d4cf9e429c6_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Timestomping is an anti-forensics technique which is used to modify the timestamps of a file, often to mimic files that are in the same folder.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Timestomping using Touch Command", + "query": "process where event.type == \"start\" and\n process.name : \"touch\" and user.id != \"0\" and\n process.args : (\"-r\", \"-t\", \"-a*\",\"-m*\") and\n not process.args : (\n \"/usr/lib/go-*/bin/go\", \"/usr/lib/dracut/dracut-functions.sh\", \"/tmp/KSInstallAction.*/m/.patch/*\"\n) and not process.parent.name in (\"pmlogger_daily\", \"pmlogger_janitor\", \"systemd\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b0046934-486e-462f-9487-0d4cf9e429c6", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.006", + "name": "Timestomp", + "reference": "https://attack.mitre.org/techniques/T1070/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "b0046934-486e-462f-9487-0d4cf9e429c6_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b00bcd89-000c-4425-b94c-716ef67762f6_106.json b/packages/security_detection_engine/kibana/security_rule/b00bcd89-000c-4425-b94c-716ef67762f6_106.json new file mode 100644 index 00000000000..7079968d9de --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b00bcd89-000c-4425-b94c-716ef67762f6_106.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the mount_apfs command to mount the entire file system through Apple File System (APFS) snapshots as read-only and with the noowners flag set. This action enables the adversary to access almost any file in the file system, including all user data and files protected by Apple\u2019s privacy framework (TCC).", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "TCC Bypass via Mounted APFS Snapshot Access", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and process.name:mount_apfs and\n process.args:(/System/Volumes/Data and noowners)\n", + "references": [ + "https://theevilbit.github.io/posts/cve_2020_9771/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "b00bcd89-000c-4425-b94c-716ef67762f6", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1006", + "name": "Direct Volume Access", + "reference": "https://attack.mitre.org/techniques/T1006/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "b00bcd89-000c-4425-b94c-716ef67762f6_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b25a7df2-120a-4db2-bd3f-3e4b86b24bee_110.json b/packages/security_detection_engine/kibana/security_rule/b25a7df2-120a-4db2-bd3f-3e4b86b24bee_110.json new file mode 100644 index 00000000000..ce78ddb3607 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b25a7df2-120a-4db2-bd3f-3e4b86b24bee_110.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an executable or script file remotely downloaded via a TeamViewer transfer session.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote File Copy via TeamViewer", + "note": "## Triage and analysis\n\n### Investigating Remote File Copy via TeamViewer\n\nAttackers commonly transfer tooling or malware from external systems into a compromised environment using the command and control channel. However, they can also abuse legitimate utilities to drop these files.\n\nTeamViewer is a remote access and remote control tool used by helpdesks and system administrators to perform various support activities. It is also frequently used by attackers and scammers to deploy malware interactively and other malicious activities. This rule looks for the TeamViewer process creating files with suspicious extensions.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Contact the user to gather information about who and why was conducting the remote access.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Check whether the company uses TeamViewer for the support activities and if there is a support ticket related to this access.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the company relies on TeamViewer to conduct remote access and the triage has not identified suspicious or malicious files.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and process.name : \"TeamViewer.exe\" and\n file.extension : (\"exe\", \"dll\", \"scr\", \"com\", \"bat\", \"ps1\", \"vbs\", \"vbe\", \"js\", \"wsh\", \"hta\") and\n not \n (\n file.path : (\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Microsoft\\\\Windows\\\\INetCache\\\\*.js\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\TeamViewer\\\\update.exe\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\?\\\\TeamViewer\\\\update.exe\"\n ) and process.code_signature.trusted == true\n )\n", + "references": [ + "http://web.archive.org/web/20230329160957/https://blog.menasec.net/2019/11/hunting-for-suspicious-use-of.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b25a7df2-120a-4db2-bd3f-3e4b86b24bee", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + }, + { + "id": "T1219", + "name": "Remote Access Software", + "reference": "https://attack.mitre.org/techniques/T1219/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "b25a7df2-120a-4db2-bd3f-3e4b86b24bee_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b2951150-658f-4a60-832f-a00d1e6c6745_105.json b/packages/security_detection_engine/kibana/security_rule/b2951150-658f-4a60-832f-a00d1e6c6745_105.json new file mode 100644 index 00000000000..a0ee4d60f05 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b2951150-658f-4a60-832f-a00d1e6c6745_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies that a user has deleted an unusually large volume of files as reported by Microsoft Cloud App Security.", + "false_positives": [ + "Users or System Administrator cleaning out folders." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Unusual Volume of File Deletion", + "note": "", + "query": "event.dataset:o365.audit and event.provider:SecurityComplianceCenter and event.category:web and event.action:\"Unusual volume of file deletion\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/cloud-app-security/anomaly-detection-policy", + "https://docs.microsoft.com/en-us/cloud-app-security/policy-template-reference" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b2951150-658f-4a60-832f-a00d1e6c6745", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Impact" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1485", + "name": "Data Destruction", + "reference": "https://attack.mitre.org/techniques/T1485/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "b2951150-658f-4a60-832f-a00d1e6c6745_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b29ee2be-bf99-446c-ab1a-2dc0183394b8_107.json b/packages/security_detection_engine/kibana/security_rule/b29ee2be-bf99-446c-ab1a-2dc0183394b8_107.json new file mode 100644 index 00000000000..4404ec755ef --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b29ee2be-bf99-446c-ab1a-2dc0183394b8_107.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Compiled HTML files (.chm) are commonly distributed as part of the Microsoft HTML Help system. Adversaries may conceal malicious code in a CHM file and deliver it to a victim for execution. CHM content is loaded by the HTML Help executable program (hh.exe).", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via Compiled HTML File", + "note": "## Triage and analysis\n\n### Investigating Network Connection via Compiled HTML File\n\nCHM (Compiled HTML) files are a format for delivering online help files on Windows. CHM files are compressed compilations of various content, such as HTML documents, images, and scripting/web-related programming languages such as VBA, JScript, Java, and ActiveX.\n\nWhen users double-click CHM files, the HTML Help executable program (`hh.exe`) will execute them. `hh.exe` also can be used to execute code embedded in those files, PowerShell scripts, and executables. This makes it useful for attackers not only to proxy the execution of malicious payloads via a signed binary that could bypass security controls, but also to gain initial access to environments via social engineering methods.\n\nThis rule identifies network connections done by `hh.exe`, which can potentially indicate abuse to download malicious files or tooling, or masquerading.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Examine the command lines for suspicious activities.\n - Retrieve `.chm`, `.ps1`, and other files that were involved for further examination.\n - Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n - Investigate the file digital signature and process original filename, if suspicious, treat it as potential malware.\n- Investigate the target host that the signed binary is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executables, scripts and help files retrieved from the system using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and process.name : \"hh.exe\" and event.type == \"start\"]\n [network where host.os.type == \"windows\" and process.name : \"hh.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\") and\n not dns.question.name : \"localhost\"]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "b29ee2be-bf99-446c-ab1a-2dc0183394b8", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1204", + "name": "User Execution", + "reference": "https://attack.mitre.org/techniques/T1204/", + "subtechnique": [ + { + "id": "T1204.002", + "name": "Malicious File", + "reference": "https://attack.mitre.org/techniques/T1204/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.001", + "name": "Compiled HTML File", + "reference": "https://attack.mitre.org/techniques/T1218/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "b29ee2be-bf99-446c-ab1a-2dc0183394b8_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b41a13c6-ba45-4bab-a534-df53d0cfed6a_110.json b/packages/security_detection_engine/kibana/security_rule/b41a13c6-ba45-4bab-a534-df53d0cfed6a_110.json new file mode 100644 index 00000000000..8de0a6bcab5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b41a13c6-ba45-4bab-a534-df53d0cfed6a_110.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A suspicious Endpoint Security parent process was detected. This may indicate a process hollowing or other form of code injection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Endpoint Security Parent Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"esensor.exe\", \"elastic-endpoint.exe\") and\n process.parent.executable != null and\n /* add FPs here */\n not process.parent.executable : (\n \"?:\\\\Program Files\\\\Elastic\\\\*\",\n \"?:\\\\Windows\\\\System32\\\\services.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerFault*.exe\",\n \"?:\\\\Windows\\\\System32\\\\wermgr.exe\",\n \"?:\\\\Windows\\\\explorer.exe\"\n ) and\n not (\n process.parent.executable : (\n \"?:\\\\Windows\\\\System32\\\\cmd.exe\",\n \"?:\\\\Windows\\\\System32\\\\SecurityHealthHost.exe\",\n \"?:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe\"\n ) and\n process.args : (\n \"test\", \"version\",\n \"top\", \"run\",\n \"*help\", \"status\",\n \"upgrade\", \"/launch\",\n \"/enable\"\n )\n )\n \n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b41a13c6-ba45-4bab-a534-df53d0cfed6a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "b41a13c6-ba45-4bab-a534-df53d0cfed6a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b4449455-f986-4b5a-82ed-e36b129331f7_106.json b/packages/security_detection_engine/kibana/security_rule/b4449455-f986-4b5a-82ed-e36b129331f7_106.json new file mode 100644 index 00000000000..44ea633072d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b4449455-f986-4b5a-82ed-e36b129331f7_106.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to the Atom desktop text editor Init File. Adversaries may add malicious JavaScript code to the init.coffee file that will be executed upon the Atom application opening.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Persistence via Atom Init Script Modification", + "query": "event.category:file and host.os.type:macos and not event.type:\"deletion\" and\n file.path:/Users/*/.atom/init.coffee and not process.name:(Atom or xpcproxy) and not user.name:root\n", + "references": [ + "https://github.com/D00MFist/PersistentJXA/blob/master/AtomPersist.js", + "https://flight-manual.atom.io/hacking-atom/sections/the-init-file/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "b4449455-f986-4b5a-82ed-e36b129331f7", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "b4449455-f986-4b5a-82ed-e36b129331f7_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b51dbc92-84e2-4af1-ba47-65183fcd0c57_5.json b/packages/security_detection_engine/kibana/security_rule/b51dbc92-84e2-4af1-ba47-65183fcd0c57_5.json new file mode 100644 index 00000000000..25093989b9f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b51dbc92-84e2-4af1-ba47-65183fcd0c57_5.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an attempt to exploit a local privilege escalation (CVE-2023-2640 and CVE-2023-32629) via a flaw in Ubuntu's modifications to OverlayFS. These flaws allow the creation of specialized executables, which, upon execution, grant the ability to escalate privileges to root on the affected machine.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via OverlayFS", + "query": "sequence by process.parent.entity_id, host.id with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name == \"unshare\" and process.args : (\"-r\", \"-rm\", \"m\") and process.args : \"*cap_setuid*\" and user.id != \"0\"]\n [process where host.os.type == \"linux\" and event.action == \"uid_change\" and event.type == \"change\" and \n user.id == \"0\"]\n", + "references": [ + "https://www.wiz.io/blog/ubuntu-overlayfs-vulnerability", + "https://twitter.com/liadeliyahu/status/1684841527959273472" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "b51dbc92-84e2-4af1-ba47-65183fcd0c57", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 5 + }, + "id": "b51dbc92-84e2-4af1-ba47-65183fcd0c57_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b5877334-677f-4fb9-86d5-a9721274223b_110.json b/packages/security_detection_engine/kibana/security_rule/b5877334-677f-4fb9-86d5-a9721274223b_110.json new file mode 100644 index 00000000000..ae15c5e9190 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b5877334-677f-4fb9-86d5-a9721274223b_110.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when a user attempts to clear console history. An adversary may clear the command history of a compromised account to conceal the actions undertaken during an intrusion.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Clearing Windows Console History", + "note": "## Triage and analysis\n\n### Investigating Clearing Windows Console History\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can try to cover their tracks by clearing PowerShell console history. PowerShell has two different ways of logging commands: the built-in history and the command history managed by the PSReadLine module. This rule looks for the execution of commands that can clear the built-in PowerShell logs or delete the `ConsoleHost_history.txt` file.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - Verify if any other anti-forensics behaviors were observed.\n- Investigate the PowerShell logs on the SIEM to determine if there was suspicious behavior that an attacker may be trying to cover up.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n - Ensure that PowerShell auditing policies and log collection are in place to grant future visibility.\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") or ?process.pe.original_file_name == \"PowerShell.EXE\") and\n (process.args : \"*Clear-History*\" or\n (process.args : (\"*Remove-Item*\", \"rm\") and process.args : (\"*ConsoleHost_history.txt*\", \"*(Get-PSReadlineOption).HistorySavePath*\")) or\n (process.args : \"*Set-PSReadlineOption*\" and process.args : \"*SaveNothing*\"))\n", + "references": [ + "https://stefanos.cloud/kb/how-to-clear-the-powershell-command-history/", + "https://www.shellhacks.com/clear-history-powershell/", + "https://community.sophos.com/sophos-labs/b/blog/posts/powershell-command-history-forensics" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b5877334-677f-4fb9-86d5-a9721274223b", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.003", + "name": "Clear Command History", + "reference": "https://attack.mitre.org/techniques/T1070/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "b5877334-677f-4fb9-86d5-a9721274223b_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b5ea4bfe-a1b2-421f-9d47-22a75a6f2921_110.json b/packages/security_detection_engine/kibana/security_rule/b5ea4bfe-a1b2-421f-9d47-22a75a6f2921_110.json new file mode 100644 index 00000000000..d86206e72fb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b5ea4bfe-a1b2-421f-9d47-22a75a6f2921_110.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of vssadmin.exe for shadow copy deletion or resizing on endpoints. This commonly occurs in tandem with ransomware or other destructive attacks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Volume Shadow Copy Deleted or Resized via VssAdmin", + "note": "## Triage and analysis\n\n### Investigating Volume Shadow Copy Deleted or Resized via VssAdmin\n\nThe Volume Shadow Copy Service (VSS) is a Windows feature that enables system administrators to take snapshots of volumes that can later be restored or mounted to recover specific files or folders.\n\nA typical step in the playbook of an attacker attempting to deploy ransomware is to delete Volume Shadow Copies to ensure that victims have no alternative to paying the ransom, making any action that deletes shadow copies worth monitoring.\n\nThis rule monitors the execution of Vssadmin.exe to either delete or resize shadow copies.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- In the case of a resize operation, check if the resize value is equal to suspicious values, like 401MB.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- If unsigned files are found on the process tree, retrieve them and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Use process name, command line, and file hash to search for occurrences in other hosts.\n- Check if any files on the host machine have been encrypted.\n\n\n### False positive analysis\n\n- This rule may produce benign true positives (B-TPs). If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Related rules\n\n- Volume Shadow Copy Deleted or Resized via VssAdmin - b5ea4bfe-a1b2-421f-9d47-22a75a6f2921\n- Volume Shadow Copy Deletion via PowerShell - d99a037b-c8e2-47a5-97b9-170d076827c4\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- Priority should be given due to the advanced stage of this activity on the attack.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- If data was encrypted, deleted, or modified, activate your data recovery plan.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Perform data recovery locally or restore the backups from replicated copies (cloud, other servers, etc.).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\"\n and (process.name : \"vssadmin.exe\" or ?process.pe.original_file_name == \"VSSADMIN.EXE\") and\n process.args in (\"delete\", \"resize\") and process.args : \"shadows*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "b5ea4bfe-a1b2-421f-9d47-22a75a6f2921", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "b5ea4bfe-a1b2-421f-9d47-22a75a6f2921_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b627cd12-dac4-11ec-9582-f661ea17fbcd_106.json b/packages/security_detection_engine/kibana/security_rule/b627cd12-dac4-11ec-9582-f661ea17fbcd_106.json new file mode 100644 index 00000000000..60b365a20b4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b627cd12-dac4-11ec-9582-f661ea17fbcd_106.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the Elastic endpoint agent has stopped and is no longer running on the host. Adversaries may attempt to disable security monitoring tools in an attempt to evade detection or prevention capabilities during an intrusion. This may also indicate an issue with the agent itself and should be addressed to ensure defensive measures are back in a stable state.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Elastic Agent Service Terminated", + "query": "process where\n/* net, sc or wmic stopping or deleting Elastic Agent on Windows */\n(event.type == \"start\" and\n process.name : (\"net.exe\", \"sc.exe\", \"wmic.exe\",\"powershell.exe\",\"taskkill.exe\",\"PsKill.exe\",\"ProcessHacker.exe\") and\n process.args : (\"stopservice\",\"uninstall\", \"stop\", \"disabled\",\"Stop-Process\",\"terminate\",\"suspend\") and\n process.args : (\"elasticendpoint\", \"Elastic Agent\",\"elastic-agent\",\"elastic-endpoint\"))\nor\n/* service or systemctl used to stop Elastic Agent on Linux */\n(event.type == \"end\" and\n (process.name : (\"systemctl\", \"service\") and\n process.args : \"elastic-agent\" and\n process.args : \"stop\")\n or\n /* pkill , killall used to stop Elastic Agent on Linux */\n ( event.type == \"end\" and process.name : (\"pkill\", \"killall\") and process.args: \"elastic-agent\")\n or\n /* Unload Elastic Agent extension on MacOS */\n (process.name : \"kextunload\" and\n process.args : \"com.apple.iokit.EndpointSecurity\" and\n event.action : \"end\"))\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b627cd12-dac4-11ec-9582-f661ea17fbcd", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: Windows", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "b627cd12-dac4-11ec-9582-f661ea17fbcd_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b64b183e-1a76-422d-9179-7b389513e74d_108.json b/packages/security_detection_engine/kibana/security_rule/b64b183e-1a76-422d-9179-7b389513e74d_108.json new file mode 100644 index 00000000000..de88753c3fd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b64b183e-1a76-422d-9179-7b389513e74d_108.json @@ -0,0 +1,159 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the built-in Windows script interpreters (cscript.exe or wscript.exe) being used to execute a process via Windows Management Instrumentation (WMI). This may be indicative of malicious activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Script Interpreter Executing Process via WMI", + "query": "sequence by host.id with maxspan = 5s\n [any where host.os.type == \"windows\" and \n (event.category : (\"library\", \"driver\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (?dll.name : \"wmiutils.dll\" or file.name : \"wmiutils.dll\") and process.name : (\"wscript.exe\", \"cscript.exe\")]\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"wmiprvse.exe\" and\n user.domain != \"NT AUTHORITY\" and\n (process.pe.original_file_name :\n (\n \"cscript.exe\",\n \"wscript.exe\",\n \"PowerShell.EXE\",\n \"Cmd.Exe\",\n \"MSHTA.EXE\",\n \"RUNDLL32.EXE\",\n \"REGSVR32.EXE\",\n \"MSBuild.exe\",\n \"InstallUtil.exe\",\n \"RegAsm.exe\",\n \"RegSvcs.exe\",\n \"msxsl.exe\",\n \"CONTROL.EXE\",\n \"EXPLORER.EXE\",\n \"Microsoft.Workflow.Compiler.exe\",\n \"msiexec.exe\"\n ) or\n process.executable : (\"C:\\\\Users\\\\*.exe\", \"C:\\\\ProgramData\\\\*.exe\")\n )\n ]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b64b183e-1a76-422d-9179-7b389513e74d", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + }, + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "b64b183e-1a76-422d-9179-7b389513e74d_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b661f86d-1c23-4ce7-a59e-2edbdba28247_1.json b/packages/security_detection_engine/kibana/security_rule/b661f86d-1c23-4ce7-a59e-2edbdba28247_1.json new file mode 100644 index 00000000000..3d69f9818c7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b661f86d-1c23-4ce7-a59e-2edbdba28247_1.json @@ -0,0 +1,125 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies commands that can access and decrypt Veeam credentials stored in MSSQL databases. Attackers can use Veeam Credentials to target backups as part of destructive operations such as Ransomware attacks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.process-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Veeam Credential Access Command", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n (process.name : \"sqlcmd.exe\" or process.pe.original_file_name : \"sqlcmd.exe\") or\n process.args : (\"Invoke-Sqlcmd\", \"Invoke-SqlExecute\", \"Invoke-DbaQuery\", \"Invoke-SqlQuery\")\n ) and\n process.args : \"*[VeeamBackup].[dbo].[Credentials]*\"\n", + "references": [ + "https://thedfirreport.com/2021/12/13/diavol-ransomware/" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b661f86d-1c23-4ce7-a59e-2edbdba28247", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 1 + }, + "id": "b661f86d-1c23-4ce7-a59e-2edbdba28247_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b7c05aaf-78c2-4558-b069-87fa25973489_2.json b/packages/security_detection_engine/kibana/security_rule/b7c05aaf-78c2-4558-b069-87fa25973489_2.json new file mode 100644 index 00000000000..9220e6802f1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b7c05aaf-78c2-4558-b069-87fa25973489_2.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects potential buffer overflow attacks by querying the \"Segfault Detected\" pre-built rule signal index, through a threshold rule, with a minimum number of 100 segfault alerts in a short timespan. A large amount of segfaults in a short time interval could indicate application exploitation attempts.", + "from": "now-9m", + "index": [ + ".alerts-security.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Buffer Overflow Attack Detected", + "query": "kibana.alert.rule.rule_id:5c81fc9d-1eae-437f-ba07-268472967013 and event.kind:signal\n", + "required_fields": [ + { + "ecs": true, + "name": "event.kind", + "type": "keyword" + }, + { + "ecs": false, + "name": "kibana.alert.rule.rule_id", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "b7c05aaf-78c2-4558-b069-87fa25973489", + "setup": "## Setup\n\n\nThis rule leverages alert data from other prebuilt detection rules to function correctly. \n\n### Dependent Elastic Detection Rule Enablement\nAs a higher-order rule (based on other detections), this rule also requires the following prerequisite Elastic detection rule to be installed and enabled:\n- Segfault Detected (5c81fc9d-1eae-437f-ba07-268472967013)\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Initial Access", + "Use Case: Vulnerability", + "Rule Type: Higher-Order Rule" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + } + ], + "threshold": { + "field": [ + "event.kind", + "host.id" + ], + "value": 100 + }, + "timestamp_override": "event.ingested", + "type": "threshold", + "version": 2 + }, + "id": "b7c05aaf-78c2-4558-b069-87fa25973489_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b81bd314-db5b-4d97-82e8-88e3e5fc9de5_3.json b/packages/security_detection_engine/kibana/security_rule/b81bd314-db5b-4d97-82e8-88e3e5fc9de5_3.json new file mode 100644 index 00000000000..f6794a3d661 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b81bd314-db5b-4d97-82e8-88e3e5fc9de5_3.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Enrich process events with uname and other command lines that imply Linux system information discovery.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Linux System Information Discovery", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and (\n process.name: \"uname\" or (\n process.name: (\"cat\", \"more\", \"less\") and process.args: (\"*issue*\", \"*version*\", \"*profile*\", \"*services*\", \"*cpuinfo*\")\n )\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "b81bd314-db5b-4d97-82e8-88e3e5fc9de5", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "b81bd314-db5b-4d97-82e8-88e3e5fc9de5_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b8386923-b02c-4b94-986a-d223d9b01f88_5.json b/packages/security_detection_engine/kibana/security_rule/b8386923-b02c-4b94-986a-d223d9b01f88_5.json new file mode 100644 index 00000000000..c5450492628 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b8386923-b02c-4b94-986a-d223d9b01f88_5.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that contain the default exported functions used on Invoke-NinjaCopy. Attackers can use Invoke-NinjaCopy to read SYSTEM files that are normally locked, such as the NTDS.dit file or registry hives.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Invoke-NinjaCopy script", + "note": "## Triage and analysis\n\n### Investigating PowerShell Invoke-NinjaCopy script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks, making it available for use in various environments, creating an attractive way for attackers to execute code.\n\nInvoke-NinjaCopy is a PowerShell script capable of reading SYSTEM files that were normally locked, such as `NTDS.dit` or sensitive registry locations. It does so by using the direct volume access technique, which enables attackers to bypass access control mechanisms and file system monitoring by reading the raw data directly from the disk and extracting the file by parsing the file system structures.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Determine whether the script stores the captured data locally.\n- Check if the imported function was executed and which file it targeted.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"StealthReadFile\" or\n \"StealthReadFileAddr\" or\n \"StealthCloseFileDelegate\" or\n \"StealthOpenFile\" or\n \"StealthCloseFile\" or\n \"StealthReadFile\" or\n \"Invoke-NinjaCopy\"\n )\n and not user.id : \"S-1-5-18\"\n and not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\" and \"PowerSploitIndicators\"\n )\n", + "references": [ + "https://github.com/BC-SECURITY/Empire/blob/main/empire/server/data/module_source/collection/Invoke-NinjaCopy.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b8386923-b02c-4b94-986a-d223d9b01f88", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: PowerShell Logs", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + }, + { + "id": "T1003.003", + "name": "NTDS", + "reference": "https://attack.mitre.org/techniques/T1003/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1006", + "name": "Direct Volume Access", + "reference": "https://attack.mitre.org/techniques/T1006/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 5 + }, + "id": "b8386923-b02c-4b94-986a-d223d9b01f88_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b83a7e96-2eb3-4edf-8346-427b6858d3bd_107.json b/packages/security_detection_engine/kibana/security_rule/b83a7e96-2eb3-4edf-8346-427b6858d3bd_107.json new file mode 100644 index 00000000000..d5ee8e4032a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b83a7e96-2eb3-4edf-8346-427b6858d3bd_107.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of Domain Backup private keys. Adversaries may extract the Data Protection API (DPAPI) domain backup key from a Domain Controller (DC) to be able to decrypt any domain user master key file.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation or Modification of Domain Backup DPAPI private key", + "note": "## Triage and analysis\n\nDomain DPAPI Backup keys are stored on domain controllers and can be dumped remotely with tools such as Mimikatz. The resulting .pvk private key can be used to decrypt ANY domain user masterkeys, which then can be used to decrypt any secrets protected by those keys.\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and file.name : (\"ntds_capi_*.pfx\", \"ntds_capi_*.pvk\")\n", + "references": [ + "https://www.dsinternals.com/en/retrieving-dpapi-backup-keys-from-active-directory/", + "https://posts.specterops.io/operational-guidance-for-offensive-user-dpapi-abuse-1fb7fac8b107" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "b83a7e96-2eb3-4edf-8346-427b6858d3bd", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1552", + "name": "Unsecured Credentials", + "reference": "https://attack.mitre.org/techniques/T1552/", + "subtechnique": [ + { + "id": "T1552.004", + "name": "Private Keys", + "reference": "https://attack.mitre.org/techniques/T1552/004/" + } + ] + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "b83a7e96-2eb3-4edf-8346-427b6858d3bd_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b86afe07-0d98-4738-b15d-8d7465f95ff5_105.json b/packages/security_detection_engine/kibana/security_rule/b86afe07-0d98-4738-b15d-8d7465f95ff5_105.json new file mode 100644 index 00000000000..80ef7199cff --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b86afe07-0d98-4738-b15d-8d7465f95ff5_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies msxsl.exe making a network connection. This may indicate adversarial activity as msxsl.exe is often leveraged by adversaries to execute malicious scripts and evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via MsXsl", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and process.name : \"msxsl.exe\" and event.type == \"start\"]\n [network where host.os.type == \"windows\" and process.name : \"msxsl.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\")]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "b86afe07-0d98-4738-b15d-8d7465f95ff5", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1220", + "name": "XSL Script Processing", + "reference": "https://attack.mitre.org/techniques/T1220/" + } + ] + } + ], + "type": "eql", + "version": 105 + }, + "id": "b86afe07-0d98-4738-b15d-8d7465f95ff5_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4.json b/packages/security_detection_engine/kibana/security_rule/b8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4.json new file mode 100644 index 00000000000..f5da64afb13 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4.json @@ -0,0 +1,79 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of .kirbi files. The creation of this kind of file is an indicator of an attacker running Kerberos ticket dump utilities, such as Mimikatz, and precedes attacks such as Pass-The-Ticket (PTT), which allows the attacker to impersonate users using Kerberos tickets.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Kirbi File Creation", + "query": "file where host.os.type == \"windows\" and event.type == \"creation\" and file.extension : \"kirbi\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b8f8da2d-a9dc-48c0-90e4-955c0aa1259a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "b8f8da2d-a9dc-48c0-90e4-955c0aa1259a_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b90cdde7-7e0d-4359-8bf0-2c112ce2008a_108.json b/packages/security_detection_engine/kibana/security_rule/b90cdde7-7e0d-4359-8bf0-2c112ce2008a_108.json new file mode 100644 index 00000000000..2950f2d8ad1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b90cdde7-7e0d-4359-8bf0-2c112ce2008a_108.json @@ -0,0 +1,152 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to bypass User Account Control (UAC) by abusing an elevated COM Interface to launch a rogue Windows ClipUp program. Attackers may attempt to bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass Attempt with IEditionUpgradeManager Elevated COM Interface", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"Clipup.exe\" and\n not process.executable : \"C:\\\\Windows\\\\System32\\\\ClipUp.exe\" and process.parent.name : \"dllhost.exe\" and\n /* CLSID of the Elevated COM Interface IEditionUpgradeManager */\n process.parent.args : \"/Processid:{BD54C901-076B-434E-B6C7-17C531F4AB41}\"\n", + "references": [ + "https://github.com/hfiref0x/UACME" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "b90cdde7-7e0d-4359-8bf0-2c112ce2008a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/", + "subtechnique": [ + { + "id": "T1559.001", + "name": "Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1559/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "b90cdde7-7e0d-4359-8bf0-2c112ce2008a_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b910f25a-2d44-47f2-a873-aabdc0d355e6_111.json b/packages/security_detection_engine/kibana/security_rule/b910f25a-2d44-47f2-a873-aabdc0d355e6_111.json new file mode 100644 index 00000000000..1b49dfa371a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b910f25a-2d44-47f2-a873-aabdc0d355e6_111.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of the chkconfig binary to manually add a service for management by chkconfig. Threat actors may utilize this technique to maintain persistence on a system. When a new service is added, chkconfig ensures that the service has either a start or a kill entry in every runlevel and when the system is rebooted the service file added will run providing long-term persistence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Chkconfig Service Add", + "note": "## Triage and analysis\n\n### Investigating Chkconfig Service Add\nService files are configuration files in Linux systems used to define and manage system services. The `Chkconfig` binary can be used to manually add, delete or modify a service. \n\nMalicious actors can leverage services to achieve persistence by creating or modifying service files to execute malicious commands or payloads during system startup. This allows them to maintain unauthorized access, execute additional malicious activities, or evade detection.\n\nThis rule monitors the usage of the `chkconfig` binary to manually add a service for management by `chkconfig`, potentially indicating the creation of a persistence mechanism.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the service that was created or modified.\n- Investigate the currently enabled system services through the following commands `sudo chkconfig --list | grep on` and `sudo systemctl list-unit-files`.\n- Investigate the status of potentially suspicious services through the `chkconfig --list service_name` command. \n- Search for the `rc.d` or `init.d` service files that were created or modified, and analyze their contents.\n- Investigate whether any other files in any of the available `rc.d` or `init.d` directories have been altered through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (path LIKE '/etc/init.d/%' OR path LIKE '/etc/rc%.d/%')\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (path LIKE '/etc/init.d/%' OR path LIKE '/etc/rc%.d/%')\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate syslog through the `sudo cat /var/log/syslog | grep 'LSB'` command to find traces of the LSB header of the script (if present). If syslog is being ingested into Elasticsearch, the same can be accomplished through Kibana.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses the `chkconfig` binary for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Suspicious File Creation in /etc for Persistence - 1c84dd64-7e6c-4bad-ac73-a5014ee37042\n- Potential Persistence Through Run Control Detected - 0f4d35e4-925e-4959-ab24-911be207ee6f\n- Potential Persistence Through init.d Detected - 474fd20e-14cc-49c5-8160-d9ab4ba16c8b\n- New Systemd Timer Created - 7fb500fa-8e24-4bd1-9480-2a819352602c\n- New Systemd Service Created by Previously Unknown Process - 17b0a495-4d9f-414c-8ad0-92f018b8e001\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the service/timer or restore its original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.action in (\"exec\", \"exec_event\") and\n( \n (process.executable : \"/usr/sbin/chkconfig\" and process.args : \"--add\") or\n (process.args : \"*chkconfig\" and process.args : \"--add\")\n) and \nnot process.parent.name in (\"rpm\", \"qualys-scan-util\", \"qualys-cloud-agent\", \"update-alternatives\") and\nnot process.parent.args : (\"/var/tmp/rpm*\", \"/var/lib/waagent/*\")\n", + "references": [ + "https://www.intezer.com/blog/research/lightning-framework-new-linux-threat/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b910f25a-2d44-47f2-a873-aabdc0d355e6", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Threat: Lightning Framework", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/", + "subtechnique": [ + { + "id": "T1037.004", + "name": "RC Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "b910f25a-2d44-47f2-a873-aabdc0d355e6_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2.json b/packages/security_detection_engine/kibana/security_rule/b92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2.json new file mode 100644 index 00000000000..bcd6a10dfe6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the execution of Linux built-in commands related to account or group enumeration. Adversaries may use account and group information to orient themselves before deciding how to act.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Discovery of Domain Groups", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and (\n process.name in (\"ldapsearch\", \"dscacheutil\") or (process.name == \"dscl\" and process.args : \"*-list*\")\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "b92d5eae-70bb-4b66-be27-f98ba9d0ccdc", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "b92d5eae-70bb-4b66-be27-f98ba9d0ccdc_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b9554892-5e0e-424b-83a0-5aef95aa43bf_109.json b/packages/security_detection_engine/kibana/security_rule/b9554892-5e0e-424b-83a0-5aef95aa43bf_109.json new file mode 100644 index 00000000000..03fa1717662 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b9554892-5e0e-424b-83a0-5aef95aa43bf_109.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the first occurrence of a modification to Group Policy Object Attributes to add privileges to user accounts or use them to add users as local admins.", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Group Policy Abuse for Privilege Addition", + "note": "## Triage and analysis\n\n### Investigating Group Policy Abuse for Privilege Addition\n\nGroup Policy Objects (GPOs) can be used to add rights and/or modify Group Membership on GPOs by changing the contents of an INF file named GptTmpl.inf, which is responsible for storing every setting under the Security Settings container in the GPO. This file is unique for each GPO, and only exists if the GPO contains security settings. Example Path: \"\\\\DC.com\\SysVol\\DC.com\\Policies\\{PolicyGUID}\\Machine\\Microsoft\\Windows NT\\SecEdit\\GptTmpl.inf\"\n\n#### Possible investigation steps\n\n- This attack abuses a legitimate mechanism of Active Directory, so it is important to determine whether the activity is legitimate and the administrator is authorized to perform this operation.\n- Retrieve the contents of the `GptTmpl.inf` file, and under the `Privilege Rights` section, look for potentially dangerous high privileges, for example: SeTakeOwnershipPrivilege, SeEnableDelegationPrivilege, etc.\n- Inspect the user security identifiers (SIDs) associated with these privileges, and if they should have these privileges.\n\n### False positive analysis\n\n- Inspect whether the user that has done the modifications should be allowed to. The user name can be found in the `winlog.event_data.SubjectUserName` field.\n\n### Related rules\n\n- Scheduled Task Execution at Scale via GPO - 15a8ba77-1c13-4274-88fe-6bd14133861e\n- Startup/Logon Script added to Group Policy Object - 16fac1a1-21ee-4ca6-b720-458e3855d046\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- The investigation and containment must be performed in every computer controlled by the GPO, where necessary.\n- Remove the script from the GPO.\n- Check if other GPOs have suspicious scripts attached.\n", + "query": "event.code: \"5136\" and\n winlog.event_data.AttributeLDAPDisplayName:\"gPCMachineExtensionNames\" and\n winlog.event_data.AttributeValue:(*827D319E-6EAC-11D2-A4EA-00C04F79F83A* and *803E14A0-B4FB-11D0-A0D0-00A0C90F574B*)\n", + "references": [ + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0025_windows_audit_directory_service_changes.md", + "https://labs.f-secure.com/tools/sharpgpoabuse" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeLDAPDisplayName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.AttributeValue", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "b9554892-5e0e-424b-83a0-5aef95aa43bf", + "setup": "## Setup\n\nThe 'Audit Directory Service Changes' audit policy must be configured (Success Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Changes (Success,Failure)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1484", + "name": "Domain Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/", + "subtechnique": [ + { + "id": "T1484.001", + "name": "Group Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 109 + }, + "id": "b9554892-5e0e-424b-83a0-5aef95aa43bf_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b9666521-4742-49ce-9ddc-b8e84c35acae_110.json b/packages/security_detection_engine/kibana/security_rule/b9666521-4742-49ce-9ddc-b8e84c35acae_110.json new file mode 100644 index 00000000000..aefce80cae5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b9666521-4742-49ce-9ddc-b8e84c35acae_110.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Users can mark specific files as hidden simply by putting a \".\" as the first character in the file or folder name. Adversaries can use this to their advantage to hide files and folders on the system for persistence and defense evasion. This rule looks for hidden files or folders in common writable directories.", + "false_positives": [ + "Certain tools may create hidden temporary files or directories upon installation or as part of their normal behavior. These events can be filtered by the process arguments, username, or process name values." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Creation of Hidden Files and Directories via CommandLine", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\nprocess.working_directory in (\"/tmp\", \"/var/tmp\", \"/dev/shm\") and\nprocess.args regex~ \"\"\"\\.[a-z0-9_\\-][a-z0-9_\\-\\.]{1,254}\"\"\" and\nnot process.name in (\"ls\", \"find\", \"grep\", \"git\", \"jq\", \"basename\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.working_directory", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b9666521-4742-49ce-9ddc-b8e84c35acae", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/", + "subtechnique": [ + { + "id": "T1564.001", + "name": "Hidden Files and Directories", + "reference": "https://attack.mitre.org/techniques/T1564/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "b9666521-4742-49ce-9ddc-b8e84c35acae_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/b9960fef-82c6-4816-befa-44745030e917_108.json b/packages/security_detection_engine/kibana/security_rule/b9960fef-82c6-4816-befa-44745030e917_108.json new file mode 100644 index 00000000000..279ecbc4adc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/b9960fef-82c6-4816-befa-44745030e917_108.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a SolarWinds binary modifying the start type of a service to be disabled. An adversary may abuse this technique to manipulate relevant security services.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "SolarWinds Process Disabling Services via Registry", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\Start\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Services\\\\*\\\\Start\"\n ) and\n registry.data.strings : (\"4\", \"0x00000004\") and\n process.name : (\n \"SolarWinds.BusinessLayerHost*.exe\",\n \"ConfigurationWizard*.exe\",\n \"NetflowDatabaseMaintenance*.exe\",\n \"NetFlowService*.exe\",\n \"SolarWinds.Administration*.exe\",\n \"SolarWinds.Collector.Service*.exe\",\n \"SolarwindsDiagnostics*.exe\")\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "b9960fef-82c6-4816-befa-44745030e917", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Initial Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1195", + "name": "Supply Chain Compromise", + "reference": "https://attack.mitre.org/techniques/T1195/", + "subtechnique": [ + { + "id": "T1195.002", + "name": "Compromise Software Supply Chain", + "reference": "https://attack.mitre.org/techniques/T1195/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "b9960fef-82c6-4816-befa-44745030e917_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ba81c182-4287-489d-af4d-8ae834b06040_3.json b/packages/security_detection_engine/kibana/security_rule/ba81c182-4287-489d-af4d-8ae834b06040_3.json new file mode 100644 index 00000000000..ea6383e6d9f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ba81c182-4287-489d-af4d-8ae834b06040_3.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the loading of a Linux kernel module by a non-root user through system calls. Threat actors may leverage Linux kernel modules to load a rootkit on a system providing them with complete control and the ability to hide from security products. As other rules monitor for the addition of Linux kernel modules through system utilities or .ko files, this rule covers the gap that evasive rootkits leverage by monitoring for kernel module additions on the lowest level through auditd_manager.", + "from": "now-9m", + "index": [ + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Kernel Driver Load by non-root User", + "query": "driver where host.os.type == \"linux\" and event.action == \"loaded-kernel-module\" and\nauditd.data.syscall in (\"init_module\", \"finit_module\") and user.id != \"0\"\n", + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ba81c182-4287-489d-af4d-8ae834b06040", + "setup": "## Setup\n\n\nThis rule requires data coming in from Auditd Manager.\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule the following additional audit rules are required to be added to the integration:\n -- \"-a always,exit -F arch=b64 -S finit_module -S init_module -S delete_module -F auid!=-1 -k modules\"\n -- \"-a always,exit -F arch=b32 -S finit_module -S init_module -S delete_module -F auid!=-1 -k modules\"\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "ba81c182-4287-489d-af4d-8ae834b06040_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/baa5d22c-5e1c-4f33-bfc9-efa73bb53022_108.json b/packages/security_detection_engine/kibana/security_rule/baa5d22c-5e1c-4f33-bfc9-efa73bb53022_108.json new file mode 100644 index 00000000000..fcd8ac1f8b1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/baa5d22c-5e1c-4f33-bfc9-efa73bb53022_108.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious image load (taskschd.dll) from Microsoft Office processes. This behavior may indicate adversarial activity where a scheduled task is configured via Windows Component Object Model (COM). This technique can be used to configure persistence and evade monitoring by avoiding the usage of the traditional Windows binary (schtasks.exe) used to manage scheduled tasks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Image Load (taskschd.dll) from MS Office", + "note": "## Triage and analysis\n\n### Investigating Suspicious Image Load (taskschd.dll) from MS Office\n\nMicrosoft Office, a widely used suite of productivity applications, is frequently targeted by attackers due to its popularity in corporate environments. These attackers exploit its extensive capabilities, like macro scripts in Word and Excel, to gain initial access to systems. They often use Office documents as delivery mechanisms for malware or phishing attempts, taking advantage of their trusted status in professional settings.\n\n`taskschd.dll` provides Command Object Model (COM) interfaces for the Windows Task Scheduler service, allowing developers to programmatically manage scheduled tasks.\n\nThis rule looks for an MS Office process loading `taskschd.dll`, which may indicate an adversary abusing COM to configure a scheduled task. This can happen as part of a phishing attack, when a malicious office document registers the scheduled task to download the malware \"stage 2\" or to establish persistent access.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Analyze the host's scheduled tasks and explore the related Windows events to determine if tasks were created or deleted (Event IDs 4698 and 4699).\n- Investigate any abnormal behavior by the subject process, such as network connections, registry or file modifications, and spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Examine the files downloaded during the past 24 hours.\n - Identify files that are related or can be executed in MS Office.\n - Identify and analyze macros that these documents contain.\n - Identify suspicious traits in the office macros, such as encoded or encrypted sections.\n- Retrieve the suspicious files identified in the previous step and determine if they are malicious:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Related Rules\n\n- Suspicious WMI Image Load from MS Office - 891cb88e-441a-4c3e-be2d-120d99fe7b0d\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where host.os.type == \"windows\" and\n (event.category : (\"library\", \"driver\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n process.name : (\"WINWORD.EXE\", \"EXCEL.EXE\", \"POWERPNT.EXE\", \"MSPUB.EXE\", \"MSACCESS.EXE\") and\n (?dll.name : \"taskschd.dll\" or file.name : \"taskschd.dll\")\n", + "references": [ + "https://medium.com/threatpunter/detecting-adversary-tradecraft-with-image-load-event-logging-and-eql-8de93338c16", + "https://www.clearskysec.com/wp-content/uploads/2020/10/Operation-Quicksand.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "baa5d22c-5e1c-4f33-bfc9-efa73bb53022", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "baa5d22c-5e1c-4f33-bfc9-efa73bb53022_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bba1b212-b85c-41c6-9b28-be0e5cdfc9b1_105.json b/packages/security_detection_engine/kibana/security_rule/bba1b212-b85c-41c6-9b28-be0e5cdfc9b1_105.json new file mode 100644 index 00000000000..c5a4b3785e9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bba1b212-b85c-41c6-9b28-be0e5cdfc9b1_105.json @@ -0,0 +1,83 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the occurence of files uploaded to OneDrive being detected as Malware by the file scanning engine. Attackers can use File Sharing and Organization Repositories to spread laterally within the company and amplify their access. Users can inadvertently share these files without knowing their maliciousness, giving adversaries opportunity to gain initial access to other endpoints in the environment.", + "false_positives": [ + "Benign files can trigger signatures in the built-in virus protection" + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "OneDrive Malware File Upload", + "note": "", + "query": "event.dataset:o365.audit and event.provider:OneDrive and event.code:SharePointFileOperation and event.action:FileMalwareDetected\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/virus-detection-in-spo?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "bba1b212-b85c-41c6-9b28-be0e5cdfc9b1", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "high", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1080", + "name": "Taint Shared Content", + "reference": "https://attack.mitre.org/techniques/T1080/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "bba1b212-b85c-41c6-9b28-be0e5cdfc9b1_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bbd1a775-8267-41fa-9232-20e5582596ac_106.json b/packages/security_detection_engine/kibana/security_rule/bbd1a775-8267-41fa-9232-20e5582596ac_106.json new file mode 100644 index 00000000000..a67be068eb3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bbd1a775-8267-41fa-9232-20e5582596ac_106.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when custom applications are allowed in Microsoft Teams. If an organization requires applications other than those available in the Teams app store, custom applications can be developed as packages and uploaded. An adversary may abuse this behavior to establish persistence in an environment.", + "false_positives": [ + "Custom applications may be allowed by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Teams Custom Application Interaction Allowed", + "note": "", + "query": "event.dataset:o365.audit and event.provider:MicrosoftTeams and\nevent.category:web and event.action:TeamsTenantSettingChanged and\no365.audit.Name:\"Allow sideloading and interaction of custom apps\" and\no365.audit.NewValue:True and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/deploy-and-publish/apps-upload" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Name", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.NewValue", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "bbd1a775-8267-41fa-9232-20e5582596ac", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "bbd1a775-8267-41fa-9232-20e5582596ac_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bc0fc359-68db-421e-a435-348ced7a7f92_2.json b/packages/security_detection_engine/kibana/security_rule/bc0fc359-68db-421e-a435-348ced7a7f92_2.json new file mode 100644 index 00000000000..0049725f6ca --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bc0fc359-68db-421e-a435-348ced7a7f92_2.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an attempt to exploit a local privilege escalation CVE-2022-37706 via a flaw in Linux window manager package Enlightenment. enlightenment_sys in Enlightenment before 0.25.4 allows local users to gain privileges because it is setuid root, and the system library function mishandles pathnames that begin with a /dev/.. substring.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via Enlightenment", + "query": "sequence by host.id, process.parent.entity_id with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name == \"enlightenment_sys\" and process.args in (\"/bin/mount/\", \"-o\",\"noexec\",\"nosuid\",\"nodev\",\"uid=*\") ]\n [process where host.os.type == \"linux\" and event.action == \"uid_change\" and event.type == \"change\" and user.id == \"0\"]\n", + "references": [ + "https://ubuntu.com/security/CVE-2022-37706", + "https://www.exploit-db.com/exploits/51180" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "bc0fc359-68db-421e-a435-348ced7a7f92", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "bc0fc359-68db-421e-a435-348ced7a7f92_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bc1eeacf-2972-434f-b782-3a532b100d67_106.json b/packages/security_detection_engine/kibana/security_rule/bc1eeacf-2972-434f-b782-3a532b100d67_106.json new file mode 100644 index 00000000000..bb1b36cfffa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bc1eeacf-2972-434f-b782-3a532b100d67_106.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may install a root certificate on a compromised system to avoid warnings when connecting to their command and control servers. Root certificates are used in public key cryptography to identify a root certificate authority (CA). When a root certificate is installed, the system or application will trust certificates in the root's chain of trust that have been signed by the root certificate.", + "false_positives": [ + "Certain applications may install root certificates for the purpose of inspecting SSL traffic." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Attempt to Install Root Certificate", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:security and process.args:\"add-trusted-cert\" and\n not process.parent.executable:(\"/Library/Bitdefender/AVP/product/bin/BDCoreIssues\" or \"/Applications/Bitdefender/SecurityNetworkInstallerApp.app/Contents/MacOS/SecurityNetworkInstallerApp\"\n)\n", + "references": [ + "https://ss64.com/osx/security-cert.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "bc1eeacf-2972-434f-b782-3a532b100d67", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/", + "subtechnique": [ + { + "id": "T1553.004", + "name": "Install Root Certificate", + "reference": "https://attack.mitre.org/techniques/T1553/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "bc1eeacf-2972-434f-b782-3a532b100d67_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bcaa15ce-2d41-44d7-a322-918f9db77766_3.json b/packages/security_detection_engine/kibana/security_rule/bcaa15ce-2d41-44d7-a322-918f9db77766_3.json new file mode 100644 index 00000000000..a02aff91063 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bcaa15ce-2d41-44d7-a322-918f9db77766_3.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A supervised machine learning model has identified a DNS question name that used by the SUNBURST malware and is predicted to be the result of a Domain Generation Algorithm.", + "from": "now-10m", + "index": [ + "logs-endpoint.events.*", + "logs-network_traffic.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Machine Learning Detected DGA activity using a known SUNBURST DNS domain", + "query": "ml_is_dga.malicious_prediction:1 and dns.question.registered_domain:avsvmcloud.com\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/dga", + "https://www.elastic.co/security-labs/detect-domain-generation-algorithm-activity-with-new-kibana-integration" + ], + "related_integrations": [ + { + "package": "dga", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dns.question.registered_domain", + "type": "keyword" + }, + { + "ecs": false, + "name": "ml_is_dga.malicious_prediction", + "type": "unknown" + } + ], + "risk_score": 99, + "rule_id": "bcaa15ce-2d41-44d7-a322-918f9db77766", + "setup": "## Setup\n\nThe rule requires the Domain Generation Algorithm (DGA) Detection integration assets to be installed, as well as DNS events collected by integrations such as Elastic Defend, Network Packet Capture, or Packetbeat. \n\n### DGA Detection Setup\nThe DGA Detection integration consists of an ML-based framework to detect DGA activity in DNS events.\n\n#### Prerequisite Requirements:\n- Fleet is required for DGA Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- DNS events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint), [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration, or [Packetbeat](https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n- To set up and run Packetbeat, follow [this](https://www.elastic.co/guide/en/beats/packetbeat/current/setting-up-and-running.html) guide.\n\n#### The following steps should be executed to install assets associated with the DGA Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Domain Generation Algorithm Detection and select the integration to see more details about it.\n- Under Settings, click Install Domain Generation Algorithm Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich DNS events with predictions from the Supervised DGA Detection model. This is done via the ingest pipeline named `-ml_dga_ingest_pipeline` installed with the DGA Detection package.\n- If using an Elastic Beat such as Packetbeat, add the DGA ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `packetbeat.yml`.\n- If adding the DGA ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the DGA ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"ml_is_dga\": {\n \"properties\": {\n \"malicious_prediction\": {\n \"type\": \"long\"\n },\n \"malicious_probability\": {\n \"type\": \"float\"\n }\n }\n }\n }\n}\n``` \n", + "severity": "critical", + "tags": [ + "Domain: Network", + "Domain: Endpoint", + "Data Source: Elastic Defend", + "Use Case: Domain Generation Algorithm Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1568", + "name": "Dynamic Resolution", + "reference": "https://attack.mitre.org/techniques/T1568/", + "subtechnique": [ + { + "id": "T1568.002", + "name": "Domain Generation Algorithms", + "reference": "https://attack.mitre.org/techniques/T1568/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 3 + }, + "id": "bcaa15ce-2d41-44d7-a322-918f9db77766_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bd2c86a0-8b61-4457-ab38-96943984e889_112.json b/packages/security_detection_engine/kibana/security_rule/bd2c86a0-8b61-4457-ab38-96943984e889_112.json new file mode 100644 index 00000000000..262360794f1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bd2c86a0-8b61-4457-ab38-96943984e889_112.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of Win32 API Functions that can be used to capture user keystrokes in PowerShell scripts. Attackers use this technique to capture user input, looking for credentials and/or other valuable data.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Keylogging Script", + "note": "## Triage and analysis\n\n### Investigating PowerShell Keylogging Script\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can abuse PowerShell capabilities to capture user keystrokes with the goal of stealing credentials and other valuable information as credit card data and confidential conversations.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Determine whether the script stores the captured data locally.\n- Investigate whether the script contains exfiltration capabilities and identify the exfiltration server.\n- Assess network data to determine if the host communicated with the exfiltration server.\n\n### False positive analysis\n\n- Regular users do not have a business justification for using scripting utilities to capture keystrokes, making false positives unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Prioritize the response if this alert involves key executives or potentially valuable targets for espionage.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n (\n powershell.file.script_block_text : (GetAsyncKeyState or NtUserGetAsyncKeyState or GetKeyboardState or \"Get-Keystrokes\") or\n powershell.file.script_block_text : (\n (SetWindowsHookA or SetWindowsHookW or SetWindowsHookEx or SetWindowsHookExA or NtUserSetWindowsHookEx) and\n (GetForegroundWindow or GetWindowTextA or GetWindowTextW or \"WM_KEYBOARD_LL\" or \"WH_MOUSE_LL\")\n )\n ) and not user.id : \"S-1-5-18\"\n and not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\"\n )\n", + "references": [ + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/collection/Get-Keystrokes.ps1", + "https://github.com/MojtabaTajik/FunnyKeylogger/blob/master/FunnyLogger.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "bd2c86a0-8b61-4457-ab38-96943984e889", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1056", + "name": "Input Capture", + "reference": "https://attack.mitre.org/techniques/T1056/", + "subtechnique": [ + { + "id": "T1056.001", + "name": "Keylogging", + "reference": "https://attack.mitre.org/techniques/T1056/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + }, + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 112 + }, + "id": "bd2c86a0-8b61-4457-ab38-96943984e889_112", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bd7eefee-f671-494e-98df-f01daf9e5f17_105.json b/packages/security_detection_engine/kibana/security_rule/bd7eefee-f671-494e-98df-f01daf9e5f17_105.json new file mode 100644 index 00000000000..228331e24ee --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bd7eefee-f671-494e-98df-f01daf9e5f17_105.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to exploit a privilege escalation vulnerability (CVE-2020-1030) related to the print spooler service. Exploitation involves chaining multiple primitives to load an arbitrary DLL into the print spooler process running as SYSTEM.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Print Spooler Point and Print DLL", + "query": "sequence by host.id with maxspan=30s\n[registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Print\\\\Printers\\\\*\\\\SpoolDirectory\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Print\\\\Printers\\\\*\\\\SpoolDirectory\"\n ) and\n registry.data.strings : \"C:\\\\Windows\\\\System32\\\\spool\\\\drivers\\\\x64\\\\4\"]\n[registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Print\\\\Printers\\\\*\\\\CopyFiles\\\\Payload\\\\Module\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Print\\\\Printers\\\\*\\\\CopyFiles\\\\Payload\\\\Module\"\n ) and\n registry.data.strings : \"C:\\\\Windows\\\\System32\\\\spool\\\\drivers\\\\x64\\\\4\\\\*\"]\n", + "references": [ + "https://www.accenture.com/us-en/blogs/cyber-defense/discovering-exploiting-shutting-down-dangerous-windows-print-spooler-vulnerability", + "https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES/blob/master/Privilege%20Escalation/privesc_sysmon_cve_20201030_spooler.evtx", + "https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2020-1030" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "bd7eefee-f671-494e-98df-f01daf9e5f17", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 105 + }, + "id": "bd7eefee-f671-494e-98df-f01daf9e5f17_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bdb04043-f0e3-4efa-bdee-7d9d13fa9edc_7.json b/packages/security_detection_engine/kibana/security_rule/bdb04043-f0e3-4efa-bdee-7d9d13fa9edc_7.json new file mode 100644 index 00000000000..9e923a20478 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bdb04043-f0e3-4efa-bdee-7d9d13fa9edc_7.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule leverages auditd to monitor for processes scanning different processes within the /proc directory using the openat syscall. This is a strong indication for the usage of the pspy utility. Attackers may leverage the pspy process monitoring utility to monitor system processes without requiring root permissions, in order to find potential privilege escalation vectors.", + "from": "now-9m", + "index": [ + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Pspy Process Monitoring Detected", + "query": "sequence by process.pid, host.id with maxspan=5s\n [file where host.os.type == \"linux\" and auditd.data.syscall == \"openat\" and file.path == \"/proc\" and\n auditd.data.a0 : (\"ffffffffffffff9c\", \"ffffff9c\") and auditd.data.a2 : (\"80000\", \"88000\") ] with runs=10\n", + "references": [ + "https://github.com/DominicBreuker/pspy" + ], + "related_integrations": [ + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "auditd.data.a0", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.a2", + "type": "unknown" + }, + { + "ecs": false, + "name": "auditd.data.syscall", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 21, + "rule_id": "bdb04043-f0e3-4efa-bdee-7d9d13fa9edc", + "setup": "## Setup\n\nThis rule requires data coming in from Auditd Manager.\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule the following additional audit rules are required to be added to the integration:\n -- \"-w /proc/ -p r -k audit_proc\"\n", + "severity": "low", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + }, + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "bdb04043-f0e3-4efa-bdee-7d9d13fa9edc_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bdcf646b-08d4-492c-870a-6c04e3700034_108.json b/packages/security_detection_engine/kibana/security_rule/bdcf646b-08d4-492c-870a-6c04e3700034_108.json new file mode 100644 index 00000000000..a577d3eff1e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bdcf646b-08d4-492c-870a-6c04e3700034_108.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious computer account name rename event, which may indicate an attempt to exploit CVE-2021-42278 to elevate privileges from a standard domain user to a user with domain admin privileges. CVE-2021-42278 is a security vulnerability that allows potential attackers to impersonate a domain controller via samAccountName attribute spoofing.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privileged Escalation via SamAccountName Spoofing", + "query": "iam where event.action == \"renamed-user-account\" and\n /* machine account name renamed to user like account name */\n winlog.event_data.OldTargetUserName : \"*$\" and not winlog.event_data.NewTargetUserName : \"*$\"\n", + "references": [ + "https://support.microsoft.com/en-us/topic/kb5008102-active-directory-security-accounts-manager-hardening-changes-cve-2021-42278-5975b463-4c95-45e1-831a-d120004e258e", + "https://cloudbrothers.info/en/exploit-kerberos-samaccountname-spoofing/", + "https://github.com/cube0x0/noPac", + "https://twitter.com/exploitph/status/1469157138928914432", + "https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.NewTargetUserName", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.OldTargetUserName", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "bdcf646b-08d4-492c-870a-6c04e3700034", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory", + "Use Case: Vulnerability" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + }, + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "bdcf646b-08d4-492c-870a-6c04e3700034_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bdfebe11-e169-42e3-b344-c5d2015533d3_3.json b/packages/security_detection_engine/kibana/security_rule/bdfebe11-e169-42e3-b344-c5d2015533d3_3.json new file mode 100644 index 00000000000..c840a2ffa42 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bdfebe11-e169-42e3-b344-c5d2015533d3_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job combination has detected a set of one or more suspicious Windows processes with unusually high scores for malicious probability. These process(es) have been classified as malicious in several ways. The process(es) were predicted to be malicious by the ProblemChild supervised ML model. If the anomaly contains a cluster of suspicious processes, each process has the same host name, and the aggregate score of the event cluster was calculated to be unusually high by an unsupervised ML model. Such a cluster often contains suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_high_sum_by_host", + "name": "Suspicious Windows Process Cluster Spawned by a Host", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "bdfebe11-e169-42e3-b344-c5d2015533d3", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "bdfebe11-e169-42e3-b344-c5d2015533d3_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/be4c5aed-90f5-4221-8bd5-7ab3a4334751_3.json b/packages/security_detection_engine/kibana/security_rule/be4c5aed-90f5-4221-8bd5-7ab3a4334751_3.json new file mode 100644 index 00000000000..f7dbdaf5c59 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/be4c5aed-90f5-4221-8bd5-7ab3a4334751_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "An anomaly detection job has detected a remote file transfer on an unusual directory indicating a potential lateral movement activity on the host. Many Security solutions monitor well-known directories for suspicious activities, so attackers might use less common directories to bypass monitoring.", + "from": "now-90m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_rare_file_path_remote_transfer", + "name": "Unusual Remote File Directory", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "be4c5aed-90f5-4221-8bd5-7ab3a4334751", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "be4c5aed-90f5-4221-8bd5-7ab3a4334751_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/be8afaed-4bcd-4e0a-b5f9-5562003dde81_108.json b/packages/security_detection_engine/kibana/security_rule/be8afaed-4bcd-4e0a-b5f9-5562003dde81_108.json new file mode 100644 index 00000000000..6cc9d1723f0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/be8afaed-4bcd-4e0a-b5f9-5562003dde81_108.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Windows Credential Manager allows you to create, view, or delete saved credentials for signing into websites, connected applications, and networks. An adversary may abuse this to list or dump credentials stored in the Credential Manager for saved usernames and passwords. This may also be performed in preparation of lateral movement.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Searching for Saved Credentials via VaultCmd", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (?process.pe.original_file_name:\"vaultcmd.exe\" or process.name:\"vaultcmd.exe\") and\n process.args:\"/list*\"\n", + "references": [ + "https://medium.com/threatpunter/detecting-adversary-tradecraft-with-image-load-event-logging-and-eql-8de93338c16", + "https://web.archive.org/web/20201004080456/https://rastamouse.me/blog/rdp-jump-boxes/", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "be8afaed-4bcd-4e0a-b5f9-5562003dde81", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.004", + "name": "Windows Credential Manager", + "reference": "https://attack.mitre.org/techniques/T1555/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "be8afaed-4bcd-4e0a-b5f9-5562003dde81_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bf8c007c-7dee-4842-8e9a-ee534c09d205_3.json b/packages/security_detection_engine/kibana/security_rule/bf8c007c-7dee-4842-8e9a-ee534c09d205_3.json new file mode 100644 index 00000000000..2b61e79607c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bf8c007c-7dee-4842-8e9a-ee534c09d205_3.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of built-in tools which adversaries may use to enumerate the system owner/user of a compromised system.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "System Owner/User Discovery Linux", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and \nprocess.name : (\"whoami\", \"w\", \"who\", \"users\", \"id\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "bf8c007c-7dee-4842-8e9a-ee534c09d205", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1033", + "name": "System Owner/User Discovery", + "reference": "https://attack.mitre.org/techniques/T1033/" + }, + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "bf8c007c-7dee-4842-8e9a-ee534c09d205_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bfba5158-1fd6-4937-a205-77d96213b341_3.json b/packages/security_detection_engine/kibana/security_rule/bfba5158-1fd6-4937-a205-77d96213b341_3.json new file mode 100644 index 00000000000..b8e91cefea0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bfba5158-1fd6-4937-a205-77d96213b341_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected data exfiltration to a particular geo-location (by region name). Data transfers to geo-locations that are outside the normal traffic patterns of an organization could indicate exfiltration over command and control channels.", + "from": "now-6h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_sent_bytes_destination_region_name", + "name": "Potential Data Exfiltration Activity to an Unusual Region", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "risk_score": 21, + "rule_id": "bfba5158-1fd6-4937-a205-77d96213b341", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your network data. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `logs-network_traffic.*` if you used Network Packet Capture.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "bfba5158-1fd6-4937-a205-77d96213b341_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/bfeaf89b-a2a7-48a3-817f-e41829dc61ee_110.json b/packages/security_detection_engine/kibana/security_rule/bfeaf89b-a2a7-48a3-817f-e41829dc61ee_110.json new file mode 100644 index 00000000000..965b47c5ef8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/bfeaf89b-a2a7-48a3-817f-e41829dc61ee_110.json @@ -0,0 +1,179 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the loading of a non Microsoft signed DLL that is missing on a default Windows install (phantom DLL) or one that can be loaded from a different location by a native Windows process. This may be abused to persist or elevate privileges via privileged file write vulnerabilities.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious DLL Loaded for Persistence or Privilege Escalation", + "note": "## Triage and analysis\n\n### Investigating Suspicious DLL Loaded for Persistence or Privilege Escalation\n\nAttackers can execute malicious code by abusing missing modules that processes try to load, enabling them to escalate privileges or gain persistence. This rule identifies the loading of a non-Microsoft-signed DLL that is missing on a default Windows installation or one that can be loaded from a different location by a native Windows process.\n\n#### Possible investigation steps\n\n- Examine the DLL signature and identify the process that created it.\n - Investigate any abnormal behaviors by the process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve the DLL and determine if it is malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "any where host.os.type == \"windows\" and\n (event.category : (\"driver\", \"library\") or (event.category == \"process\" and event.action : \"Image loaded*\")) and\n (\n /* compatible with Elastic Endpoint Library Events */\n (?dll.name : (\"wlbsctrl.dll\", \"wbemcomn.dll\", \"WptsExtensions.dll\", \"Tsmsisrv.dll\", \"TSVIPSrv.dll\", \"Msfte.dll\",\n \"wow64log.dll\", \"WindowsCoreDeviceInfo.dll\", \"Ualapi.dll\", \"wlanhlp.dll\", \"phoneinfo.dll\", \"EdgeGdi.dll\",\n \"cdpsgshims.dll\", \"windowsperformancerecordercontrol.dll\", \"diagtrack_win.dll\", \"oci.dll\", \"TPPCOIPW32.dll\", \n \"tpgenlic.dll\", \"thinmon.dll\", \"fxsst.dll\", \"msTracer.dll\")\n and (?dll.code_signature.trusted != true or ?dll.code_signature.exists != true)) or\n\n /* compatible with Sysmon EventID 7 - Image Load */\n (file.name : (\"wlbsctrl.dll\", \"wbemcomn.dll\", \"WptsExtensions.dll\", \"Tsmsisrv.dll\", \"TSVIPSrv.dll\", \"Msfte.dll\",\n \"wow64log.dll\", \"WindowsCoreDeviceInfo.dll\", \"Ualapi.dll\", \"wlanhlp.dll\", \"phoneinfo.dll\", \"EdgeGdi.dll\",\n \"cdpsgshims.dll\", \"windowsperformancerecordercontrol.dll\", \"diagtrack_win.dll\", \"oci.dll\", \"TPPCOIPW32.dll\", \n \"tpgenlic.dll\", \"thinmon.dll\", \"fxsst.dll\", \"msTracer.dll\") and \n not file.path : (\"?:\\\\Windows\\\\System32\\\\wbemcomn.dll\", \"?:\\\\Windows\\\\SysWOW64\\\\wbemcomn.dll\") and \n not file.hash.sha256 : \n (\"6e837794fc282446906c36d681958f2f6212043fc117c716936920be166a700f\", \n \"b14e4954e8cca060ffeb57f2458b6a3a39c7d2f27e94391cbcea5387652f21a4\", \n \"c258d90acd006fa109dc6b748008edbb196d6168bc75ace0de0de54a4db46662\") and \n not file.code_signature.status == \"Valid\")\n )\n", + "references": [ + "https://itm4n.github.io/windows-dll-hijacking-clarified/", + "http://remoteawesomethoughts.blogspot.com/2019/05/windows-10-task-schedulerservice.html", + "https://googleprojectzero.blogspot.com/2018/04/windows-exploitation-tricks-exploiting.html", + "https://shellz.club/2020/10/16/edgegdi-dll-for-persistence-and-lateral-movement.html", + "https://windows-internals.com/faxing-your-way-to-system/", + "http://waleedassar.blogspot.com/2013/01/wow64logdll.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dll.code_signature.exists", + "type": "boolean" + }, + { + "ecs": true, + "name": "dll.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.code_signature.status", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.hash.sha256", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "bfeaf89b-a2a7-48a3-817f-e41829dc61ee", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.002", + "name": "DLL Side-Loading", + "reference": "https://attack.mitre.org/techniques/T1574/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.001", + "name": "DLL Search Order Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.001", + "name": "Invalid Code Signature", + "reference": "https://attack.mitre.org/techniques/T1036/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "bfeaf89b-a2a7-48a3-817f-e41829dc61ee_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107.json b/packages/security_detection_engine/kibana/security_rule/c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107.json new file mode 100644 index 00000000000..a2d720c84cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the Secure Copy Protocol (SCP) to copy files locally by abusing the auto addition of the Secure Shell Daemon (sshd) to the authorized application list for Full Disk Access. This may indicate attempts to bypass macOS privacy controls to access sensitive files.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privacy Control Bypass via Localhost Secure Copy", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.name:\"scp\" and\n process.args:\"StrictHostKeyChecking=no\" and\n process.command_line:(\"scp *localhost:/*\", \"scp *127.0.0.1:/*\") and\n not process.args:\"vagrant@*127.0.0.1*\"\n", + "references": [ + "https://www.trendmicro.com/en_us/research/20/h/xcsset-mac-malware--infects-xcode-projects--uses-0-days.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "c02c8b9f-5e1d-463c-a1b0-04edcdfe1a3d_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c0429aa8-9974-42da-bfb6-53a0a515a145_108.json b/packages/security_detection_engine/kibana/security_rule/c0429aa8-9974-42da-bfb6-53a0a515a145_108.json new file mode 100644 index 00000000000..9609a043321 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c0429aa8-9974-42da-bfb6-53a0a515a145_108.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the creation or modification of a new Group Policy based scheduled task or service. These methods are used for legitimate system administration, but can also be abused by an attacker with domain admin permissions to execute a malicious payload remotely on all or a subset of the domain joined machines.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation or Modification of a new GPO Scheduled Task or Service", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.path : (\"?:\\\\Windows\\\\SYSVOL\\\\domain\\\\Policies\\\\*\\\\MACHINE\\\\Preferences\\\\ScheduledTasks\\\\ScheduledTasks.xml\",\n \"?:\\\\Windows\\\\SYSVOL\\\\domain\\\\Policies\\\\*\\\\MACHINE\\\\Preferences\\\\Services\\\\Services.xml\") and\n not process.name : \"dfsrs.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "c0429aa8-9974-42da-bfb6-53a0a515a145", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1484", + "name": "Domain Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/", + "subtechnique": [ + { + "id": "T1484.001", + "name": "Group Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1484/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.005", + "name": "Scheduled Task", + "reference": "https://attack.mitre.org/techniques/T1053/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "c0429aa8-9974-42da-bfb6-53a0a515a145_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c125e48f-6783-41f0-b100-c3bf1b114d16_6.json b/packages/security_detection_engine/kibana/security_rule/c125e48f-6783-41f0-b100-c3bf1b114d16_6.json new file mode 100644 index 00000000000..55a955e7911 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c125e48f-6783-41f0-b100-c3bf1b114d16_6.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where the \"index.html\" file within the \"/usr/lib/vmware/*\" directory is renamed on a Linux system. The rule monitors for the \"rename\" event action associated with this specific file and path, which could indicate malicious activity.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Renaming of ESXI index.html File", + "query": "file where host.os.type == \"linux\" and event.action == \"rename\" and file.name : \"index.html\" and\nfile.Ext.original.path : \"/usr/lib/vmware/*\"\n", + "references": [ + "https://www.bleepingcomputer.com/news/security/massive-esxiargs-ransomware-attack-targets-vmware-esxi-servers-worldwide/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "file.Ext.original.path", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c125e48f-6783-41f0-b100-c3bf1b114d16", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "c125e48f-6783-41f0-b100-c3bf1b114d16_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c25e9c87-95e1-4368-bfab-9fd34cf867ec_109.json b/packages/security_detection_engine/kibana/security_rule/c25e9c87-95e1-4368-bfab-9fd34cf867ec_109.json new file mode 100644 index 00000000000..9c36063d2ce --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c25e9c87-95e1-4368-bfab-9fd34cf867ec_109.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of aspnet_regiis to decrypt Microsoft IIS connection strings. An attacker with Microsoft IIS web server access via a webshell or alike can decrypt and dump any hardcoded connection strings, such as the MSSQL service account password using aspnet_regiis command.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "Microsoft IIS Connection Strings Decryption", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"aspnet_regiis.exe\" or ?process.pe.original_file_name == \"aspnet_regiis.exe\") and\n process.args : \"connectionStrings\" and process.args : \"-pdf\"\n", + "references": [ + "https://blog.netspi.com/decrypting-iis-passwords-to-break-out-of-the-dmz-part-1/", + "https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/greenbug-espionage-telco-south-asia" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c25e9c87-95e1-4368-bfab-9fd34cf867ec", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "c25e9c87-95e1-4368-bfab-9fd34cf867ec_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c292fa52-4115-408a-b897-e14f684b3cb7_106.json b/packages/security_detection_engine/kibana/security_rule/c292fa52-4115-408a-b897-e14f684b3cb7_106.json new file mode 100644 index 00000000000..1d5425eab2e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c292fa52-4115-408a-b897-e14f684b3cb7_106.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects modification of a Folder Action script. A Folder Action script is executed when the folder to which it is attached has items added or removed, or when its window is opened, closed, moved, or resized. Adversaries may abuse this feature to establish persistence by utilizing a malicious script.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Folder Action Script", + "query": "sequence by host.id with maxspan=5s\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\", \"info\") and process.name == \"com.apple.foundation.UserScriptService\"] by process.pid\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name in (\"osascript\", \"python\", \"tcl\", \"node\", \"perl\", \"ruby\", \"php\", \"bash\", \"csh\", \"zsh\", \"sh\") and\n not process.args : \"/Users/*/Library/Application Support/iTerm2/Scripts/AutoLaunch/*.scpt\"\n ] by process.parent.pid\n", + "references": [ + "https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "c292fa52-4115-408a-b897-e14f684b3cb7", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1037", + "name": "Boot or Logon Initialization Scripts", + "reference": "https://attack.mitre.org/techniques/T1037/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "c292fa52-4115-408a-b897-e14f684b3cb7_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c296f888-eac6-4543-8da5-b6abb0d3304f_2.json b/packages/security_detection_engine/kibana/security_rule/c296f888-eac6-4543-8da5-b6abb0d3304f_2.json new file mode 100644 index 00000000000..261f288159b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c296f888-eac6-4543-8da5-b6abb0d3304f_2.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where GDB (granted the CAP_SYS_PTRACE capability) is executed, after which the user's access is elevated to UID/GID 0 (root). In Linux, the CAP_SYS_PTRACE capability grants a process the ability to use the ptrace system call, which is typically used for debugging and allows the process to trace and control other processes. Attackers may leverage this capability to hook and inject into a process that is running with root permissions in order to escalate their privileges to root.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via GDB CAP_SYS_PTRACE", + "query": "sequence by host.id, process.entry_leader.entity_id with maxspan=1m\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name == \"gdb\" and\n (process.thread.capabilities.effective : \"CAP_SYS_PTRACE\" or process.thread.capabilities.permitted : \"CAP_SYS_PTRACE\") and \n user.id != \"0\"]\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name != null and user.id == \"0\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entry_leader.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c296f888-eac6-4543-8da5-b6abb0d3304f", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.008", + "name": "Ptrace System Calls", + "reference": "https://attack.mitre.org/techniques/T1055/008/" + } + ] + }, + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 2 + }, + "id": "c296f888-eac6-4543-8da5-b6abb0d3304f_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c2d90150-0133-451c-a783-533e736c12d7_106.json b/packages/security_detection_engine/kibana/security_rule/c2d90150-0133-451c-a783-533e736c12d7_106.json new file mode 100644 index 00000000000..06f5f13f312 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c2d90150-0133-451c-a783-533e736c12d7_106.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies Mshta.exe making outbound network connections. This may indicate adversarial activity, as Mshta is often leveraged by adversaries to execute malicious scripts and evade detection.", + "from": "now-20m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Mshta Making Network Connections", + "query": "sequence by process.entity_id with maxspan=10m\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"mshta.exe\" and\n not process.parent.name : \"Microsoft.ConfigurationManagement.exe\" and\n not (process.parent.executable : \"C:\\\\Amazon\\\\Amazon Assistant\\\\amazonAssistantService.exe\" or\n process.parent.executable : \"C:\\\\TeamViewer\\\\TeamViewer.exe\") and\n not process.args : \"ADSelfService_Enroll.hta\"]\n [network where host.os.type == \"windows\" and process.name : \"mshta.exe\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c2d90150-0133-451c-a783-533e736c12d7", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.005", + "name": "Mshta", + "reference": "https://attack.mitre.org/techniques/T1218/005/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "c2d90150-0133-451c-a783-533e736c12d7_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c3b915e0-22f3-4bf7-991d-b643513c722f_106.json b/packages/security_detection_engine/kibana/security_rule/c3b915e0-22f3-4bf7-991d-b643513c722f_106.json new file mode 100644 index 00000000000..15304917780 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c3b915e0-22f3-4bf7-991d-b643513c722f_106.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary can use the Background Intelligent Transfer Service (BITS) SetNotifyCmdLine method to execute a program that runs after a job finishes transferring data or after a job enters a specified state in order to persist on a system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via BITS Job Notify Cmdline", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"svchost.exe\" and process.parent.args : \"BITS\" and\n not process.executable :\n (\"?:\\\\Windows\\\\System32\\\\WerFaultSecure.exe\",\n \"?:\\\\Windows\\\\System32\\\\WerFault.exe\",\n \"?:\\\\Windows\\\\System32\\\\wermgr.exe\",\n \"?:\\\\WINDOWS\\\\system32\\\\directxdatabaseupdater.exe\")\n", + "references": [ + "https://pentestlab.blog/2019/10/30/persistence-bits-jobs/", + "https://docs.microsoft.com/en-us/windows/win32/api/bits1_5/nf-bits1_5-ibackgroundcopyjob2-setnotifycmdline", + "https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin-setnotifycmdline", + "https://www.elastic.co/blog/hunting-for-persistence-using-elastic-security-part-2" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c3b915e0-22f3-4bf7-991d-b643513c722f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1197", + "name": "BITS Jobs", + "reference": "https://attack.mitre.org/techniques/T1197/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "c3b915e0-22f3-4bf7-991d-b643513c722f_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14_108.json b/packages/security_detection_engine/kibana/security_rule/c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14_108.json new file mode 100644 index 00000000000..7aa80ba0353 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14_108.json @@ -0,0 +1,153 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of net.exe to mount a WebDav or hidden remote share. This may indicate lateral movement or preparation for data exfiltration.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Mounting Hidden or WebDav Remote Shares", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n ((process.name : \"net.exe\" or ?process.pe.original_file_name == \"net.exe\") or ((process.name : \"net1.exe\" or ?process.pe.original_file_name == \"net1.exe\") and\n not process.parent.name : \"net.exe\")) and\n process.args : \"use\" and\n /* including hidden and webdav based online shares such as onedrive */\n process.args : (\"\\\\\\\\*\\\\*$*\", \"\\\\\\\\*@SSL\\\\*\", \"http*\") and\n /* excluding shares deletion operation */\n not process.args : \"/d*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.002", + "name": "SMB/Windows Admin Shares", + "reference": "https://attack.mitre.org/techniques/T1021/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + }, + { + "id": "T1087.002", + "name": "Domain Account", + "reference": "https://attack.mitre.org/techniques/T1087/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "c4210e1c-64f2-4f48-b67e-b5a8ffe3aa14_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c4818812-d44f-47be-aaef-4cfb2f9cc799_106.json b/packages/security_detection_engine/kibana/security_rule/c4818812-d44f-47be-aaef-4cfb2f9cc799_106.json new file mode 100644 index 00000000000..74c2c43aa78 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c4818812-d44f-47be-aaef-4cfb2f9cc799_106.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects deletion of print driver files by an unusual process. This may indicate a clean up attempt post successful privilege escalation via Print Spooler service related vulnerabilities.", + "false_positives": [ + "Uninstall or manual deletion of a legitimate printing driver files. Verify the printer file metadata such as manufacturer and signature information." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Print Spooler File Deletion", + "query": "file where host.os.type == \"windows\" and event.type : \"deletion\" and\n not process.name : (\"spoolsv.exe\", \"dllhost.exe\", \"explorer.exe\") and\n file.path : \"?:\\\\Windows\\\\System32\\\\spool\\\\drivers\\\\x64\\\\3\\\\*.dll\"\n", + "references": [ + "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c4818812-d44f-47be-aaef-4cfb2f9cc799", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "c4818812-d44f-47be-aaef-4cfb2f9cc799_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c57f8579-e2a5-4804-847f-f2732edc5156_108.json b/packages/security_detection_engine/kibana/security_rule/c57f8579-e2a5-4804-847f-f2732edc5156_108.json new file mode 100644 index 00000000000..74800b2e190 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c57f8579-e2a5-4804-847f-f2732edc5156_108.json @@ -0,0 +1,117 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the modification of the Remote Desktop Protocol (RDP) Shadow registry or the execution of processes indicative of an active RDP shadowing session. An adversary may abuse the RDP Shadowing feature to spy on or control other users active RDP sessions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Remote Desktop Shadowing Activity", + "query": "/* Identifies the modification of RDP Shadow registry or\n the execution of processes indicative of active shadow RDP session */\n\nany where host.os.type == \"windows\" and\n(\n (event.category == \"registry\" and\n registry.path : (\n \"HKLM\\\\Software\\\\Policies\\\\Microsoft\\\\Windows NT\\\\Terminal Services\\\\Shadow\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Policies\\\\Microsoft\\\\Windows NT\\\\Terminal Services\\\\Shadow\"\n )\n ) or\n (event.category == \"process\" and event.type == \"start\" and\n (process.name : (\"RdpSaUacHelper.exe\", \"RdpSaProxy.exe\") and process.parent.name : \"svchost.exe\") or\n (process.pe.original_file_name : \"mstsc.exe\" and process.args : \"/shadow:*\")\n )\n)\n", + "references": [ + "https://bitsadm.in/blog/spying-on-users-using-rdp-shadowing", + "https://swarm.ptsecurity.com/remote-desktop-services-shadowing/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c57f8579-e2a5-4804-847f-f2732edc5156", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.001", + "name": "Remote Desktop Protocol", + "reference": "https://attack.mitre.org/techniques/T1021/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "c57f8579-e2a5-4804-847f-f2732edc5156_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c5c9f591-d111-4cf8-baec-c26a39bc31ef_108.json b/packages/security_detection_engine/kibana/security_rule/c5c9f591-d111-4cf8-baec-c26a39bc31ef_108.json new file mode 100644 index 00000000000..4f2c3b8db69 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c5c9f591-d111-4cf8-baec-c26a39bc31ef_108.json @@ -0,0 +1,136 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious renamed COMSVCS.DLL Image Load, which exports the MiniDump function that can be used to dump a process memory. This may indicate an attempt to dump LSASS memory while bypassing command-line based detection in preparation for credential access.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Credential Access via Renamed COM+ Services DLL", + "note": "## Triage and analysis\n\n### Investigating Potential Credential Access via Renamed COM+ Services DLL\n\nCOMSVCS.DLL is a Windows library that exports the MiniDump function, which can be used to dump a process memory. Adversaries may attempt to dump LSASS memory using a renamed COMSVCS.DLL to bypass command-line based detection and gain unauthorized access to credentials.\n\nThis rule identifies suspicious instances of rundll32.exe loading a renamed COMSVCS.DLL image, which can indicate potential abuse of the MiniDump function for credential theft.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Identify the process that created the DLL using file creation events.\n - Inspect the file for useful metadata, such as file size and creation or modification time.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable and DLL using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process's `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Look for the presence of relevant artifacts on other systems. Identify commonalities and differences between potentially compromised systems.\n\n### False positive analysis\n\n- False positives may include legitimate instances of rundll32.exe loading a renamed COMSVCS.DLL image for non-malicious purposes, such as during software development, testing, or troubleshooting.\n\n### Related Rules\n\n- Potential Credential Access via LSASS Memory Dump - 9960432d-9b26-409f-972b-839a959e79e2\n- Suspicious Module Loaded by LSASS - 3a6001a0-0939-4bbe-86f4-47d8faeb7b97\n- Suspicious Lsass Process Access - 128468bf-cab1-4637-99ea-fdf3780a4609\n- LSASS Process Access via Windows API - ff4599cb-409f-4910-a239-52e4e6f532ff\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Implement Elastic Endpoint Security to detect and prevent further post exploitation activities in the environment.\n - Contain the affected system by isolating it from the network to prevent further spread of the attack.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restore the affected system to its operational state by applying any necessary patches, updates, or configuration changes.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id with maxspan=1m\n [process where host.os.type == \"windows\" and event.category == \"process\" and\n process.name : \"rundll32.exe\"]\n [process where host.os.type == \"windows\" and event.category == \"process\" and event.dataset : \"windows.sysmon_operational\" and event.code == \"7\" and\n (file.pe.original_file_name : \"COMSVCS.DLL\" or file.pe.imphash : \"EADBCCBB324829ACB5F2BBE87E5549A8\") and\n /* renamed COMSVCS */\n not file.name : \"COMSVCS.DLL\"]\n", + "references": [ + "https://modexp.wordpress.com/2019/08/30/minidumpwritedump-via-com-services-dll/" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.pe.imphash", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c5c9f591-d111-4cf8-baec-c26a39bc31ef", + "setup": "## Setup\n\nYou will need to enable logging of ImageLoads in your Sysmon configuration to include COMSVCS.DLL by Imphash or Original\nFile Name.\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "c5c9f591-d111-4cf8-baec-c26a39bc31ef_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c5ce48a6-7f57-4ee8-9313-3d0024caee10_107.json b/packages/security_detection_engine/kibana/security_rule/c5ce48a6-7f57-4ee8-9313-3d0024caee10_107.json new file mode 100644 index 00000000000..88108809ede --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c5ce48a6-7f57-4ee8-9313-3d0024caee10_107.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the installation of custom Application Compatibility Shim databases. This Windows functionality has been abused by attackers to stealthily gain persistence and arbitrary code execution in legitimate Windows processes.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.registry*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Installation of Custom Shim Databases", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n registry.path : \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AppCompatFlags\\\\Custom\\\\*.sdb\" and \n not process.executable : \n (\"?:\\\\Program Files (x86)\\\\DesktopCentral_Agent\\\\swrepository\\\\1\\\\swuploads\\\\SAP-SLC\\\\SAPSetupSLC02_14-80001954\\\\Setup\\\\NwSapSetup.exe\", \n \"?:\\\\$WINDOWS.~BT\\\\Sources\\\\SetupPlatform.exe\", \n \"?:\\\\Program Files (x86)\\\\SAP\\\\SAPsetup\\\\setup\\\\NwSapSetup.exe\", \n \"?:\\\\Program Files (x86)\\\\SAP\\\\SapSetup\\\\OnRebootSvc\\\\NWSAPSetupOnRebootInstSvc.exe\", \n \"?:\\\\Program Files (x86)\\\\Kaspersky Lab\\\\Kaspersky Security for Windows Server\\\\kavfs.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c5ce48a6-7f57-4ee8-9313-3d0024caee10", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.011", + "name": "Application Shimming", + "reference": "https://attack.mitre.org/techniques/T1546/011/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "c5ce48a6-7f57-4ee8-9313-3d0024caee10_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c5dc3223-13a2-44a2-946c-e9dc0aa0449c_109.json b/packages/security_detection_engine/kibana/security_rule/c5dc3223-13a2-44a2-946c-e9dc0aa0449c_109.json new file mode 100644 index 00000000000..eb9904a12aa --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c5dc3223-13a2-44a2-946c-e9dc0aa0449c_109.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An instance of MSBuild, the Microsoft Build Engine, was started by Excel or Word. This is unusual behavior for the Build Engine and could have been caused by an Excel or Word document executing a malicious script payload.", + "false_positives": [ + "The Build Engine is commonly used by Windows developers but use by non-engineers is unusual. It is quite unusual for this program to be started by an Office application like Word or Excel." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Build Engine Started by an Office Application", + "note": "## Triage and analysis\n\n### Investigating Microsoft Build Engine Started by an Office Application\n\nMicrosoft Office (MS Office) is a suite of applications designed to help with productivity and completing common tasks on a computer. You can create and edit documents containing text and images, work with data in spreadsheets and databases, and create presentations and posters. As it is some of the most-used software across companies, MS Office is frequently targeted for initial access. It also has a wide variety of capabilities that attackers can take advantage of.\n\nThe Microsoft Build Engine is a platform for building applications. This engine, also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software, and can be abused to proxy execution of code.\n\nThis rule looks for the `Msbuild.exe` utility spawned by MS Office programs. This is generally the result of the execution of malicious documents.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate abnormal behaviors observed by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve MS Office documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.\n- Determine if the collected files are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n - If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"MSBuild.exe\" and\n process.parent.name : (\"eqnedt32.exe\",\n \"excel.exe\",\n \"fltldr.exe\",\n \"msaccess.exe\",\n \"mspub.exe\",\n \"outlook.exe\",\n \"powerpnt.exe\",\n \"winword.exe\" )\n", + "references": [ + "https://blog.talosintelligence.com/2020/02/building-bypass-with-msbuild.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c5dc3223-13a2-44a2-946c-e9dc0aa0449c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1127", + "name": "Trusted Developer Utilities Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1127/", + "subtechnique": [ + { + "id": "T1127.001", + "name": "MSBuild", + "reference": "https://attack.mitre.org/techniques/T1127/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "c5dc3223-13a2-44a2-946c-e9dc0aa0449c_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c6453e73-90eb-4fe7-a98c-cde7bbfc504a_111.json b/packages/security_detection_engine/kibana/security_rule/c6453e73-90eb-4fe7-a98c-cde7bbfc504a_111.json new file mode 100644 index 00000000000..bf2d7c32b42 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c6453e73-90eb-4fe7-a98c-cde7bbfc504a_111.json @@ -0,0 +1,101 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the Windows Defender configuration utility (MpCmdRun.exe) being used to download a remote file.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote File Download via MpCmdRun", + "note": "## Triage and analysis\n\n### Investigating Remote File Download via MpCmdRun\n\nAttackers commonly transfer tooling or malware from external systems into a compromised environment using the command and control channel. However, they can also abuse signed utilities to drop these files.\n\nThe `MpCmdRun.exe` is a command-line tool part of Windows Defender and is used to manage various Microsoft Windows Defender Antivirus settings and perform certain tasks. It can also be abused by attackers to download remote files, including malware and offensive tooling. This rule looks for the patterns used to perform downloads using the utility.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses the [Investigate Markdown Plugin](https://www.elastic.co/guide/en/security/master/interactive-investigation-guides.html) introduced in Elastic Stack version 8.8.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - !{investigate{\"label\":\"Alerts associated with the user in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"user.id\",\"queryType\":\"phrase\",\"value\":\"{{user.id}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n - !{investigate{\"label\":\"Alerts associated with the host in the last 48h\",\"providers\":[[{\"excluded\":false,\"field\":\"event.kind\",\"queryType\":\"phrase\",\"value\":\"signal\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"host.name\",\"queryType\":\"phrase\",\"value\":\"{{host.name}}\",\"valueType\":\"string\"}]],\"relativeFrom\":\"now-48h/h\",\"relativeTo\":\"now\"}}\n- Check the reputation of the domain or IP address used to host the downloaded file.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - !{investigate{\"label\":\"Investigate the Subject Process Network Events\",\"providers\":[[{\"excluded\":false,\"field\":\"process.entity_id\",\"queryType\":\"phrase\",\"value\":\"{{process.entity_id}}\",\"valueType\":\"string\"},{\"excluded\":false,\"field\":\"event.category\",\"queryType\":\"phrase\",\"value\":\"network\",\"valueType\":\"string\"}]]}}\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"MpCmdRun.exe\" or ?process.pe.original_file_name == \"MpCmdRun.exe\") and\n process.args : \"-DownloadFile\" and process.args : \"-url\" and process.args : \"-path\"\n", + "references": [ + "https://twitter.com/mohammadaskar2/status/1301263551638761477", + "https://www.bleepingcomputer.com/news/microsoft/microsoft-defender-can-ironically-be-used-to-download-malware/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c6453e73-90eb-4fe7-a98c-cde7bbfc504a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1105", + "name": "Ingress Tool Transfer", + "reference": "https://attack.mitre.org/techniques/T1105/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "c6453e73-90eb-4fe7-a98c-cde7bbfc504a_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c7894234-7814-44c2-92a9-f7d851ea246a_106.json b/packages/security_detection_engine/kibana/security_rule/c7894234-7814-44c2-92a9-f7d851ea246a_106.json new file mode 100644 index 00000000000..a78c6dcdae9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c7894234-7814-44c2-92a9-f7d851ea246a_106.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies unusual instances of dllhost.exe making outbound network connections. This may indicate adversarial Command and Control activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Network Connection via DllHost", + "query": "sequence by host.id, process.entity_id with maxspan=1m\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"dllhost.exe\" and process.args_count == 1]\n [network where host.os.type == \"windows\" and process.name : \"dllhost.exe\" and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\",\n \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\",\n \"192.175.48.0/24\", \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\",\n \"FF00::/8\")]\n", + "references": [ + "https://www.microsoft.com/security/blog/2021/05/27/new-sophisticated-email-based-attack-from-nobelium/", + "https://www.volexity.com/blog/2021/05/27/suspected-apt29-operation-launches-election-fraud-themed-phishing-campaigns/", + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c7894234-7814-44c2-92a9-f7d851ea246a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "c7894234-7814-44c2-92a9-f7d851ea246a_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9_109.json b/packages/security_detection_engine/kibana/security_rule/c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9_109.json new file mode 100644 index 00000000000..fb51ead7675 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9_109.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an unexpected file being modified by dns.exe, the process responsible for Windows DNS Server services, which may indicate activity related to remote code execution or other forms of exploitation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual File Modification by dns.exe", + "note": "## Triage and analysis\n\n### Investigating Unusual File Write\nDetection alerts from this rule indicate potential unusual/abnormal file writes from the DNS Server service process (`dns.exe`) after exploitation from CVE-2020-1350 (SigRed) has occurred. Here are some possible avenues of investigation:\n- Post-exploitation, adversaries may write additional files or payloads to the system as additional discovery/exploitation/persistence mechanisms.\n- Any suspicious or abnormal files written from `dns.exe` should be reviewed and investigated with care.\n", + "query": "file where host.os.type == \"windows\" and process.name : \"dns.exe\" and event.type in (\"creation\", \"deletion\", \"change\") and\n not file.name : \"dns.log\" and not\n (file.extension : (\"old\", \"temp\", \"bak\", \"dns\", \"arpa\") and file.path : \"C:\\\\Windows\\\\System32\\\\dns\\\\*\")\n", + "references": [ + "https://research.checkpoint.com/2020/resolving-your-way-into-domain-admin-exploiting-a-17-year-old-bug-in-windows-dns-servers/", + "https://msrc-blog.microsoft.com/2020/07/14/july-2020-security-update-cve-2020-1350-vulnerability-in-windows-domain-name-system-dns-server/", + "https://www.elastic.co/security-labs/detection-rules-for-sigred-vulnerability" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "c7ce36c0-32ff-4f9a-bfc2-dcb242bf99f9_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c81cefcb-82b9-4408-a533-3c3df549e62d_106.json b/packages/security_detection_engine/kibana/security_rule/c81cefcb-82b9-4408-a533-3c3df549e62d_106.json new file mode 100644 index 00000000000..3c3157bcbea --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c81cefcb-82b9-4408-a533-3c3df549e62d_106.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary can establish persistence by modifying an existing macOS dock property list in order to execute a malicious application instead of the intended one when invoked.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Persistence via Docker Shortcut Modification", + "query": "event.category:file and host.os.type:macos and event.action:modification and\n file.path:/Users/*/Library/Preferences/com.apple.dock.plist and\n not process.name:(xpcproxy or cfprefsd or plutil or jamf or PlistBuddy or InstallerRemotePluginService)\n", + "references": [ + "https://github.com/specterops/presentations/raw/master/Leo%20Pitt/Hey_Im_Still_in_Here_Modern_macOS_Persistence_SO-CON2020.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c81cefcb-82b9-4408-a533-3c3df549e62d", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "c81cefcb-82b9-4408-a533-3c3df549e62d_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c85eb82c-d2c8-485c-a36f-534f914b7663_105.json b/packages/security_detection_engine/kibana/security_rule/c85eb82c-d2c8-485c-a36f-534f914b7663_105.json new file mode 100644 index 00000000000..d33c84eb556 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c85eb82c-d2c8-485c-a36f-534f914b7663_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "An adversary may attempt to get detailed information about the operating system and hardware. This rule identifies common locations used to discover virtual machine hardware by a non-root user. This technique has been used by the Pupy RAT and other malware.", + "false_positives": [ + "Certain tools or automated software may enumerate hardware information. These tools can be exempted via user name or process arguments to eliminate potential noise." + ], + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Virtual Machine Fingerprinting via Grep", + "query": "process where event.type == \"start\" and\n process.name in (\"grep\", \"egrep\") and user.id != \"0\" and\n process.args : (\"parallels*\", \"vmware*\", \"virtualbox*\") and process.args : \"Manufacturer*\" and\n not process.parent.executable in (\"/Applications/Docker.app/Contents/MacOS/Docker\", \"/usr/libexec/kcare/virt-what\")\n", + "references": [ + "https://objective-see.com/blog/blog_0x4F.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c85eb82c-d2c8-485c-a36f-534f914b7663", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 105 + }, + "id": "c85eb82c-d2c8-485c-a36f-534f914b7663_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c8935a8b-634a-4449-98f7-bb24d3b2c0af_8.json b/packages/security_detection_engine/kibana/security_rule/c8935a8b-634a-4449-98f7-bb24d3b2c0af_8.json new file mode 100644 index 00000000000..ade28495fa8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c8935a8b-634a-4449-98f7-bb24d3b2c0af_8.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule identifies a sequence of a mass file encryption event in conjunction with the creation of a .txt file with a file name containing ransomware keywords executed by the same process in a 1 second timespan. Ransomware is a type of malware that encrypts a victim's files or systems and demands payment (usually in cryptocurrency) in exchange for the decryption key. One important indicator of a ransomware attack is the mass encryption of the file system, after which a new file extension is added to the file.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Ransomware Note Creation Detected", + "query": "sequence by process.entity_id, host.id with maxspan=1s \n [file where host.os.type == \"linux\" and event.type == \"change\" and event.action == \"rename\" and file.extension : \"?*\" \n and process.executable : (\"./*\", \"/tmp/*\", \"/var/tmp/*\", \"/dev/shm/*\", \"/var/run/*\", \"/boot/*\", \"/srv/*\", \"/run/*\") and\n file.path : (\n \"/home/*/Downloads/*\", \"/home/*/Documents/*\", \"/root/*\", \"/bin/*\", \"/usr/bin/*\", \"/var/log/*\", \"/var/lib/log/*\",\n \"/var/backup/*\", \"/var/www/*\") and\n not process.name : (\n \"dpkg\", \"yum\", \"dnf\", \"rpm\", \"dockerd\", \"go\", \"java\", \"pip*\", \"python*\", \"node\", \"containerd\", \"php\", \"p4d\",\n \"conda\", \"chrome\", \"imap\", \"cmake\", \"firefox\", \"semanage\", \"semodule\", \"ansible-galaxy\", \"fc-cache\", \"jammy\", \"git\",\n \"systemsettings\", \"vmis-launcher\", \"bundle\", \"kudu-tserver\", \"suldownloader\"\n )\n ] with runs=25\n [file where host.os.type == \"linux\" and event.action == \"creation\" and file.name : (\n \"*crypt*\", \"*restore*\", \"*lock*\", \"*recovery*\", \"*data*\", \"*read*\", \"*instruction*\", \"*how_to*\", \"*ransom*\"\n )\n ]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c8935a8b-634a-4449-98f7-bb24d3b2c0af", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Impact", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1486", + "name": "Data Encrypted for Impact", + "reference": "https://attack.mitre.org/techniques/T1486/" + } + ] + } + ], + "type": "eql", + "version": 8 + }, + "id": "c8935a8b-634a-4449-98f7-bb24d3b2c0af_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c8b150f0-0164-475b-a75e-74b47800a9ff_109.json b/packages/security_detection_engine/kibana/security_rule/c8b150f0-0164-475b-a75e-74b47800a9ff_109.json new file mode 100644 index 00000000000..7036e4e2d5a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c8b150f0-0164-475b-a75e-74b47800a9ff_109.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious startup shell folder modifications to change the default Startup directory in order to bypass detections monitoring file creation in the Windows Startup folder.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Startup Shell Folder Modification", + "note": "## Triage and analysis\n\n### Investigating Suspicious Startup Shell Folder Modification\n\nTechniques used within malware and by adversaries often leverage the Windows registry to store malicious programs for persistence. Startup shell folders are often targeted as they are not as prevalent as normal Startup folder paths so this behavior may evade existing AV/EDR solutions. These programs may also run with higher privileges which can be ideal for an attacker.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Review the source process and related file tied to the Windows Registry entry.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- There is a high possibility of benign legitimate programs being added to shell folders. This activity could be based on new software installations, patches, or other network administrator activity. Before undertaking further investigation, it should be verified that this activity is not benign.\n\n### Related rules\n\n- Startup or Run Key Registry Modification - 97fc44d3-8dae-4019-ae83-298c3015600f\n- Persistent Scripts in the Startup Directory - f7c4dc5a-a58d-491d-9f14-9b66507121c0\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders\\\\Common Startup\",\n \"HKLM\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders\\\\Common Startup\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders\\\\Startup\",\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders\\\\Startup\",\n \"HKU\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders\\\\Startup\",\n \"HKU\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders\\\\Startup\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders\\\\Common Startup\",\n \"\\\\REGISTRY\\\\MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders\\\\Common Startup\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders\\\\Startup\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders\\\\Startup\"\n ) and\n registry.data.strings != null and\n /* Normal Startup Folder Paths */\n not registry.data.strings : (\n \"C:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\",\n \"%ProgramData%\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\",\n \"%USERPROFILE%\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\",\n \"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "c8b150f0-0164-475b-a75e-74b47800a9ff", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "c8b150f0-0164-475b-a75e-74b47800a9ff_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/c8cccb06-faf2-4cd5-886e-2c9636cfcb87_109.json b/packages/security_detection_engine/kibana/security_rule/c8cccb06-faf2-4cd5-886e-2c9636cfcb87_109.json new file mode 100644 index 00000000000..6853896a759 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/c8cccb06-faf2-4cd5-886e-2c9636cfcb87_109.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of the Set-MpPreference PowerShell command to disable or weaken certain Windows Defender settings.", + "false_positives": [ + "Planned Windows Defender configuration changes." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Disabling Windows Defender Security Settings via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Disabling Windows Defender Security Settings via PowerShell\n\nMicrosoft Windows Defender is an antivirus product built into Microsoft Windows, which makes it popular across multiple environments. Disabling it is a common step in threat actor playbooks.\n\nThis rule monitors the execution of commands that can tamper the Windows Defender antivirus features.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the command line to determine which action was executed. Based on that, examine exceptions, antivirus state, sample submission, etc.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity, the configuration is justified (for example, it is being used to deploy other security solutions or troubleshooting), and no other suspicious activity has been observed.\n\n### Related rules\n\n- Windows Defender Disabled via Registry Modification - 2ffa1f1e-b6db-47fa-994b-1512743847eb\n- Microsoft Windows Defender Tampering - fe794edd-487f-4a90-b285-3ee54f2af2d3\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Based on the command line, take actions to restore the appropriate Windows Defender antivirus configurations.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") or\n ?process.pe.original_file_name in (\"powershell.exe\", \"pwsh.dll\", \"powershell_ise.exe\")\n ) and\n process.args : \"Set-MpPreference\" and process.args : (\"-Disable*\", \"Disabled\", \"NeverSend\", \"-Exclusion*\")\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=windowsserver2019-ps" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "c8cccb06-faf2-4cd5-886e-2c9636cfcb87", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "c8cccb06-faf2-4cd5-886e-2c9636cfcb87_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ca79768e-40e1-4e45-a097-0e5fbc876ac2_105.json b/packages/security_detection_engine/kibana/security_rule/ca79768e-40e1-4e45-a097-0e5fbc876ac2_105.json new file mode 100644 index 00000000000..70473881c8a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ca79768e-40e1-4e45-a097-0e5fbc876ac2_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a malware filter rule has been deleted or disabled in Microsoft 365. An adversary or insider threat may want to modify a malware filter rule to evade detection.", + "false_positives": [ + "A malware filter rule may be deleted by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Malware Filter Rule Modification", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:(\"Remove-MalwareFilterRule\" or \"Disable-MalwareFilterRule\") and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-malwarefilterrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/powershell/module/exchange/disable-malwarefilterrule?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ca79768e-40e1-4e45-a097-0e5fbc876ac2", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "ca79768e-40e1-4e45-a097-0e5fbc876ac2_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ca98c7cf-a56e-4057-a4e8-39603f7f0389_7.json b/packages/security_detection_engine/kibana/security_rule/ca98c7cf-a56e-4057-a4e8-39603f7f0389_7.json new file mode 100644 index 00000000000..55a192e0e73 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ca98c7cf-a56e-4057-a4e8-39603f7f0389_7.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a Windows trusted program running from locations often abused by adversaries to masquerade as a trusted program and loading a recently dropped DLL. This behavior may indicate an attempt to evade defenses via side-loading a malicious DLL within the memory space of a signed processes.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unsigned DLL Side-Loading from a Suspicious Folder", + "query": "library where host.os.type == \"windows\" and\n\n process.code_signature.trusted == true and \n \n (dll.Ext.relative_file_creation_time <= 500 or dll.Ext.relative_file_name_modify_time <= 500) and \n \n not dll.code_signature.status : (\"trusted\", \"errorExpired\", \"errorCode_endpoint*\", \"errorChaining\") and \n \n /* Suspicious Paths */\n dll.path : (\"?:\\\\PerfLogs\\\\*.dll\",\n \"?:\\\\Users\\\\*\\\\Pictures\\\\*.dll\",\n \"?:\\\\Users\\\\*\\\\Music\\\\*.dll\",\n \"?:\\\\Users\\\\Public\\\\*.dll\",\n \"?:\\\\Users\\\\*\\\\Documents\\\\*.dll\",\n \"?:\\\\Windows\\\\Tasks\\\\*.dll\",\n \"?:\\\\Windows\\\\System32\\\\Tasks\\\\*.dll\",\n \"?:\\\\Intel\\\\*.dll\",\n \"?:\\\\AMD\\\\Temp\\\\*.dll\",\n \"?:\\\\Windows\\\\AppReadiness\\\\*.dll\",\n \"?:\\\\Windows\\\\ServiceState\\\\*.dll\",\n \"?:\\\\Windows\\\\security\\\\*.dll\",\n\t\t \"?:\\\\Windows\\\\System\\\\*.dll\",\n \"?:\\\\Windows\\\\IdentityCRL\\\\*.dll\",\n \"?:\\\\Windows\\\\Branding\\\\*.dll\",\n \"?:\\\\Windows\\\\csc\\\\*.dll\",\n \"?:\\\\Windows\\\\DigitalLocker\\\\*.dll\",\n \"?:\\\\Windows\\\\en-US\\\\*.dll\",\n \"?:\\\\Windows\\\\wlansvc\\\\*.dll\",\n \"?:\\\\Windows\\\\Prefetch\\\\*.dll\",\n \"?:\\\\Windows\\\\Fonts\\\\*.dll\",\n \"?:\\\\Windows\\\\diagnostics\\\\*.dll\",\n \"?:\\\\Windows\\\\TAPI\\\\*.dll\",\n \"?:\\\\Windows\\\\INF\\\\*.dll\",\n \"?:\\\\windows\\\\tracing\\\\*.dll\",\n \"?:\\\\windows\\\\IME\\\\*.dll\",\n \"?:\\\\Windows\\\\Performance\\\\*.dll\",\n \"?:\\\\windows\\\\intel\\\\*.dll\",\n \"?:\\\\windows\\\\ms\\\\*.dll\",\n \"?:\\\\Windows\\\\dot3svc\\\\*.dll\",\n \"?:\\\\Windows\\\\ServiceProfiles\\\\*.dll\",\n \"?:\\\\Windows\\\\panther\\\\*.dll\",\n \"?:\\\\Windows\\\\RemotePackages\\\\*.dll\",\n \"?:\\\\Windows\\\\OCR\\\\*.dll\",\n \"?:\\\\Windows\\\\appcompat\\\\*.dll\",\n \"?:\\\\Windows\\\\apppatch\\\\*.dll\",\n \"?:\\\\Windows\\\\addins\\\\*.dll\",\n \"?:\\\\Windows\\\\Setup\\\\*.dll\",\n \"?:\\\\Windows\\\\Help\\\\*.dll\",\n \"?:\\\\Windows\\\\SKB\\\\*.dll\",\n \"?:\\\\Windows\\\\Vss\\\\*.dll\",\n \"?:\\\\Windows\\\\Web\\\\*.dll\",\n \"?:\\\\Windows\\\\servicing\\\\*.dll\",\n \"?:\\\\Windows\\\\CbsTemp\\\\*.dll\",\n \"?:\\\\Windows\\\\Logs\\\\*.dll\",\n \"?:\\\\Windows\\\\WaaS\\\\*.dll\",\n \"?:\\\\Windows\\\\twain_32\\\\*.dll\",\n \"?:\\\\Windows\\\\ShellExperiences\\\\*.dll\",\n \"?:\\\\Windows\\\\ShellComponents\\\\*.dll\",\n \"?:\\\\Windows\\\\PLA\\\\*.dll\",\n \"?:\\\\Windows\\\\Migration\\\\*.dll\",\n \"?:\\\\Windows\\\\debug\\\\*.dll\",\n \"?:\\\\Windows\\\\Cursors\\\\*.dll\",\n \"?:\\\\Windows\\\\Containers\\\\*.dll\",\n \"?:\\\\Windows\\\\Boot\\\\*.dll\",\n \"?:\\\\Windows\\\\bcastdvr\\\\*.dll\",\n \"?:\\\\Windows\\\\TextInput\\\\*.dll\",\n \"?:\\\\Windows\\\\schemas\\\\*.dll\",\n \"?:\\\\Windows\\\\SchCache\\\\*.dll\",\n \"?:\\\\Windows\\\\Resources\\\\*.dll\",\n \"?:\\\\Windows\\\\rescache\\\\*.dll\",\n \"?:\\\\Windows\\\\Provisioning\\\\*.dll\",\n \"?:\\\\Windows\\\\PrintDialog\\\\*.dll\",\n \"?:\\\\Windows\\\\PolicyDefinitions\\\\*.dll\",\n \"?:\\\\Windows\\\\media\\\\*.dll\",\n \"?:\\\\Windows\\\\Globalization\\\\*.dll\",\n \"?:\\\\Windows\\\\L2Schemas\\\\*.dll\",\n \"?:\\\\Windows\\\\LiveKernelReports\\\\*.dll\",\n \"?:\\\\Windows\\\\ModemLogs\\\\*.dll\",\n \"?:\\\\Windows\\\\ImmersiveControlPanel\\\\*.dll\",\n \"?:\\\\$Recycle.Bin\\\\*.dll\") and \n\t \n\t /* DLL loaded from the process.executable current directory */\n\t endswith~(substring(dll.path, 0, length(dll.path) - (length(dll.name) + 1)), substring(process.executable, 0, length(process.executable) - (length(process.name) + 1)))\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "dll.Ext.relative_file_creation_time", + "type": "unknown" + }, + { + "ecs": false, + "name": "dll.Ext.relative_file_name_modify_time", + "type": "unknown" + }, + { + "ecs": true, + "name": "dll.code_signature.status", + "type": "keyword" + }, + { + "ecs": true, + "name": "dll.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "dll.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ca98c7cf-a56e-4057-a4e8-39603f7f0389", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.001", + "name": "Invalid Code Signature", + "reference": "https://attack.mitre.org/techniques/T1036/001/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.002", + "name": "DLL Side-Loading", + "reference": "https://attack.mitre.org/techniques/T1574/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "ca98c7cf-a56e-4057-a4e8-39603f7f0389_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cac91072-d165-11ec-a764-f661ea17fbce_213.json b/packages/security_detection_engine/kibana/security_rule/cac91072-d165-11ec-a764-f661ea17fbce_213.json new file mode 100644 index 00000000000..f3e8112e176 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cac91072-d165-11ec-a764-f661ea17fbce_213.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a Process ID (PID), lock or reboot file created in temporary file storage paradigm (tmpfs) directory /var/run. On Linux, the PID files typically hold the process ID to track previous copies running and manage other tasks. Certain Linux malware use the /var/run directory for holding data, executables and other tasks, disguising itself or these files as legitimate PID files.", + "false_positives": [ + "False-Positives (FP) can appear if the PID file is legitimate and holding a process ID as intended. To differentiate, if the PID file is an executable or larger than 10 bytes, it should be ruled suspicious." + ], + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Abnormal Process ID or Lock File Created", + "new_terms_fields": [ + "host.id", + "process.executable", + "file.path" + ], + "note": "## Triage and analysis\n\n### Investigating Abnormal Process ID or Lock File Created\n\nLinux applications may need to save their process identification number (PID) for various purposes: from signaling that a program is running to serving as a signal that a previous instance of an application didn't exit successfully. PID files contain its creator process PID in an integer value.\n\nLinux lock files are used to coordinate operations in files so that conflicts and race conditions are prevented.\n\nThis rule identifies the creation of PID, lock, or reboot files in the /var/run/ directory. Attackers can masquerade malware, payloads, staged data for exfiltration, and more as legitimate PID files.\n\n#### Possible investigation steps\n\n- Retrieve the file and determine if it is malicious:\n - Check the contents of the PID files. They should only contain integer strings.\n - Check the file type of the lock and PID files to determine if they are executables. This is only observed in malicious files.\n - Check the size of the subject file. Legitimate PID files should be under 10 bytes.\n - Check if the lock or PID file has high entropy. This typically indicates an encrypted payload.\n - Analysts can use tools like `ent` to measure entropy.\n - Examine the reputation of the SHA-256 hash in the PID file. Use a database like VirusTotal to identify additional pivots and artifacts for investigation.\n- Trace the file's creation to ensure it came from a legitimate or authorized process.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n- Investigate any abnormal behavior by the subject process such as network connections, file modifications, and any spawned child processes.\n\n### False positive analysis\n\n- False positives can appear if the PID file is legitimate and holding a process ID as intended. If the PID file is an executable or has a file size that's larger than 10 bytes, it should be ruled suspicious.\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of file name and process executable conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Block the identified indicators of compromise (IoCs).\n- Take actions to terminate processes and connections used by the attacker.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:linux and event.category:file and event.action:(creation or file_create_event) and\nuser.id:0 and file.extension:(pid or lock or reboot) and file.path:(/var/run/* or /run/*) and (\n (process.name : (\n bash or dash or sh or tcsh or csh or zsh or ksh or fish or ash or touch or nano or vim or vi or editor or mv or cp)\n ) or (\n process.executable : (\n ./* or /tmp/* or /var/tmp/* or /dev/shm/* or /var/run/* or /boot/* or /srv/* or /run/*\n ))\n) and not process.name : (go or git or containerd* or snap-confine or cron or crond or sshd or unattended-upgrade or \nvzctl or ifup or rpcbind or runc or gitlab-runner-helper or elastic-agent or metricbeat) and\nnot file.name : (jem.*.pid)\n", + "references": [ + "https://www.sandflysecurity.com/blog/linux-file-masquerading-and-malicious-pids-sandfly-1-2-6-update/", + "https://twitter.com/GossiTheDog/status/1522964028284411907", + "https://exatrack.com/public/Tricephalic_Hellkeeper.pdf", + "https://www.elastic.co/security-labs/a-peek-behind-the-bpfdoor" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cac91072-d165-11ec-a764-f661ea17fbce", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Threat: BPFDoor", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1106", + "name": "Native API", + "reference": "https://attack.mitre.org/techniques/T1106/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 213 + }, + "id": "cac91072-d165-11ec-a764-f661ea17fbce_213", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51_106.json b/packages/security_detection_engine/kibana/security_rule/cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51_106.json new file mode 100644 index 00000000000..09bdacd1a1e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51_106.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious modifications of the calendar file by an unusual process. Adversaries may create a custom calendar notification procedure to execute a malicious program at a recurring interval to establish persistence.", + "false_positives": [ + "Trusted applications for managing calendars and reminders." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Calendar File Modification", + "query": "event.category:file and host.os.type:macos and event.action:modification and\n file.path:/Users/*/Library/Calendars/*.calendar/Events/*.ics and\n process.executable:\n (* and not\n (\n /System/Library/* or\n /System/Applications/Calendar.app/Contents/MacOS/* or\n /System/Applications/Mail.app/Contents/MacOS/Mail or\n /usr/libexec/xpcproxy or\n /sbin/launchd or\n /Applications/*\n )\n )\n", + "references": [ + "https://labs.f-secure.com/blog/operationalising-calendar-alerts-persistence-on-macos", + "https://github.com/FSecureLABS/CalendarPersist", + "https://github.com/D00MFist/PersistentJXA/blob/master/CalendarPersist.js" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "cb71aa62-55c8-42f0-b0dd-afb0bb0b1f51_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cc2fd2d0-ba3a-4939-b87f-2901764ed036_106.json b/packages/security_detection_engine/kibana/security_rule/cc2fd2d0-ba3a-4939-b87f-2901764ed036_106.json new file mode 100644 index 00000000000..7187ff683a4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cc2fd2d0-ba3a-4939-b87f-2901764ed036_106.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to enable the root account using the dsenableroot command. This command may be abused by adversaries for persistence, as the root account is disabled by default.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Attempt to Enable the Root Account", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:dsenableroot and not process.args:\"-d\"\n", + "references": [ + "https://ss64.com/osx/dsenableroot.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cc2fd2d0-ba3a-4939-b87f-2901764ed036", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.003", + "name": "Local Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "cc2fd2d0-ba3a-4939-b87f-2901764ed036_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cc653d77-ddd2-45b1-9197-c75ad19df66c_3.json b/packages/security_detection_engine/kibana/security_rule/cc653d77-ddd2-45b1-9197-c75ad19df66c_3.json new file mode 100644 index 00000000000..e5cfece1f36 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cc653d77-ddd2-45b1-9197-c75ad19df66c_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected data exfiltration to a particular geo-location (by IP address). Data transfers to geo-locations that are outside the normal traffic patterns of an organization could indicate exfiltration over command and control channels.", + "from": "now-6h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_sent_bytes_destination_ip", + "name": "Potential Data Exfiltration Activity to an Unusual IP Address", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "risk_score": 21, + "rule_id": "cc653d77-ddd2-45b1-9197-c75ad19df66c", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your network data. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `logs-network_traffic.*` if you used Network Packet Capture.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "cc653d77-ddd2-45b1-9197-c75ad19df66c_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cd66a5af-e34b-4bb0-8931-57d0a043f2ef_109.json b/packages/security_detection_engine/kibana/security_rule/cd66a5af-e34b-4bb0-8931-57d0a043f2ef_109.json new file mode 100644 index 00000000000..00ddd19282c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cd66a5af-e34b-4bb0-8931-57d0a043f2ef_109.json @@ -0,0 +1,124 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Kernel modules are pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. This rule identifies attempts to remove a kernel module.", + "false_positives": [ + "There is usually no reason to remove modules, but some buggy modules require it. These can be exempted by username. Note that some Linux distributions are not built to support the removal of modules at all." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Kernel Module Removal", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name == \"rmmod\" or (process.name == \"modprobe\" and process.args in (\"--remove\", \"-r\")) and \nprocess.parent.name in (\"sudo\", \"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n", + "references": [ + "http://man7.org/linux/man-pages/man8/modprobe.8.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cd66a5af-e34b-4bb0-8931-57d0a043f2ef", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.006", + "name": "Kernel Modules and Extensions", + "reference": "https://attack.mitre.org/techniques/T1547/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "cd66a5af-e34b-4bb0-8931-57d0a043f2ef_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cde1bafa-9f01-4f43-a872-605b678968b0_10.json b/packages/security_detection_engine/kibana/security_rule/cde1bafa-9f01-4f43-a872-605b678968b0_10.json new file mode 100644 index 00000000000..1677a72f8be --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cde1bafa-9f01-4f43-a872-605b678968b0_10.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects known PowerShell offensive tooling functions names in PowerShell scripts. Attackers commonly use out-of-the-box offensive tools without modifying the code. This rule aim is to take advantage of that.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential PowerShell HackTool Script by Function Names", + "note": "## Triage and analysis\n\n### Investigating Potential PowerShell HackTool Script by Function Names\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAdversaries often exploit PowerShell's capabilities to execute malicious scripts and perform various attacks. This rule identifies known offensive tooling function names in PowerShell scripts, as attackers commonly use out-of-the-box tools without modifying the code. By monitoring these specific function names, the rule aims to detect and alert potential malicious PowerShell activity.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine the script's execution context, such as the user account, privileges, the role of the system on which it was executed, and any relevant timestamps.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Investigate the origin of the PowerShell script, including its source, download method, and any associated URLs or IP addresses.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process's `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This rule may generate false positives if legitimate scripts or tools used by administrators contain any of the listed function names. These function names are commonly associated with offensive tooling, but they may also be present in benign scripts or tools.\n- To handle these false positives consider adding exceptions - preferably with a combination of full file path and users.\n\n### Related Rules\n\n- PowerShell Invoke-NinjaCopy script - b8386923-b02c-4b94-986a-d223d9b01f88\n- PowerShell Suspicious Discovery Related Windows API Functions - 61ac3638-40a3-44b2-855a-985636ca985e\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- PowerShell Keylogging Script - bd2c86a0-8b61-4457-ab38-96943984e889\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"Add-DomainGroupMember\" or \"Add-DomainObjectAcl\" or\n \"Add-RemoteConnection\" or \"Add-ServiceDacl\" or\n \"Add-Win32Type\" or \"Convert-ADName\" or\n \"Convert-LDAPProperty\" or \"ConvertFrom-LDAPLogonHours\" or\n \"ConvertFrom-UACValue\" or \"Copy-ArrayOfMemAddresses\" or\n \"Create-NamedPipe\" or \"Create-ProcessWithToken\" or\n \"Create-RemoteThread\" or \"Create-SuspendedWinLogon\" or\n \"Create-WinLogonProcess\" or \"Emit-CallThreadStub\" or\n \"Enable-SeAssignPrimaryTokenPrivilege\" or \"Enable-SeDebugPrivilege\" or\n \"Enum-AllTokens\" or \"Export-PowerViewCSV\" or\n \"Find-AVSignature\" or \"Find-AppLockerLog\" or\n \"Find-DomainLocalGroupMember\" or \"Find-DomainObjectPropertyOutlier\" or\n \"Find-DomainProcess\" or \"Find-DomainShare\" or\n \"Find-DomainUserEvent\" or \"Find-DomainUserLocation\" or\n \"Find-InterestingDomainAcl\" or \"Find-InterestingDomainShareFile\" or\n \"Find-InterestingFile\" or \"Find-LocalAdminAccess\" or\n \"Find-PSScriptsInPSAppLog\" or \"Find-PathDLLHijack\" or\n \"Find-ProcessDLLHijack\" or \"Find-RDPClientConnection\" or\n \"Get-AllAttributesForClass\" or \"Get-CachedGPPPassword\" or\n \"Get-DecryptedCpassword\" or \"Get-DecryptedSitelistPassword\" or\n \"Get-DelegateType\" or\n \"Get-DomainDFSShare\" or \"Get-DomainDFSShareV1\" or\n \"Get-DomainDFSShareV2\" or \"Get-DomainDNSRecord\" or\n \"Get-DomainDNSZone\" or \"Get-DomainFileServer\" or\n \"Get-DomainForeignGroupMember\" or \"Get-DomainForeignUser\" or\n \"Get-DomainGPO\" or \"Get-DomainGPOComputerLocalGroupMapping\" or\n \"Get-DomainGPOLocalGroup\" or \"Get-DomainGPOUserLocalGroupMapping\" or\n \"Get-DomainGUIDMap\" or \"Get-DomainGroup\" or\n \"Get-DomainGroupMember\" or \"Get-DomainGroupMemberDeleted\" or\n \"Get-DomainManagedSecurityGroup\" or \"Get-DomainOU\" or\n \"Get-DomainObject\" or \"Get-DomainObjectAcl\" or\n \"Get-DomainObjectAttributeHistory\" or \"Get-DomainObjectLinkedAttributeHistory\" or\n \"Get-DomainPolicyData\" or \"Get-DomainSID\" or\n \"Get-DomainSPNTicket\" or \"Get-DomainSearcher\" or\n \"Get-DomainSite\" or \"Get-DomainSubnet\" or\n \"Get-DomainTrust\" or \"Get-DomainTrustMapping\" or\n \"Get-DomainUser\" or \"Get-DomainUserEvent\" or\n \"Get-Forest\" or \"Get-ForestDomain\" or\n \"Get-ForestGlobalCatalog\" or \"Get-ForestSchemaClass\" or\n \"Get-ForestTrust\" or \"Get-GPODelegation\" or\n \"Get-GPPAutologon\" or \"Get-GPPInnerField\" or\n \"Get-GPPInnerFields\" or \"Get-GPPPassword\" or\n \"Get-GptTmpl\" or \"Get-GroupsXML\" or\n \"Get-HttpStatus\" or \"Get-ImageNtHeaders\" or\n \"Get-Keystrokes\" or\n \"Get-MemoryProcAddress\" or \"Get-MicrophoneAudio\" or\n \"Get-ModifiablePath\" or \"Get-ModifiableRegistryAutoRun\" or\n \"Get-ModifiableScheduledTaskFile\" or \"Get-ModifiableService\" or\n \"Get-ModifiableServiceFile\" or \"Get-Name\" or\n \"Get-NetComputerSiteName\" or \"Get-NetLocalGroup\" or\n \"Get-NetLocalGroupMember\" or \"Get-NetLoggedon\" or\n \"Get-NetRDPSession\" or \"Get-NetSession\" or\n \"Get-NetShare\" or \"Get-PEArchitecture\" or\n \"Get-PEBasicInfo\" or \"Get-PEDetailedInfo\" or\n \"Get-PathAcl\" or \"Get-PrimaryToken\" or\n \"Get-ProcAddress\" or \"Get-ProcessTokenGroup\" or\n \"Get-ProcessTokenPrivilege\" or \"Get-ProcessTokenType\" or\n \"Get-RegLoggedOn\" or \"Get-RegistryAlwaysInstallElevated\" or\n \"Get-RegistryAutoLogon\" or \"Get-RemoteProcAddress\" or\n \"Get-Screenshot\" or \"Get-ServiceDetail\" or\n \"Get-SiteListPassword\" or \"Get-SitelistField\" or\n \"Get-System\" or \"Get-SystemNamedPipe\" or\n \"Get-SystemToken\" or \"Get-ThreadToken\" or\n \"Get-TimedScreenshot\" or \"Get-TokenInformation\" or\n \"Get-TopPort\" or \"Get-UnattendedInstallFile\" or\n \"Get-UniqueTokens\" or \"Get-UnquotedService\" or\n \"Get-VaultCredential\" or \"Get-VaultElementValue\" or\n \"Get-VirtualProtectValue\" or \"Get-VolumeShadowCopy\" or\n \"Get-WMIProcess\" or \"Get-WMIRegCachedRDPConnection\" or\n \"Get-WMIRegLastLoggedOn\" or \"Get-WMIRegMountedDrive\" or\n \"Get-WMIRegProxy\" or \"Get-WebConfig\" or\n \"Get-Win32Constants\" or \"Get-Win32Functions\" or\n \"Get-Win32Types\" or \"Import-DllImports\" or\n \"Import-DllInRemoteProcess\" or \"Inject-LocalShellcode\" or\n \"Inject-RemoteShellcode\" or \"Install-ServiceBinary\" or\n \"Invoke-CompareAttributesForClass\" or \"Invoke-CreateRemoteThread\" or\n \"Invoke-CredentialInjection\" or \"Invoke-DllInjection\" or\n \"Invoke-EventVwrBypass\" or \"Invoke-ImpersonateUser\" or\n \"Invoke-Kerberoast\" or \"Invoke-MemoryFreeLibrary\" or\n \"Invoke-MemoryLoadLibrary\" or\n \"Invoke-Mimikatz\" or \"Invoke-NinjaCopy\" or\n \"Invoke-PatchDll\" or \"Invoke-Portscan\" or\n \"Invoke-PrivescAudit\" or \"Invoke-ReflectivePEInjection\" or\n \"Invoke-ReverseDnsLookup\" or \"Invoke-RevertToSelf\" or\n \"Invoke-ServiceAbuse\" or \"Invoke-Shellcode\" or\n \"Invoke-TokenManipulation\" or \"Invoke-UserImpersonation\" or\n \"Invoke-WmiCommand\" or \"Mount-VolumeShadowCopy\" or\n \"New-ADObjectAccessControlEntry\" or \"New-DomainGroup\" or\n \"New-DomainUser\" or \"New-DynamicParameter\" or\n \"New-InMemoryModule\" or\n \"New-ThreadedFunction\" or \"New-VolumeShadowCopy\" or\n \"Out-CompressedDll\" or \"Out-EncodedCommand\" or\n \"Out-EncryptedScript\" or \"Out-Minidump\" or\n \"PortScan-Alive\" or \"Portscan-Port\" or\n \"Remove-DomainGroupMember\" or \"Remove-DomainObjectAcl\" or\n \"Remove-RemoteConnection\" or \"Remove-VolumeShadowCopy\" or\n \"Restore-ServiceBinary\" or \"Set-DesktopACLToAllowEveryone\" or\n \"Set-DesktopACLs\" or \"Set-DomainObject\" or\n \"Set-DomainObjectOwner\" or \"Set-DomainUserPassword\" or\n \"Set-ServiceBinaryPath\" or \"Sub-SignedIntAsUnsigned\" or\n \"Test-AdminAccess\" or \"Test-MemoryRangeValid\" or\n \"Test-ServiceDaclPermission\" or \"Update-ExeFunctions\" or\n \"Update-MemoryAddresses\" or \"Update-MemoryProtectionFlags\" or\n \"Write-BytesToMemory\" or \"Write-HijackDll\" or\n \"Write-PortscanOut\" or \"Write-ServiceBinary\" or\n \"Write-UserAddMSI\" or \"Invoke-Privesc\" or\n \"func_get_proc_address\" or \"Invoke-BloodHound\" or\n \"Invoke-HostEnum\" or \"Get-BrowserInformation\" or\n \"Get-DomainAccountPolicy\" or \"Get-DomainAdmins\" or\n \"Get-AVProcesses\" or \"Get-AVInfo\" or\n \"Get-RecycleBin\" or \"Invoke-BruteForce\" or\n \"Get-PassHints\" or \"Invoke-SessionGopher\" or\n \"Get-LSASecret\" or \"Get-PassHashes\" or\n \"Invoke-WdigestDowngrade\" or \"Get-ChromeDump\" or\n \"Invoke-DomainPasswordSpray\" or \"Get-FoxDump\" or\n \"New-HoneyHash\" or \"Invoke-DCSync\" or\n \"Invoke-PowerDump\" or \"Invoke-SSIDExfil\" or\n \"Invoke-PowerShellTCP\" or \"Add-Exfiltration\" or\n \"Do-Exfiltration\" or \"Invoke-DropboxUpload\" or\n \"Invoke-ExfilDataToGitHub\" or \"Invoke-EgressCheck\" or\n \"Invoke-PostExfil\" or \"Create-MultipleSessions\" or\n \"Invoke-NetworkRelay\" or \"New-GPOImmediateTask\" or\n \"Invoke-WMIDebugger\" or \"Invoke-SQLOSCMD\" or\n \"Invoke-SMBExec\" or \"Invoke-PSRemoting\" or\n \"Invoke-ExecuteMSBuild\" or \"Invoke-DCOM\" or\n \"Invoke-InveighRelay\" or \"Invoke-PsExec\" or\n \"Invoke-SSHCommand\" or \"Find-ActiveUsersWMI\" or\n \"Get-SystemDrivesWMI\" or \"Get-ActiveNICSWMI\" or\n \"Remove-Persistence\" or \"DNS_TXT_Pwnage\" or\n \"Execute-OnTime\" or \"HTTP-Backdoor\" or\n \"Add-ConstrainedDelegationBackdoor\" or \"Add-RegBackdoor\" or\n \"Add-ScrnSaveBackdoor\" or \"Gupt-Backdoor\" or\n \"Invoke-ADSBackdoor\" or \"Add-Persistence\" or\n \"Invoke-ResolverBackdoor\" or \"Invoke-EventLogBackdoor\" or\n \"Invoke-DeadUserBackdoor\" or \"Invoke-DisableMachineAcctChange\" or\n \"Invoke-AccessBinary\" or \"Add-NetUser\" or\n \"Invoke-Schtasks\" or \"Invoke-JSRatRegsvr\" or\n \"Invoke-JSRatRundll\" or \"Invoke-PoshRatHttps\" or\n \"Invoke-PsGcatAgent\" or \"Remove-PoshRat\" or\n \"Install-SSP\" or \"Invoke-BackdoorLNK\" or\n \"PowerBreach\" or \"InstallEXE-Persistence\" or\n \"RemoveEXE-Persistence\" or \"Install-ServiceLevel-Persistence\" or\n \"Remove-ServiceLevel-Persistence\" or \"Invoke-Prompt\" or\n \"Invoke-PacketCapture\" or \"Start-WebcamRecorder\" or\n \"Get-USBKeyStrokes\" or \"Invoke-KeeThief\" or\n \"Get-Keystrokes\" or \"Invoke-NetRipper\" or\n \"Get-EmailItems\" or \"Invoke-MailSearch\" or\n \"Invoke-SearchGAL\" or \"Get-WebCredentials\" or\n \"Start-CaptureServer\" or \"Invoke-PowerShellIcmp\" or\n \"Invoke-PowerShellTcpOneLine\" or \"Invoke-PowerShellTcpOneLineBind\" or\n \"Invoke-PowerShellUdp\" or \"Invoke-PowerShellUdpOneLine\" or\n \"Run-EXEonRemote\" or \"Download-Execute-PS\" or\n \"Out-RundllCommand\" or \"Set-RemoteWMI\" or\n \"Set-DCShadowPermissions\" or \"Invoke-PowerShellWMI\" or\n \"Invoke-Vnc\" or \"Invoke-LockWorkStation\" or\n \"Invoke-EternalBlue\" or \"Invoke-ShellcodeMSIL\" or\n \"Invoke-MetasploitPayload\" or \"Invoke-DowngradeAccount\" or\n \"Invoke-RunAs\" or \"ExetoText\" or\n \"Disable-SecuritySettings\" or \"Set-MacAttribute\" or\n \"Invoke-MS16032\" or \"Invoke-BypassUACTokenManipulation\" or\n \"Invoke-SDCLTBypass\" or \"Invoke-FodHelperBypass\" or\n \"Invoke-EventVwrBypass\" or \"Invoke-EnvBypass\" or\n \"Get-ServiceUnquoted\" or \"Get-ServiceFilePermission\" or\n \"Get-ServicePermission\" or\n \"Enable-DuplicateToken\" or \"Invoke-PsUaCme\" or\n \"Invoke-Tater\" or \"Invoke-WScriptBypassUAC\" or\n \"Invoke-AllChecks\" or \"Find-TrustedDocuments\" or\n \"Invoke-Interceptor\" or \"Invoke-PoshRatHttp\" or\n \"Invoke-ExecCommandWMI\" or \"Invoke-KillProcessWMI\" or\n \"Invoke-CreateShareandExecute\" or \"Invoke-RemoteScriptWithOutput\" or\n \"Invoke-SchedJobManipulation\" or \"Invoke-ServiceManipulation\" or\n \"Invoke-PowerOptionsWMI\" or \"Invoke-DirectoryListing\" or\n \"Invoke-FileTransferOverWMI\" or \"Invoke-WMImplant\" or\n \"Invoke-WMIObfuscatedPSCommand\" or \"Invoke-WMIDuplicateClass\" or\n \"Invoke-WMIUpload\" or \"Invoke-WMIRemoteExtract\" or \"Invoke-winPEAS\"\n ) and\n not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\"\n ) and\n not file.path : (\n ?\\:\\\\\\\\ProgramData\\\\\\\\Microsoft\\\\\\\\Windows?Defender?Advanced?Threat?Protection\\\\\\\\DataCollection\\\\\\\\*\n ) and\n not user.id : (\"S-1-5-18\" or \"S-1-5-19\")\n", + "references": [ + "https://github.com/atc-project/atc-data/blob/master/docs/Logging_Policies/LP_0109_windows_powershell_script_block_log.md", + "https://github.com/BC-SECURITY/Empire" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cde1bafa-9f01-4f43-a872-605b678968b0", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 10 + }, + "id": "cde1bafa-9f01-4f43-a872-605b678968b0_10", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ce64d965-6cb0-466d-b74f-8d2c76f47f05_108.json b/packages/security_detection_engine/kibana/security_rule/ce64d965-6cb0-466d-b74f-8d2c76f47f05_108.json new file mode 100644 index 00000000000..3de13898a70 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ce64d965-6cb0-466d-b74f-8d2c76f47f05_108.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of the Exchange PowerShell cmdlet, Set-CASMailbox, to add a new ActiveSync allowed device. Adversaries may target user email to collect sensitive information.", + "false_positives": [ + "Legitimate exchange system administration activity." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "New ActiveSyncAllowedDeviceID Added via PowerShell", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name: (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") and process.args : \"Set-CASMailbox*ActiveSyncAllowedDeviceIDs*\"\n", + "references": [ + "https://www.volexity.com/blog/2020/12/14/dark-halo-leverages-solarwinds-compromise-to-breach-organizations/", + "https://docs.microsoft.com/en-us/powershell/module/exchange/set-casmailbox?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ce64d965-6cb0-466d-b74f-8d2c76f47f05", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/", + "subtechnique": [ + { + "id": "T1098.002", + "name": "Additional Email Delegate Permissions", + "reference": "https://attack.mitre.org/techniques/T1098/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "ce64d965-6cb0-466d-b74f-8d2c76f47f05_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cf6995ec-32a9-4b2d-9340-f8e61acf3f4e_2.json b/packages/security_detection_engine/kibana/security_rule/cf6995ec-32a9-4b2d-9340-f8e61acf3f4e_2.json new file mode 100644 index 00000000000..6d6580bffbe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cf6995ec-32a9-4b2d-9340-f8e61acf3f4e_2.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identify activity related where adversaries can include a trap command which then allows programs and shells to specify commands that will be executed upon receiving interrupt signals.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Trap Signals Execution", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and\nprocess.name == \"trap\" and process.args : \"SIG*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "cf6995ec-32a9-4b2d-9340-f8e61acf3f4e", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.005", + "name": "Trap", + "reference": "https://attack.mitre.org/techniques/T1546/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "cf6995ec-32a9-4b2d-9340-f8e61acf3f4e_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/cff92c41-2225-4763-b4ce-6f71e5bda5e6_111.json b/packages/security_detection_engine/kibana/security_rule/cff92c41-2225-4763-b4ce-6f71e5bda5e6_111.json new file mode 100644 index 00000000000..da4ac79fbc9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/cff92c41-2225-4763-b4ce-6f71e5bda5e6_111.json @@ -0,0 +1,127 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies process execution from suspicious default Windows directories. This may be abused by adversaries to hide malware in trusted paths.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution from Unusual Directory - Command Line", + "note": "## Triage and analysis\n\n### Investigating Execution from Unusual Directory - Command Line\n\nThis rule looks for the execution of scripts from unusual directories. Attackers can use system or application paths to hide malware and make the execution less suspicious.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the command line to determine which commands or scripts were executed.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of parent process executable and command line conditions.\n\n### Related rules\n\n- Process Execution from an Unusual Directory - ebfe1448-7fac-4d59-acea-181bd89b1f7f\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"wscript.exe\",\n \"cscript.exe\",\n \"rundll32.exe\",\n \"regsvr32.exe\",\n \"cmstp.exe\",\n \"RegAsm.exe\",\n \"installutil.exe\",\n \"mshta.exe\",\n \"RegSvcs.exe\",\n \"powershell.exe\",\n \"pwsh.exe\",\n \"cmd.exe\") and\n\n /* add suspicious execution paths here */\n process.args : (\"C:\\\\PerfLogs\\\\*\",\n \"C:\\\\Users\\\\Public\\\\*\",\n \"C:\\\\Windows\\\\Tasks\\\\*\",\n \"C:\\\\Intel\\\\*\",\n \"C:\\\\AMD\\\\Temp\\\\*\",\n \"C:\\\\Windows\\\\AppReadiness\\\\*\",\n \"C:\\\\Windows\\\\ServiceState\\\\*\",\n \"C:\\\\Windows\\\\security\\\\*\",\n \"C:\\\\Windows\\\\IdentityCRL\\\\*\",\n \"C:\\\\Windows\\\\Branding\\\\*\",\n \"C:\\\\Windows\\\\csc\\\\*\",\n \"C:\\\\Windows\\\\DigitalLocker\\\\*\",\n \"C:\\\\Windows\\\\en-US\\\\*\",\n \"C:\\\\Windows\\\\wlansvc\\\\*\",\n \"C:\\\\Windows\\\\Prefetch\\\\*\",\n \"C:\\\\Windows\\\\Fonts\\\\*\",\n \"C:\\\\Windows\\\\diagnostics\\\\*\",\n \"C:\\\\Windows\\\\TAPI\\\\*\",\n \"C:\\\\Windows\\\\INF\\\\*\",\n \"C:\\\\Windows\\\\System32\\\\Speech\\\\*\",\n \"C:\\\\windows\\\\tracing\\\\*\",\n \"c:\\\\windows\\\\IME\\\\*\",\n \"c:\\\\Windows\\\\Performance\\\\*\",\n \"c:\\\\windows\\\\intel\\\\*\",\n \"c:\\\\windows\\\\ms\\\\*\",\n \"C:\\\\Windows\\\\dot3svc\\\\*\",\n \"C:\\\\Windows\\\\panther\\\\*\",\n \"C:\\\\Windows\\\\RemotePackages\\\\*\",\n \"C:\\\\Windows\\\\OCR\\\\*\",\n \"C:\\\\Windows\\\\appcompat\\\\*\",\n \"C:\\\\Windows\\\\apppatch\\\\*\",\n \"C:\\\\Windows\\\\addins\\\\*\",\n \"C:\\\\Windows\\\\Setup\\\\*\",\n \"C:\\\\Windows\\\\Help\\\\*\",\n \"C:\\\\Windows\\\\SKB\\\\*\",\n \"C:\\\\Windows\\\\Vss\\\\*\",\n \"C:\\\\Windows\\\\servicing\\\\*\",\n \"C:\\\\Windows\\\\CbsTemp\\\\*\",\n \"C:\\\\Windows\\\\Logs\\\\*\",\n \"C:\\\\Windows\\\\WaaS\\\\*\",\n \"C:\\\\Windows\\\\twain_32\\\\*\",\n \"C:\\\\Windows\\\\ShellExperiences\\\\*\",\n \"C:\\\\Windows\\\\ShellComponents\\\\*\",\n \"C:\\\\Windows\\\\PLA\\\\*\",\n \"C:\\\\Windows\\\\Migration\\\\*\",\n \"C:\\\\Windows\\\\debug\\\\*\",\n \"C:\\\\Windows\\\\Cursors\\\\*\",\n \"C:\\\\Windows\\\\Containers\\\\*\",\n \"C:\\\\Windows\\\\Boot\\\\*\",\n \"C:\\\\Windows\\\\bcastdvr\\\\*\",\n \"C:\\\\Windows\\\\TextInput\\\\*\",\n \"C:\\\\Windows\\\\security\\\\*\",\n \"C:\\\\Windows\\\\schemas\\\\*\",\n \"C:\\\\Windows\\\\SchCache\\\\*\",\n \"C:\\\\Windows\\\\Resources\\\\*\",\n \"C:\\\\Windows\\\\rescache\\\\*\",\n \"C:\\\\Windows\\\\Provisioning\\\\*\",\n \"C:\\\\Windows\\\\PrintDialog\\\\*\",\n \"C:\\\\Windows\\\\PolicyDefinitions\\\\*\",\n \"C:\\\\Windows\\\\media\\\\*\",\n \"C:\\\\Windows\\\\Globalization\\\\*\",\n \"C:\\\\Windows\\\\L2Schemas\\\\*\",\n \"C:\\\\Windows\\\\LiveKernelReports\\\\*\",\n \"C:\\\\Windows\\\\ModemLogs\\\\*\",\n \"C:\\\\Windows\\\\ImmersiveControlPanel\\\\*\",\n \"C:\\\\$Recycle.Bin\\\\*\") and\n\n /* noisy FP patterns */\n\n not process.parent.executable : (\"C:\\\\WINDOWS\\\\System32\\\\DriverStore\\\\FileRepository\\\\*\\\\igfxCUIService*.exe\",\n \"C:\\\\Windows\\\\System32\\\\spacedeskService.exe\",\n \"C:\\\\Program Files\\\\Dell\\\\SupportAssistAgent\\\\SRE\\\\SRE.exe\") and\n not (process.name : \"rundll32.exe\" and\n process.args : (\"uxtheme.dll,#64\",\n \"PRINTUI.DLL,PrintUIEntry\",\n \"?:\\\\Windows\\\\System32\\\\FirewallControlPanel.dll,ShowNotificationDialog\",\n \"?:\\\\WINDOWS\\\\system32\\\\Speech\\\\SpeechUX\\\\sapi.cpl\",\n \"?:\\\\Windows\\\\system32\\\\shell32.dll,OpenAs_RunDLL\")) and\n\n not (process.name : \"cscript.exe\" and process.args : \"?:\\\\WINDOWS\\\\system32\\\\calluxxprovider.vbs\") and\n\n not (process.name : \"cmd.exe\" and process.args : \"?:\\\\WINDOWS\\\\system32\\\\powercfg.exe\" and process.args : \"?:\\\\WINDOWS\\\\inf\\\\PowerPlan.log\") and\n\n not (process.name : \"regsvr32.exe\" and process.args : \"?:\\\\Windows\\\\Help\\\\OEM\\\\scripts\\\\checkmui.dll\") and\n\n not (process.name : \"cmd.exe\" and\n process.parent.executable : (\"?:\\\\Windows\\\\System32\\\\oobe\\\\windeploy.exe\",\n \"?:\\\\Program Files (x86)\\\\ossec-agent\\\\wazuh-agent.exe\",\n \"?:\\\\Windows\\\\System32\\\\igfxCUIService.exe\",\n \"?:\\\\Windows\\\\Temp\\\\IE*.tmp\\\\IE*-support\\\\ienrcore.exe\"))\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "cff92c41-2225-4763-b4ce-6f71e5bda5e6", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "cff92c41-2225-4763-b4ce-6f71e5bda5e6_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d00f33e7-b57d-4023-9952-2db91b1767c4_9.json b/packages/security_detection_engine/kibana/security_rule/d00f33e7-b57d-4023-9952-2db91b1767c4_9.json new file mode 100644 index 00000000000..354faddcc25 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d00f33e7-b57d-4023-9952-2db91b1767c4_9.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious usage of unshare to manipulate system namespaces. Unshare can be utilized to escalate privileges or escape container security boundaries. Threat actors have utilized this binary to allow themselves to escape to the host and access other resources or escalate privileges.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Namespace Manipulation Using Unshare", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action : (\"exec\", \"exec_event\") and\nprocess.executable: \"/usr/bin/unshare\" and\nnot process.parent.executable: (\"/usr/bin/udevadm\", \"*/lib/systemd/systemd-udevd\", \"/usr/bin/unshare\") and\nnot process.args == \"/usr/bin/snap\" and not process.parent.name in (\"zz-proxmox-boot\", \"java\")\n", + "references": [ + "https://man7.org/linux/man-pages/man1/unshare.1.html", + "https://www.crowdstrike.com/blog/cve-2022-0185-kubernetes-container-escape-using-linux-kernel-exploit/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d00f33e7-b57d-4023-9952-2db91b1767c4", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 9 + }, + "id": "d00f33e7-b57d-4023-9952-2db91b1767c4_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d0e159cf-73e9-40d1-a9ed-077e3158a855_109.json b/packages/security_detection_engine/kibana/security_rule/d0e159cf-73e9-40d1-a9ed-077e3158a855_109.json new file mode 100644 index 00000000000..8e482f64181 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d0e159cf-73e9-40d1-a9ed-077e3158a855_109.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "AppInit DLLs are dynamic-link libraries (DLLs) that are loaded into every process that creates a user interface (loads user32.dll) on Microsoft Windows operating systems. The AppInit DLL mechanism is used to load custom code into user-mode processes, allowing for the customization of the user interface and the behavior of Windows-based applications. Attackers who add those DLLs to the registry locations can execute code with elevated privileges, similar to process injection, and provide a solid and constant persistence on the machine.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Registry Persistence via AppInit DLL", + "note": "## Triage and analysis\n\n### Investigating Registry Persistence via AppInit DLL\n\nAppInit DLLs are dynamic-link libraries (DLLs) that are loaded into every process that creates a user interface (loads `user32.dll`) on Microsoft Windows operating systems. The AppInit DLL mechanism is used to load custom code into user-mode processes, allowing for the customization of the user interface and the behavior of Windows-based applications.\n\nAttackers who add those DLLs to the registry locations can execute code with elevated privileges, similar to process injection, and provide a solid and constant persistence on the machine.\n\nThis rule identifies modifications on the AppInit registry keys.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Review the source process and related DLL file tied to the Windows Registry entry.\n - Check whether the DLL is signed, and tied to a authorized program used on your environment.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Retrieve all DLLs under the AppInit registry keys:\n - !{osquery{\"label\":\"Osquery - Retrieve AppInit Registry Value\",\"query\":\"SELECT * FROM registry r where (r.key == 'HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows' or\\nr.key == 'HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Wow6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows') and r.name ==\\n'AppInit_DLLs'\\n\"}}\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable and the DLLs using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\AppInit_Dlls\",\n \"HKLM\\\\SOFTWARE\\\\Wow6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\AppInit_Dlls\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\AppInit_Dlls\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Wow6432Node\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows\\\\AppInit_Dlls\"\n ) and\n not process.executable : (\n \"?:\\\\Windows\\\\System32\\\\DriverStore\\\\FileRepository\\\\*\\\\Display.NvContainer\\\\NVDisplay.Container.exe\",\n \"?:\\\\Windows\\\\System32\\\\msiexec.exe\",\n \"?:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\",\n \"?:\\\\Program Files\\\\Commvault\\\\Base\\\\cvd.exe\",\n \"?:\\\\Program Files\\\\Commvault\\\\ContentStore*\\\\Base\\\\cvd.exe\",\n \"?:\\\\Program Files (x86)\\\\Commvault\\\\Base\\\\cvd.exe\",\n \"?:\\\\Program Files (x86)\\\\Commvault\\\\ContentStore*\\\\Base\\\\cvd.exe\",\n \"?:\\\\Program Files\\\\NVIDIA Corporation\\\\Display.NvContainer\\\\NVDisplay.Container.exe\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d0e159cf-73e9-40d1-a9ed-077e3158a855", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.010", + "name": "AppInit DLLs", + "reference": "https://attack.mitre.org/techniques/T1546/010/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "d0e159cf-73e9-40d1-a9ed-077e3158a855_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d117cbb4-7d56-41b4-b999-bdf8c25648a0_110.json b/packages/security_detection_engine/kibana/security_rule/d117cbb4-7d56-41b4-b999-bdf8c25648a0_110.json new file mode 100644 index 00000000000..c70dda89585 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d117cbb4-7d56-41b4-b999-bdf8c25648a0_110.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies the creation of symbolic links to a shadow copy. Symbolic links can be used to access files in the shadow copy, including sensitive files such as ntds.dit, System Boot Key and browser offline credentials.", + "false_positives": [ + "Legitimate administrative activity related to shadow copies." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Symbolic Link to Shadow Copy Created", + "note": "## Triage and analysis\n\n### Investigating Symbolic Link to Shadow Copy Created\n\nShadow copies are backups or snapshots of an endpoint's files or volumes while they are in use. Adversaries may attempt to discover and create symbolic links to these shadow copies in order to copy sensitive information offline. If Active Directory (AD) is in use, often the ntds.dit file is a target as it contains password hashes, but an offline copy is needed to extract these hashes and potentially conduct lateral movement.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Determine if a volume shadow copy was recently created on this endpoint.\n- Review privileges of the end user as this requires administrative access.\n- Verify if the ntds.dit file was successfully copied and determine its copy destination.\n- Investigate for registry SYSTEM file copies made recently or saved via Reg.exe.\n- Investigate recent deletions of volume shadow copies.\n- Identify other files potentially copied from volume shadow copy paths directly.\n\n### False positive analysis\n\n- This rule should cause very few false positives. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- NTDS or SAM Database File Copied - 3bc6deaa-fbd4-433a-ae21-3e892f95624f\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- If the entire domain or the `krbtgt` user was compromised:\n - Activate your incident response plan for total Active Directory compromise which should include, but not be limited to, a password reset (twice) of the `krbtgt` user.\n- Locate and remove static files copied from volume shadow copies.\n- Command-Line tool mklink should require administrative access by default unless in developer mode.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n (?process.pe.original_file_name in (\"Cmd.Exe\",\"PowerShell.EXE\")) or\n (process.name : (\"cmd.exe\", \"powershell.exe\"))\n ) and\n\n /* Create Symbolic Link to Shadow Copies */\n process.args : (\"*mklink*\", \"*SymbolicLink*\") and process.command_line : (\"*HarddiskVolumeShadowCopy*\")\n", + "references": [ + "https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mklink", + "https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Kheirkhabarov_Hunting_for_Credentials_Dumping_in_Windows_Environment.pdf", + "https://blog.netwrix.com/2021/11/30/extracting-password-hashes-from-the-ntds-dit-file/", + "https://www.hackingarticles.in/credential-dumping-ntds-dit/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d117cbb4-7d56-41b4-b999-bdf8c25648a0", + "setup": "## Setup\n\nEnsure advanced audit policies for Windows are enabled, specifically:\nObject Access policies [Event ID 4656](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4656) (Handle to an Object was Requested)\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nSystem Audit Policies >\nObject Access >\nAudit File System (Success,Failure)\nAudit Handle Manipulation (Success,Failure)\n```\n\nThis event will only trigger if symbolic links are created from a new process spawning cmd.exe or powershell.exe with the correct arguments.\nDirect access to a shell and calling symbolic link creation tools will not generate an event matching this rule.\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.002", + "name": "Security Account Manager", + "reference": "https://attack.mitre.org/techniques/T1003/002/" + }, + { + "id": "T1003.003", + "name": "NTDS", + "reference": "https://attack.mitre.org/techniques/T1003/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "d117cbb4-7d56-41b4-b999-bdf8c25648a0_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d22a85c6-d2ad-4cc4-bf7b-54787473669a_106.json b/packages/security_detection_engine/kibana/security_rule/d22a85c6-d2ad-4cc4-bf7b-54787473669a_106.json new file mode 100644 index 00000000000..55b96a4e815 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d22a85c6-d2ad-4cc4-bf7b-54787473669a_106.json @@ -0,0 +1,82 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a suspicious zip file prepended with special characters. Sandboxed Microsoft Office applications on macOS are allowed to write files that start with special characters, which can be combined with an AutoStart location to achieve sandbox evasion.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Microsoft Office Sandbox Evasion", + "query": "event.category:file and host.os.type:(macos and macos) and not event.type:deletion and file.name:~$*.zip\n", + "references": [ + "https://i.blackhat.com/USA-20/Wednesday/us-20-Wardle-Office-Drama-On-macOS.pdf", + "https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/", + "https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d22a85c6-d2ad-4cc4-bf7b-54787473669a", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1497", + "name": "Virtualization/Sandbox Evasion", + "reference": "https://attack.mitre.org/techniques/T1497/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "d22a85c6-d2ad-4cc4-bf7b-54787473669a_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d31f183a-e5b1-451b-8534-ba62bca0b404_109.json b/packages/security_detection_engine/kibana/security_rule/d31f183a-e5b1-451b-8534-ba62bca0b404_109.json new file mode 100644 index 00000000000..c45fc084be5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d31f183a-e5b1-451b-8534-ba62bca0b404_109.json @@ -0,0 +1,139 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "User Account Control (UAC) can help mitigate the impact of malware on Windows hosts. With UAC, apps and tasks always run in the security context of a non-administrator account, unless an administrator specifically authorizes administrator-level access to the system. This rule identifies registry value changes to bypass User Access Control (UAC) protection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Disabling User Account Control via Registry Modification", + "note": "## Triage and analysis\n\n### Investigating Disabling User Account Control via Registry Modification\n\nWindows User Account Control (UAC) allows a program to elevate its privileges (tracked as low to high integrity levels) to perform a task under administrator-level permissions, possibly by prompting the user for confirmation. UAC can deny an operation under high-integrity enforcement, or allow the user to perform the action if they are in the local administrators group and enter an administrator password when prompted.\n\nFor more information about the UAC and how it works, check the [official Microsoft docs page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works).\n\nAttackers may disable UAC to execute code directly in high integrity. This rule identifies registry value changes to bypass the UAC protection.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behaviors in the alert timeframe.\n- Investigate abnormal behaviors observed by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Analyze non-system processes executed with high integrity after UAC was disabled for unknown or suspicious processes.\n- Retrieve the suspicious processes' executables and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled tasks creation.\n - Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Restore UAC settings to the desired state.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type == \"change\" and\n registry.path :\n (\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\EnableLUA\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\ConsentPromptBehaviorAdmin\",\n \"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\PromptOnSecureDesktop\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\EnableLUA\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\ConsentPromptBehaviorAdmin\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System\\\\PromptOnSecureDesktop\"\n ) and\n registry.data.strings : (\"0\", \"0x00000000\")\n", + "references": [ + "https://www.greyhathacker.net/?p=796", + "https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings", + "https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-overview" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d31f183a-e5b1-451b-8534-ba62bca0b404", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + }, + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "d31f183a-e5b1-451b-8534-ba62bca0b404_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d331bbe2-6db4-4941-80a5-8270db72eb61_111.json b/packages/security_detection_engine/kibana/security_rule/d331bbe2-6db4-4941-80a5-8270db72eb61_111.json new file mode 100644 index 00000000000..8caf1833fad --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d331bbe2-6db4-4941-80a5-8270db72eb61_111.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to clear or disable Windows event log stores using Windows wevetutil command. This is often done by attackers in an attempt to evade detection or destroy forensic evidence on a system.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Clearing Windows Event Logs", + "note": "## Triage and analysis\n\n### Investigating Clearing Windows Event Logs\n\nWindows event logs are a fundamental data source for security monitoring, forensics, and incident response. Adversaries can tamper, clear, and delete this data to break SIEM detections, cover their tracks, and slow down incident response.\n\nThis rule looks for the execution of the `wevtutil.exe` utility or the `Clear-EventLog` cmdlet to clear event logs.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - Verify if any other anti-forensics behaviors were observed.\n- Investigate the event logs prior to the action for suspicious behaviors that an attacker may be trying to cover up.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity and there are justifications for this action.\n- Analyze whether the cleared event log is pertinent to security and general monitoring. Administrators can clear non-relevant event logs using this mechanism. If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - This activity is potentially done after the adversary achieves its objectives on the host. Ensure that previous actions, if any, are investigated accordingly with their response playbooks.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n(\n (\n (process.name : \"wevtutil.exe\" or ?process.pe.original_file_name == \"wevtutil.exe\") and\n process.args : (\"/e:false\", \"cl\", \"clear-log\")\n ) or\n (\n process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") and\n process.args : \"Clear-EventLog\"\n )\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "d331bbe2-6db4-4941-80a5-8270db72eb61", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1070", + "name": "Indicator Removal", + "reference": "https://attack.mitre.org/techniques/T1070/", + "subtechnique": [ + { + "id": "T1070.001", + "name": "Clear Windows Event Logs", + "reference": "https://attack.mitre.org/techniques/T1070/001/" + }, + { + "id": "T1562.002", + "name": "Disable Windows Event Logging", + "reference": "https://attack.mitre.org/techniques/T1562/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "d331bbe2-6db4-4941-80a5-8270db72eb61_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d461fac0-43e8-49e2-85ea-3a58fe120b4f_106.json b/packages/security_detection_engine/kibana/security_rule/d461fac0-43e8-49e2-85ea-3a58fe120b4f_106.json new file mode 100644 index 00000000000..a395ecb7cbe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d461fac0-43e8-49e2-85ea-3a58fe120b4f_106.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the shell process (sh) via scripting (JXA or AppleScript). Adversaries may use the doShellScript functionality in JXA or do shell script in AppleScript to execute system commands.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Shell Execution via Apple Scripting", + "query": "sequence by host.id with maxspan=5s\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\", \"info\") and process.name == \"osascript\"] by process.pid\n [process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name == \"sh\" and process.args == \"-c\"] by process.parent.pid\n", + "references": [ + "https://developer.apple.com/library/archive/technotes/tn2065/_index.html", + "https://objectivebythesea.com/v2/talks/OBTS_v2_Thomas.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + } + ], + "risk_score": 47, + "rule_id": "d461fac0-43e8-49e2-85ea-3a58fe120b4f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "d461fac0-43e8-49e2-85ea-3a58fe120b4f_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6.json b/packages/security_detection_engine/kibana/security_rule/d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6.json new file mode 100644 index 00000000000..c89c73eb8ec --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the potential memory dump of the init process (PID 1) through gdb. Attackers may leverage memory dumping techniques to attempt secret extraction from privileged processes. Tools that display this behavior include \"truffleproc\" and \"bash-memory-dump\". This behavior should not happen by default, and should be investigated thoroughly.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux init (PID 1) Secret Dump via GDB", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"gdb\" and process.args in (\"--pid\", \"-p\") and process.args == \"1\"\n", + "references": [ + "https://github.com/controlplaneio/truffleproc", + "https://github.com/hajzer/bash-memory-dump" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.007", + "name": "Proc Filesystem", + "reference": "https://attack.mitre.org/techniques/T1003/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "d4ff2f53-c802-4d2e-9fb9-9ecc08356c3f_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d55436a8-719c-445f-92c4-c113ff2f9ba5_5.json b/packages/security_detection_engine/kibana/security_rule/d55436a8-719c-445f-92c4-c113ff2f9ba5_5.json new file mode 100644 index 00000000000..b6ea9fe90bd --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d55436a8-719c-445f-92c4-c113ff2f9ba5_5.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of the systemd-run command by a user with a UID that is larger than the maximum allowed UID size (INT_MAX). Some older Linux versions were affected by a bug which allows user accounts with a UID greater than INT_MAX to escalate privileges by spawning a shell through systemd-run.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via UID INT_MAX Bug Detected", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"systemd-run\" and process.args == \"-t\" and process.args_count >= 3 and user.id >= \"1000000000\"\n", + "references": [ + "https://twitter.com/paragonsec/status/1071152249529884674", + "https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh", + "https://gitlab.freedesktop.org/polkit/polkit/-/issues/74" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d55436a8-719c-445f-92c4-c113ff2f9ba5", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "d55436a8-719c-445f-92c4-c113ff2f9ba5_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d55abdfb-5384-402b-add4-6c401501b0c3_3.json b/packages/security_detection_engine/kibana/security_rule/d55abdfb-5384-402b-add4-6c401501b0c3_3.json new file mode 100644 index 00000000000..23759497708 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d55abdfb-5384-402b-add4-6c401501b0c3_3.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies instances where a processes (granted CAP_CHOWN and/or CAP_FOWNER capabilities) is executed, after which the ownership of a suspicious file or binary is changed. In Linux, the CAP_CHOWN capability allows a process to change the owner of a file, while CAP_FOWNER permits it to bypass permission checks on operations that require file ownership (like reading, writing, and executing). Attackers may abuse these capabilities to obtain unauthorized access to files.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via CAP_CHOWN/CAP_FOWNER Capabilities", + "query": "sequence by host.id, process.pid with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.name != null and process.thread.capabilities.effective : (\"CAP_CHOWN\", \"CAP_FOWNER\") and\n process.command_line : (\"*sudoers*\", \"*passwd*\", \"*shadow*\", \"*/root/*\") and user.id != \"0\"]\n [file where host.os.type == \"linux\" and event.action == \"changed-file-ownership-of\" and event.type == \"change\" and\n event.outcome == \"success\" and file.path in (\n \"/etc/passwd\",\n \"/etc/shadow\",\n \"/etc/sudoers\",\n \"/root/.ssh/*\"\n ) and user.id != \"0\"\n ]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d55abdfb-5384-402b-add4-6c401501b0c3", + "setup": "## Setup\n\n\nThis rule requires data coming in from Auditd Manager.\n\n### Auditd Manager Integration Setup\nThe Auditd Manager Integration receives audit events from the Linux Audit Framework which is a part of the Linux kernel.\nAuditd Manager provides a user-friendly interface and automation capabilities for configuring and monitoring system auditing through the auditd daemon. With `auditd_manager`, administrators can easily define audit rules, track system events, and generate comprehensive audit reports, improving overall security and compliance in the system.\n\n#### The following steps should be executed in order to add the Elastic Agent System integration \"auditd_manager\" on a Linux System:\n- Go to the Kibana home page and click \u201cAdd integrations\u201d.\n- In the query bar, search for \u201cAuditd Manager\u201d and select the integration to see more details about it.\n- Click \u201cAdd Auditd Manager\u201d.\n- Configure the integration name and optionally add a description.\n- Review optional and advanced settings accordingly.\n- Add the newly installed \u201cauditd manager\u201d to an existing or a new agent policy, and deploy the agent on a Linux system from which auditd log files are desirable.\n- Click \u201cSave and Continue\u201d.\n- For more details on the integration refer to the [helper guide](https://docs.elastic.co/integrations/auditd_manager).\n\n#### Rule Specific Setup Note\nAuditd Manager subscribes to the kernel and receives events as they occur without any additional configuration.\nHowever, if more advanced configuration is required to detect specific behavior, audit rules can be added to the integration in either the \"audit rules\" configuration box or the \"auditd rule files\" box by specifying a file to read the audit rules from.\n- For this detection rule the following additional audit rules are required to be added to the integration:\n -- \"-w /etc/ -p rwxa -k audit_recursive_etc\"\n -- \"-w /root/ -p rwxa -k audit_root\"\n", + "severity": "medium", + "tags": [ + "Data Source: Auditd Manager", + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "type": "eql", + "version": 3 + }, + "id": "d55abdfb-5384-402b-add4-6c401501b0c3_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d563aaba-2e72-462b-8658-3e5ea22db3a6_105.json b/packages/security_detection_engine/kibana/security_rule/d563aaba-2e72-462b-8658-3e5ea22db3a6_105.json new file mode 100644 index 00000000000..f6bb876b179 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d563aaba-2e72-462b-8658-3e5ea22db3a6_105.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a privilege escalation attempt via a rogue Windows directory (Windir) environment variable. This is a known primitive that is often combined with other vulnerabilities to elevate privileges.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privilege Escalation via Windir Environment Variable", + "query": "registry where host.os.type == \"windows\" and registry.path : (\n \"HKEY_USERS\\\\*\\\\Environment\\\\windir\",\n \"HKEY_USERS\\\\*\\\\Environment\\\\systemroot\",\n \"HKU\\\\*\\\\Environment\\\\windir\",\n \"HKU\\\\*\\\\Environment\\\\systemroot\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Environment\\\\windir\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Environment\\\\systemroot\"\n ) and\n not registry.data.strings : (\"C:\\\\windows\", \"%SystemRoot%\")\n", + "references": [ + "https://www.tiraniddo.dev/2017/05/exploiting-environment-variables-in.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d563aaba-2e72-462b-8658-3e5ea22db3a6", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.007", + "name": "Path Interception by PATH Environment Variable", + "reference": "https://attack.mitre.org/techniques/T1574/007/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 105 + }, + "id": "d563aaba-2e72-462b-8658-3e5ea22db3a6_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106.json b/packages/security_detection_engine/kibana/security_rule/d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106.json new file mode 100644 index 00000000000..38ee72e7d8d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106.json @@ -0,0 +1,141 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of sc.exe to create, modify, or start services on remote hosts. This could be indicative of adversary lateral movement but will be noisy if commonly done by admins.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Service Command Lateral Movement", + "query": "sequence by process.entity_id with maxspan = 1m\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"sc.exe\" or process.pe.original_file_name : \"sc.exe\") and\n process.args : \"\\\\\\\\*\" and process.args : (\"binPath=*\", \"binpath=*\") and\n process.args : (\"create\", \"config\", \"failure\", \"start\")]\n [network where host.os.type == \"windows\" and process.name : \"sc.exe\" and destination.ip != \"127.0.0.1\"]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.003", + "name": "Windows Service", + "reference": "https://attack.mitre.org/techniques/T1543/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1569", + "name": "System Services", + "reference": "https://attack.mitre.org/techniques/T1569/", + "subtechnique": [ + { + "id": "T1569.002", + "name": "Service Execution", + "reference": "https://attack.mitre.org/techniques/T1569/002/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "d61cbcf8-1bc1-4cff-85ba-e7b21c5beedc_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d68e95ad-1c82-4074-a12a-125fe10ac8ba_9.json b/packages/security_detection_engine/kibana/security_rule/d68e95ad-1c82-4074-a12a-125fe10ac8ba_9.json new file mode 100644 index 00000000000..00fffe06a81 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d68e95ad-1c82-4074-a12a-125fe10ac8ba_9.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the execution of discovery commands to enumerate system information, files, and folders using the Windows Command Shell.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "System Information Discovery via Windows Command Shell", + "note": "## Triage and analysis\n\n### Investigating System Information Discovery via Windows Command Shell\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule identifies commands to enumerate system information, files, and folders using the Windows Command Shell.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"cmd.exe\" and process.args : \"/c\" and process.args : (\"set\", \"dir\") and\n not process.parent.executable : (\"?:\\\\Program Files\\\\*\", \"?:\\\\Program Files (x86)\\\\*\", \"?:\\\\PROGRA~1\\\\*\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "d68e95ad-1c82-4074-a12a-125fe10ac8ba", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1082", + "name": "System Information Discovery", + "reference": "https://attack.mitre.org/techniques/T1082/" + }, + { + "id": "T1083", + "name": "File and Directory Discovery", + "reference": "https://attack.mitre.org/techniques/T1083/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 9 + }, + "id": "d68e95ad-1c82-4074-a12a-125fe10ac8ba_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105.json b/packages/security_detection_engine/kibana/security_rule/d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105.json new file mode 100644 index 00000000000..f6569fd1f28 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the deletion of an anti-phishing policy in Microsoft 365. By default, Microsoft 365 includes built-in features that help protect users from phishing attacks. Anti-phishing polices increase this protection by refining settings to better detect and prevent attacks.", + "false_positives": [ + "An anti-phishing policy may be deleted by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Anti-Phish Policy Deletion", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Remove-AntiPhishPolicy\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-antiphishpolicy?view=exchange-ps", + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/set-up-anti-phishing-policies?view=o365-worldwide" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Initial Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "d68eb1b5-5f1c-4b6d-9e63-5b6b145cd4aa_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d703a5af-d5b0-43bd-8ddb-7a5d500b7da5_108.json b/packages/security_detection_engine/kibana/security_rule/d703a5af-d5b0-43bd-8ddb-7a5d500b7da5_108.json new file mode 100644 index 00000000000..5519564d142 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d703a5af-d5b0-43bd-8ddb-7a5d500b7da5_108.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to modify the WDigest security provider in the registry to force the user's password to be stored in clear text in memory. This behavior can be indicative of an adversary attempting to weaken the security configuration of an endpoint. Once the UseLogonCredential value is modified, the adversary may attempt to dump clear text passwords from memory.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Modification of WDigest Security Provider", + "note": "## Triage and analysis\n\n### Investigating Modification of WDigest Security Provider\n\nIn Windows XP, Microsoft added support for a protocol known as WDigest. The WDigest protocol allows clients to send cleartext credentials to Hypertext Transfer Protocol (HTTP) and Simple Authentication Security Layer (SASL) applications based on RFC 2617 and 2831. Windows versions up to 8 and 2012 store logon credentials in memory in plaintext by default, which is no longer the case with newer Windows versions.\n\nStill, attackers can force WDigest to store the passwords insecurely on the memory by modifying the `HKLM\\SYSTEM\\*ControlSet*\\Control\\SecurityProviders\\WDigest\\UseLogonCredential` registry key. This activity is commonly related to the execution of credential dumping tools.\n\n#### Possible investigation steps\n\n- It is unlikely that the monitored registry key was modified legitimately in newer versions of Windows. Analysts should treat any activity triggered from this rule with high priority as it typically represents an active adversary.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Determine if credential dumping tools were run on the host, and retrieve and analyze suspicious executables:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Use process name, command line, and file hash to search for occurrences on other hosts.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This modification should not happen legitimately. Any potential benign true positive (B-TP) should be mapped and monitored by the security team, as these modifications expose the entire domain to credential compromises and consequently unauthorized access.\n\n### Related rules\n\n- Mimikatz Powershell Module Activity - ac96ceb8-4399-4191-af1d-4feeac1f1f46\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reimage the host operating system and restore compromised files to clean versions.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type : (\"creation\", \"change\") and\n registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\SecurityProviders\\\\WDigest\\\\UseLogonCredential\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\SecurityProviders\\\\WDigest\\\\UseLogonCredential\"\n ) and registry.data.strings : (\"1\", \"0x00000001\") and\n not (process.executable : \"?:\\\\Windows\\\\System32\\\\svchost.exe\" and user.id : \"S-1-5-18\")\n", + "references": [ + "https://www.csoonline.com/article/3438824/how-to-detect-and-halt-credential-theft-via-windows-wdigest.html", + "https://www.praetorian.com/blog/mitigating-mimikatz-wdigest-cleartext-credential-theft?edition=2019", + "https://frsecure.com/compromised-credentials-response-playbook", + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d703a5af-d5b0-43bd-8ddb-7a5d500b7da5", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "d703a5af-d5b0-43bd-8ddb-7a5d500b7da5_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d72e33fc-6e91-42ff-ac8b-e573268c5a87_110.json b/packages/security_detection_engine/kibana/security_rule/d72e33fc-6e91-42ff-ac8b-e573268c5a87_110.json new file mode 100644 index 00000000000..b4e430e27fc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d72e33fc-6e91-42ff-ac8b-e573268c5a87_110.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A suspicious SolarWinds child process (Cmd.exe or Powershell.exe) was detected.", + "false_positives": [ + "Trusted SolarWinds child processes. Verify process details such as network connections and file writes." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Command Execution via SolarWinds Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.name: (\"cmd.exe\", \"powershell.exe\") and\nprocess.parent.name: (\n \"ConfigurationWizard*.exe\",\n \"NetflowDatabaseMaintenance*.exe\",\n \"NetFlowService*.exe\",\n \"SolarWinds.Administration*.exe\",\n \"SolarWinds.Collector.Service*.exe\",\n \"SolarwindsDiagnostics*.exe\"\n )\n", + "references": [ + "https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html", + "https://github.com/mandiant/sunburst_countermeasures/blob/main/rules/SUNBURST/hxioc/SUNBURST%20SUSPICIOUS%20FILEWRITES%20(METHODOLOGY).ioc" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d72e33fc-6e91-42ff-ac8b-e573268c5a87", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Initial Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1195", + "name": "Supply Chain Compromise", + "reference": "https://attack.mitre.org/techniques/T1195/", + "subtechnique": [ + { + "id": "T1195.002", + "name": "Compromise Software Supply Chain", + "reference": "https://attack.mitre.org/techniques/T1195/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "d72e33fc-6e91-42ff-ac8b-e573268c5a87_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d743ff2a-203e-4a46-a3e3-40512cfe8fbb_105.json b/packages/security_detection_engine/kibana/security_rule/d743ff2a-203e-4a46-a3e3-40512cfe8fbb_105.json new file mode 100644 index 00000000000..218b94351eb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d743ff2a-203e-4a46-a3e3-40512cfe8fbb_105.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a malware filter policy has been deleted in Microsoft 365. A malware filter policy is used to alert administrators that an internal user sent a message that contained malware. This may indicate an account or machine compromise that would need to be investigated. Deletion of a malware filter policy may be done to evade detection.", + "false_positives": [ + "A malware filter policy may be deleted by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Malware Filter Policy Deletion", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"Remove-MalwareFilterPolicy\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/remove-malwarefilterpolicy?view=exchange-ps" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "d743ff2a-203e-4a46-a3e3-40512cfe8fbb", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "d743ff2a-203e-4a46-a3e3-40512cfe8fbb_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d74d6506-427a-4790-b170-0c2a6ddac799_2.json b/packages/security_detection_engine/kibana/security_rule/d74d6506-427a-4790-b170-0c2a6ddac799_2.json new file mode 100644 index 00000000000..d0400f423a4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d74d6506-427a-4790-b170-0c2a6ddac799_2.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Monitors for grep activity related to memory mapping. The /proc/*/maps file in Linux provides a memory map for a specific process, detailing the memory segments, permissions, and what files are mapped to these segments. Attackers may read a process's memory map to identify memory addresses for code injection or process hijacking.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Memory grep Activity", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name in (\"grep\", \"egrep\", \"fgrep\", \"rgrep\") and process.args in (\"[stack]\", \"[vdso]\", \"[heap]\")\n", + "references": [ + "https://github.com/arget13/DDexec" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "d74d6506-427a-4790-b170-0c2a6ddac799", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1057", + "name": "Process Discovery", + "reference": "https://attack.mitre.org/techniques/T1057/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 2 + }, + "id": "d74d6506-427a-4790-b170-0c2a6ddac799_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d75991f2-b989-419d-b797-ac1e54ec2d61_106.json b/packages/security_detection_engine/kibana/security_rule/d75991f2-b989-419d-b797-ac1e54ec2d61_106.json new file mode 100644 index 00000000000..fa79c5e87ef --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d75991f2-b989-419d-b797-ac1e54ec2d61_106.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Keychains are the built-in way for macOS to keep track of users' passwords and credentials for many services and features, including Wi-Fi and website passwords, secure notes, certificates, and Kerberos. Adversaries may collect the keychain storage data from a system to acquire credentials.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "SystemKey Access via Command Line", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.args:(\"/private/var/db/SystemKey\" or \"/var/db/SystemKey\")\n", + "references": [ + "https://github.com/AlessandroZ/LaZagne/blob/master/Mac/lazagne/softwares/system/chainbreaker.py" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d75991f2-b989-419d-b797-ac1e54ec2d61", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1555", + "name": "Credentials from Password Stores", + "reference": "https://attack.mitre.org/techniques/T1555/", + "subtechnique": [ + { + "id": "T1555.001", + "name": "Keychain", + "reference": "https://attack.mitre.org/techniques/T1555/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "d75991f2-b989-419d-b797-ac1e54ec2d61_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d76b02ef-fc95-4001-9297-01cb7412232f_110.json b/packages/security_detection_engine/kibana/security_rule/d76b02ef-fc95-4001-9297-01cb7412232f_110.json new file mode 100644 index 00000000000..2d79c5bd90d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d76b02ef-fc95-4001-9297-01cb7412232f_110.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a terminal (tty) is spawned via Python. Attackers may upgrade a simple reverse shell to a fully interactive tty after obtaining initial access to a host.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Interactive Terminal Spawned via Python", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\n(\n (process.parent.name : \"python*\" and process.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\",\n \"fish\") and process.parent.args_count >= 3 and process.parent.args : \"*pty.spawn*\" and process.parent.args : \"-c\") or\n (process.parent.name : \"python*\" and process.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\",\n \"fish\") and process.args : \"*sh\" and process.args_count == 1 and process.parent.args_count == 1)\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d76b02ef-fc95-4001-9297-01cb7412232f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.006", + "name": "Python", + "reference": "https://attack.mitre.org/techniques/T1059/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "d76b02ef-fc95-4001-9297-01cb7412232f_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d7e62693-aab9-4f66-a21a-3d79ecdd603d_104.json b/packages/security_detection_engine/kibana/security_rule/d7e62693-aab9-4f66-a21a-3d79ecdd603d_104.json new file mode 100644 index 00000000000..ae67631554b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d7e62693-aab9-4f66-a21a-3d79ecdd603d_104.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects events that may indicate use of SMTP on TCP port 26. This port is commonly used by several popular mail transfer agents to deconflict with the default SMTP port 25. This port has also been used by a malware family called BadPatch for command and control of Windows systems.", + "false_positives": [ + "Servers that process email traffic may cause false positives and should be excluded from this rule as this is expected behavior." + ], + "from": "now-9m", + "index": [ + "packetbeat-*", + "auditbeat-*", + "filebeat-*", + "logs-network_traffic.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "SMTP on Port 26/TCP", + "query": "(event.dataset: (network_traffic.flow or zeek.smtp) or event.category:(network or network_traffic)) and network.transport:tcp and destination.port:26\n", + "references": [ + "https://unit42.paloaltonetworks.com/unit42-badpatch/", + "https://isc.sans.edu/forums/diary/Next+up+whats+up+with+TCP+port+26/25564/" + ], + "related_integrations": [ + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "d7e62693-aab9-4f66-a21a-3d79ecdd603d", + "severity": "low", + "tags": [ + "Tactic: Command and Control", + "Domain: Endpoint", + "Use Case: Threat Detection" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1048", + "name": "Exfiltration Over Alternative Protocol", + "reference": "https://attack.mitre.org/techniques/T1048/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 104 + }, + "id": "d7e62693-aab9-4f66-a21a-3d79ecdd603d_104", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/d99a037b-c8e2-47a5-97b9-170d076827c4_110.json b/packages/security_detection_engine/kibana/security_rule/d99a037b-c8e2-47a5-97b9-170d076827c4_110.json new file mode 100644 index 00000000000..fa6809bf7a7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/d99a037b-c8e2-47a5-97b9-170d076827c4_110.json @@ -0,0 +1,121 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies the use of the Win32_ShadowCopy class and related cmdlets to achieve shadow copy deletion. This commonly occurs in tandem with ransomware or other destructive attacks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Volume Shadow Copy Deletion via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Volume Shadow Copy Deletion via PowerShell\n\nThe Volume Shadow Copy Service (VSS) is a Windows feature that enables system administrators to take snapshots of volumes that can later be restored or mounted to recover specific files or folders.\n\nA typical step in the playbook of an attacker attempting to deploy ransomware is to delete Volume Shadow Copies to ensure that victims have no alternative to paying the ransom, making any action that deletes shadow copies worth monitoring.\n\nThis rule monitors the execution of PowerShell cmdlets to interact with the Win32_ShadowCopy WMI class, retrieve shadow copy objects, and delete them.\n\n#### Possible investigation steps\n\n- Investigate the program execution chain (parent process tree).\n- Check whether the account is authorized to perform this operation.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- If unsigned files are found on the process tree, retrieve them and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Use process name, command line, and file hash to search for occurrences in other hosts.\n- Check if any files on the host machine have been encrypted.\n\n\n### False positive analysis\n\n- This rule has chances of producing benign true positives (B-TPs). If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Related rules\n\n- Volume Shadow Copy Deleted or Resized via VssAdmin - b5ea4bfe-a1b2-421f-9d47-22a75a6f2921\n- Volume Shadow Copy Deletion via PowerShell - d99a037b-c8e2-47a5-97b9-170d076827c4\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- Priority should be given due to the advanced stage of this activity on the attack.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- If data was encrypted, deleted, or modified, activate your data recovery plan.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Perform data recovery locally or restore the backups from replicated copies (cloud, other servers, etc.).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") and\n process.args : (\"*Get-WmiObject*\", \"*gwmi*\", \"*Get-CimInstance*\", \"*gcim*\") and\n process.args : (\"*Win32_ShadowCopy*\") and\n process.args : (\"*.Delete()*\", \"*Remove-WmiObject*\", \"*rwmi*\", \"*Remove-CimInstance*\", \"*rcim*\")\n", + "references": [ + "https://docs.microsoft.com/en-us/previous-versions/windows/desktop/vsswmi/win32-shadowcopy", + "https://powershell.one/wmi/root/cimv2/win32_shadowcopy", + "https://www.fortinet.com/blog/threat-research/stomping-shadow-copies-a-second-look-into-deletion-methods" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "d99a037b-c8e2-47a5-97b9-170d076827c4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "d99a037b-c8e2-47a5-97b9-170d076827c4_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/da7733b1-fe08-487e-b536-0a04c6d8b0cd_8.json b/packages/security_detection_engine/kibana/security_rule/da7733b1-fe08-487e-b536-0a04c6d8b0cd_8.json new file mode 100644 index 00000000000..0f41b64286b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/da7733b1-fe08-487e-b536-0a04c6d8b0cd_8.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to disable the code signing policy through the registry. Code signing provides authenticity on a program, and grants the user with the ability to check whether the program has been tampered with. By allowing the execution of unsigned or self-signed code, threat actors can craft and execute malicious code.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Code Signing Policy Modification Through Registry", + "note": "## Triage and analysis\n\n### Investigating Code Signing Policy Modification Through Registry\n\nMicrosoft created the Windows Driver Signature Enforcement (DSE) security feature to prevent drivers with invalid signatures from loading and executing into the kernel (ring 0). DSE aims to protect systems by blocking attackers from loading malicious drivers on targets. \n\nThis protection is essential for maintaining system security. However, attackers or administrators can disable DSE and load untrusted drivers, which can put the system at risk. Therefore, it's important to keep this feature enabled and only load drivers from trusted sources to ensure system integrity and security.\n\nThis rule identifies registry modifications that can disable DSE.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Use Osquery and endpoint driver events (`event.category = \"driver\"`) to investigate if suspicious drivers were loaded into the system after the registry was modified.\n - !{osquery{\"label\":\"Osquery - Retrieve All Non-Microsoft Drivers with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, class, description, directory, image, issuer_name, manufacturer, service, signed, subject_name FROM drivers JOIN authenticode ON drivers.image = authenticode.path JOIN hash ON drivers.image = hash.path WHERE NOT (provider == \\\"Microsoft\\\" AND signed == \\\"1\\\")\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve All Unsigned Drivers with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, class, description, directory, image, issuer_name, manufacturer, service, signed, subject_name FROM drivers JOIN authenticode ON drivers.image = authenticode.path JOIN hash ON drivers.image = hash.path WHERE signed == \\\"0\\\"\\n\"}}\n- Identify the driver's `Device Name` and `Service Name`.\n- Check for alerts from the rules specified in the `Related Rules` section.\n\n### False positive analysis\n\n- This activity should not happen legitimately. The security team should address any potential benign true positive (B-TP), as this configuration can put the user and the domain at risk.\n\n### Related Rules\n\n- First Time Seen Driver Loaded - df0fd41e-5590-4965-ad5e-cd079ec22fa9\n- Untrusted Driver Loaded - d8ab1ec1-feeb-48b9-89e7-c12e189448aa\n- Code Signing Policy Modification Through Built-in tools - b43570de-a908-4f7f-8bdb-b2df6ffd8c80\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Disable and uninstall all suspicious drivers found in the system. This can be done via Device Manager. (Note that this step may require you to boot the system into Safe Mode.)\n- Remove the related services and registry keys found in the system. Note that the service will probably not stop if the driver is still installed.\n - This can be done via PowerShell `Remove-Service` cmdlet.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Remove and block malicious artifacts identified during triage.\n- Ensure that the Driver Signature Enforcement is enabled on the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type : (\"creation\", \"change\") and\n(\n registry.path : (\n \"HKEY_USERS\\\\*\\\\Software\\\\Policies\\\\Microsoft\\\\Windows NT\\\\Driver Signing\\\\BehaviorOnFailedVerify\",\n \"HKU\\\\*\\\\Software\\\\Policies\\\\Microsoft\\\\Windows NT\\\\Driver Signing\\\\BehaviorOnFailedVerify\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Policies\\\\Microsoft\\\\Windows NT\\\\Driver Signing\\\\BehaviorOnFailedVerify\"\n ) and\n registry.value: \"BehaviorOnFailedVerify\" and\n registry.data.strings : (\"0\", \"0x00000000\", \"1\", \"0x00000001\")\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.value", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "da7733b1-fe08-487e-b536-0a04c6d8b0cd", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/", + "subtechnique": [ + { + "id": "T1553.006", + "name": "Code Signing Policy Modification", + "reference": "https://attack.mitre.org/techniques/T1553/006/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "da7733b1-fe08-487e-b536-0a04c6d8b0cd_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/da7f5803-1cd4-42fd-a890-0173ae80ac69_3.json b/packages/security_detection_engine/kibana/security_rule/da7f5803-1cd4-42fd-a890-0173ae80ac69_3.json new file mode 100644 index 00000000000..bdd39dd4db9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/da7f5803-1cd4-42fd-a890-0173ae80ac69_3.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A supervised machine learning model has identified a DNS question name with a high probability of sourcing from a Domain Generation Algorithm (DGA), which could indicate command and control network activity.", + "from": "now-10m", + "index": [ + "logs-endpoint.events.*", + "logs-network_traffic.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Machine Learning Detected a DNS Request With a High DGA Probability Score", + "query": "ml_is_dga.malicious_probability > 0.98\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/dga", + "https://www.elastic.co/security-labs/detect-domain-generation-algorithm-activity-with-new-kibana-integration" + ], + "related_integrations": [ + { + "package": "dga", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": false, + "name": "ml_is_dga.malicious_probability", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "da7f5803-1cd4-42fd-a890-0173ae80ac69", + "setup": "## Setup\n\nThe rule requires the Domain Generation Algorithm (DGA) Detection integration assets to be installed, as well as DNS events collected by integrations such as Elastic Defend, Network Packet Capture, or Packetbeat. \n\n### DGA Detection Setup\nThe DGA Detection integration consists of an ML-based framework to detect DGA activity in DNS events.\n\n#### Prerequisite Requirements:\n- Fleet is required for DGA Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- DNS events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint), [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration, or [Packetbeat](https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n- To set up and run Packetbeat, follow [this](https://www.elastic.co/guide/en/beats/packetbeat/current/setting-up-and-running.html) guide.\n\n#### The following steps should be executed to install assets associated with the DGA Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Domain Generation Algorithm Detection and select the integration to see more details about it.\n- Under Settings, click Install Domain Generation Algorithm Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich DNS events with predictions from the Supervised DGA Detection model. This is done via the ingest pipeline named `-ml_dga_ingest_pipeline` installed with the DGA Detection package.\n- If using an Elastic Beat such as Packetbeat, add the DGA ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `packetbeat.yml`.\n- If adding the DGA ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the DGA ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"ml_is_dga\": {\n \"properties\": {\n \"malicious_prediction\": {\n \"type\": \"long\"\n },\n \"malicious_probability\": {\n \"type\": \"float\"\n }\n }\n }\n }\n}\n```\n", + "severity": "low", + "tags": [ + "Domain: Network", + "Domain: Endpoint", + "Data Source: Elastic Defend", + "Use Case: Domain Generation Algorithm Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1568", + "name": "Dynamic Resolution", + "reference": "https://attack.mitre.org/techniques/T1568/", + "subtechnique": [ + { + "id": "T1568.002", + "name": "Domain Generation Algorithms", + "reference": "https://attack.mitre.org/techniques/T1568/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 3 + }, + "id": "da7f5803-1cd4-42fd-a890-0173ae80ac69_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/dc0b7782-0df0-47ff-8337-db0d678bdb66_5.json b/packages/security_detection_engine/kibana/security_rule/dc0b7782-0df0-47ff-8337-db0d678bdb66_5.json new file mode 100644 index 00000000000..ddb4f8680f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/dc0b7782-0df0-47ff-8337-db0d678bdb66_5.json @@ -0,0 +1,119 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when suspicious content is extracted from a file and subsequently decompressed using the funzip utility. Malware may execute the tail utility using the \"-c\" option to read a sequence of bytes from the end of a file. The output from tail can be piped to funzip in order to decompress malicious code before it is executed. This behavior is consistent with malware families such as Bundlore.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Content Extracted or Decompressed via Funzip", + "query": "process where host.os.type == \"linux\" and event.action in (\"exec\", \"exec_event\") and\n((process.args == \"tail\" and process.args == \"-c\" and process.args == \"funzip\")) and\nnot process.args : \"/var/log/messages\" and \nnot process.parent.executable : (\"/usr/bin/dracut\", \"/sbin/dracut\", \"/usr/bin/xargs\") and\nnot (process.parent.name in (\"sh\", \"sudo\") and process.parent.command_line : \"*nessus_su*\")\n", + "references": [ + "https://attack.mitre.org/software/S0482/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "dc0b7782-0df0-47ff-8337-db0d678bdb66", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/" + }, + { + "id": "T1140", + "name": "Deobfuscate/Decode Files or Information", + "reference": "https://attack.mitre.org/techniques/T1140/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "dc0b7782-0df0-47ff-8337-db0d678bdb66_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/dc71c186-9fe4-4437-a4d0-85ebb32b8204_8.json b/packages/security_detection_engine/kibana/security_rule/dc71c186-9fe4-4437-a4d0-85ebb32b8204_8.json new file mode 100644 index 00000000000..8b54abb6da4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/dc71c186-9fe4-4437-a4d0-85ebb32b8204_8.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of mount process with hidepid parameter, which can make processes invisible to other users from the system. Adversaries using Linux kernel version 3.2+ (or RHEL/CentOS v6.5+ above) can hide the process from other users. When hidepid=2 option is executed to mount the /proc filesystem, only the root user can see all processes and the logged-in user can only see their own process. This provides a defense evasion mechanism for the adversaries to hide their process executions from all other commands such as ps, top, pgrep and more. With the Linux kernel hardening hidepid option all the user has to do is remount the /proc filesystem with the option, which can now be monitored and detected.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Hidden Process via Mount Hidepid", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"mount\" and process.args == \"/proc\" and process.args == \"-o\" and\nprocess.args : \"*hidepid=2*\"\n", + "references": [ + "https://www.cyberciti.biz/faq/linux-hide-processes-from-other-users/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "dc71c186-9fe4-4437-a4d0-85ebb32b8204", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "dc71c186-9fe4-4437-a4d0-85ebb32b8204_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/dc9c1f74-dac3-48e3-b47f-eb79db358f57_109.json b/packages/security_detection_engine/kibana/security_rule/dc9c1f74-dac3-48e3-b47f-eb79db358f57_109.json new file mode 100644 index 00000000000..79bf3b10d08 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/dc9c1f74-dac3-48e3-b47f-eb79db358f57_109.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies use of wmic.exe for shadow copy deletion on endpoints. This commonly occurs in tandem with ransomware or other destructive attacks.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Volume Shadow Copy Deletion via WMIC", + "note": "## Triage and analysis\n\n### Investigating Volume Shadow Copy Deletion via WMIC\n\nThe Volume Shadow Copy Service (VSS) is a Windows feature that enables system administrators to take snapshots of volumes that can later be restored or mounted to recover specific files or folders.\n\nA typical step in the playbook of an attacker attempting to deploy ransomware is to delete Volume Shadow Copies to ensure that victims have no alternative to paying the ransom, making any action that deletes shadow copies worth monitoring.\n\nThis rule monitors the execution of `wmic.exe` to interact with VSS via the `shadowcopy` alias and delete parameter.\n\n#### Possible investigation steps\n\n- Investigate the program execution chain (parent process tree).\n- Check whether the account is authorized to perform this operation.\n- Contact the account owner and confirm whether they are aware of this activity.\n- In the case of a resize operation, check if the resize value is equal to suspicious values, like 401MB.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- If unsigned files are found on the process tree, retrieve them and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Use process name, command line, and file hash to search for occurrences in other hosts.\n- Check if any files on the host machine have been encrypted.\n\n\n### False positive analysis\n\n- This rule has chances of producing benign true positives (B-TPs). If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n\n### Related rules\n\n- Volume Shadow Copy Deleted or Resized via VssAdmin - b5ea4bfe-a1b2-421f-9d47-22a75a6f2921\n- Volume Shadow Copy Deletion via PowerShell - d99a037b-c8e2-47a5-97b9-170d076827c4\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Priority should be given due to the advanced stage of this activity on the attack.\n- Consider isolating the involved host to prevent destructive behavior, which is commonly associated with this activity.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- If data was encrypted, deleted, or modified, activate your data recovery plan.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Perform data recovery locally or restore the backups from replicated copies (cloud, other servers, etc.).\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"WMIC.exe\" or ?process.pe.original_file_name == \"wmic.exe\") and\n process.args : \"delete\" and process.args : \"shadowcopy\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "dc9c1f74-dac3-48e3-b47f-eb79db358f57", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Impact", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1490", + "name": "Inhibit System Recovery", + "reference": "https://attack.mitre.org/techniques/T1490/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "dc9c1f74-dac3-48e3-b47f-eb79db358f57_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ddab1f5f-7089-44f5-9fda-de5b11322e77_107.json b/packages/security_detection_engine/kibana/security_rule/ddab1f5f-7089-44f5-9fda-de5b11322e77_107.json new file mode 100644 index 00000000000..e8d84006dc5 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ddab1f5f-7089-44f5-9fda-de5b11322e77_107.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies NullSessionPipe registry modifications that specify which pipes can be accessed anonymously. This could be indicative of adversary lateral movement preparation by making the added pipe available to everyone.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "NullSessionPipe Registry Modification", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\nregistry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\services\\\\LanmanServer\\\\Parameters\\\\NullSessionPipes\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\services\\\\LanmanServer\\\\Parameters\\\\NullSessionPipes\"\n) and length(registry.data.strings) > 0\n", + "references": [ + "https://www.welivesecurity.com/2019/05/29/turla-powershell-usage/", + "https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-access-restrict-anonymous-access-to-named-pipes-and-shares" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ddab1f5f-7089-44f5-9fda-de5b11322e77", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.002", + "name": "SMB/Windows Admin Shares", + "reference": "https://attack.mitre.org/techniques/T1021/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "ddab1f5f-7089-44f5-9fda-de5b11322e77_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/de9bd7e0-49e9-4e92-a64d-53ade2e66af1_109.json b/packages/security_detection_engine/kibana/security_rule/de9bd7e0-49e9-4e92-a64d-53ade2e66af1_109.json new file mode 100644 index 00000000000..29420415103 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/de9bd7e0-49e9-4e92-a64d-53ade2e66af1_109.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious child process of the Windows virtual system process, which could indicate code injection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Child Process from a System Virtual Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.pid == 4 and process.executable : \"?*\" and\n not process.executable : (\"Registry\", \"MemCompression\", \"?:\\\\Windows\\\\System32\\\\smss.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.pid", + "type": "long" + } + ], + "risk_score": 73, + "rule_id": "de9bd7e0-49e9-4e92-a64d-53ade2e66af1", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "de9bd7e0-49e9-4e92-a64d-53ade2e66af1_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/debff20a-46bc-4a4d-bae5-5cdd14222795_110.json b/packages/security_detection_engine/kibana/security_rule/debff20a-46bc-4a4d-bae5-5cdd14222795_110.json new file mode 100644 index 00000000000..a0a83f5df4a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/debff20a-46bc-4a4d-bae5-5cdd14222795_110.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Adversaries may encode/decode data in an attempt to evade detection by host- or network-based security controls.", + "false_positives": [ + "Automated tools such as Jenkins may encode or decode files as part of their normal behavior. These events can be filtered by the process executable or username values." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Base16 or Base32 Encoding/Decoding Activity", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name in (\"base16\", \"base32\", \"base32plain\", \"base32hex\") and\nnot process.args in (\"--help\", \"--version\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "debff20a-46bc-4a4d-bae5-5cdd14222795", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/" + }, + { + "id": "T1140", + "name": "Deobfuscate/Decode Files or Information", + "reference": "https://attack.mitre.org/techniques/T1140/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "debff20a-46bc-4a4d-bae5-5cdd14222795_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/df6f62d9-caab-4b88-affa-044f4395a1e0_108.json b/packages/security_detection_engine/kibana/security_rule/df6f62d9-caab-4b88-affa-044f4395a1e0_108.json new file mode 100644 index 00000000000..2021e151bf2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/df6f62d9-caab-4b88-affa-044f4395a1e0_108.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the copying of the Linux dynamic loader binary and subsequent file creation for the purpose of creating a backup copy. This technique was seen recently being utilized by Linux malware prior to patching the dynamic loader in order to inject and preload a malicious shared object file. This activity should never occur and if it does then it should be considered highly suspicious or malicious.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Dynamic Linker Copy", + "note": "## Triage and analysis\n\n### Investigating Dynamic Linker Copy\n\nThe Linux dynamic linker is responsible for loading shared libraries required by executables at runtime. It is a critical component of the Linux operating system and should not be tampered with. \n\nAdversaries may attempt to copy the dynamic linker binary and create a backup copy before patching it to inject and preload malicious shared object files. This technique has been observed in recent Linux malware attacks and is considered highly suspicious or malicious.\n\nThe detection rule 'Dynamic Linker Copy' is designed to identify such abuse by monitoring for processes with names \"cp\" or \"rsync\" that involve copying the dynamic linker binary (\"/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\") and modifying the \"/etc/ld.so.preload\" file. Additionally, the rule checks for the creation of new files with the \"so\" extension on Linux systems. By detecting these activities within a short time span (1 minute), the rule aims to alert security analysts to potential malicious behavior.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n### Possible investigation steps\n\n- Investigate the dynamic linker that was copied or altered.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\n path = '/etc/ld.so.preload' OR\\n path = '/lib64/ld-linux-x86-64.so.2' OR\\n path = '/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2' OR\\n path = '/usr/lib64/ld-linux-x86-64.so.2' OR\\n path = '/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\n path = '/etc/ld.so.preload' OR\\n path = '/lib64/ld-linux-x86-64.so.2' OR\\n path = '/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2' OR\\n path = '/usr/lib64/ld-linux-x86-64.so.2' OR\\n path = '/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n- Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n- The security team should address any potential benign true positive (B-TP), as this configuration can put the user and the domain at risk.\n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Modification of Dynamic Linker Preload Shared Object Inside A Container - 342f834b-21a6-41bf-878c-87d116eba3ee\n- Modification of Dynamic Linker Preload Shared Object - 717f82c2-7741-4f9b-85b8-d06aeb853f4f\n- Shared Object Created or Changed by Previously Unknown Process - aebaa51f-2a91-4f6a-850b-b601db2293f4\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id with maxspan=1m\n[process where host.os.type == \"linux\" and event.type == \"start\" and process.name in (\"cp\", \"rsync\") and\n process.args in (\n \"/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\", \"/etc/ld.so.preload\", \"/lib64/ld-linux-x86-64.so.2\",\n \"/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\", \"/usr/lib64/ld-linux-x86-64.so.2\"\n )]\n[file where host.os.type == \"linux\" and event.action == \"creation\" and file.extension == \"so\"]\n", + "references": [ + "https://www.intezer.com/blog/incident-response/orbit-new-undetected-linux-threat/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "df6f62d9-caab-4b88-affa-044f4395a1e0", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Threat: Orbit", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.006", + "name": "Dynamic Linker Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/006/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 108 + }, + "id": "df6f62d9-caab-4b88-affa-044f4395a1e0_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e052c845-48d0-4f46-8a13-7d0aba05df82_107.json b/packages/security_detection_engine/kibana/security_rule/e052c845-48d0-4f46-8a13-7d0aba05df82_107.json new file mode 100644 index 00000000000..7072a15d9f7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e052c845-48d0-4f46-8a13-7d0aba05df82_107.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the modification of the msDS-AllowedToDelegateTo attribute to KRBTGT. Attackers can use this technique to maintain persistence to the domain by having the ability to request tickets for the KRBTGT service.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "KRBTGT Delegation Backdoor", + "query": "event.action:modified-user-account and event.code:4738 and\n winlog.event_data.AllowedToDelegateTo:*krbtgt*\n", + "references": [ + "https://skyblue.team/posts/delegate-krbtgt", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0026_windows_audit_user_account_management.md" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AllowedToDelegateTo", + "type": "unknown" + } + ], + "risk_score": 73, + "rule_id": "e052c845-48d0-4f46-8a13-7d0aba05df82", + "setup": "## Setup\n\nThe 'Audit User Account Management' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nAccount Management >\nAudit User Account Management (Success,Failure)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 107 + }, + "id": "e052c845-48d0-4f46-8a13-7d0aba05df82_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e0cc3807-e108-483c-bf66-5a4fbe0d7e89_4.json b/packages/security_detection_engine/kibana/security_rule/e0cc3807-e108-483c-bf66-5a4fbe0d7e89_4.json new file mode 100644 index 00000000000..bd6413aad90 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e0cc3807-e108-483c-bf66-5a4fbe0d7e89_4.json @@ -0,0 +1,83 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of suspicious commands via screen and tmux. When launching a command and detaching directly, the commands will be executed in the background via its parent process. Attackers may leverage screen or tmux to execute commands while attempting to evade detection.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potentially Suspicious Process Started via tmux or screen", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.parent.name in (\"screen\", \"tmux\") and process.name : (\n \"nmap\", \"nc\", \"ncat\", \"netcat\", \"socat\", \"nc.openbsd\", \"ngrok\", \"ping\", \"java\", \"python*\", \"php*\", \"perl\", \"ruby\",\n \"lua*\", \"openssl\", \"telnet\", \"awk\", \"wget\", \"curl\", \"id\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e0cc3807-e108-483c-bf66-5a4fbe0d7e89", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "e0cc3807-e108-483c-bf66-5a4fbe0d7e89_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e12c0318-99b1-44f2-830c-3a38a43207ca_206.json b/packages/security_detection_engine/kibana/security_rule/e12c0318-99b1-44f2-830c-3a38a43207ca_206.json new file mode 100644 index 00000000000..fe3ff14c03b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e12c0318-99b1-44f2-830c-3a38a43207ca_206.json @@ -0,0 +1,84 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies when an AWS Route Table has been created.", + "false_positives": [ + "Route Tables may be created by a system or network administrators. Verify whether the user identity, user agent, and/or hostname should be making changes in your environment. Route Table creation by unfamiliar users or hosts should be investigated. If known behavior is causing false positives, it can be exempted from the rule. Automated processes that use Terraform may lead to false positives." + ], + "from": "now-60m", + "index": [ + "filebeat-*", + "logs-aws*" + ], + "interval": "10m", + "language": "kuery", + "license": "Elastic License v2", + "name": "AWS Route Table Created", + "note": "", + "query": "event.dataset:aws.cloudtrail and event.provider:ec2.amazonaws.com and event.action:(CreateRoute or CreateRouteTable) and\nevent.outcome:success\n", + "references": [ + "https://docs.datadoghq.com/security_platform/default_rules/aws-ec2-route-table-modified/", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateRoute.html", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateRouteTable" + ], + "related_integrations": [ + { + "integration": "cloudtrail", + "package": "aws", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e12c0318-99b1-44f2-830c-3a38a43207ca", + "setup": "The AWS Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "low", + "tags": [ + "Domain: Cloud", + "Data Source: AWS", + "Data Source: Amazon Web Services", + "Use Case: Network Security Monitoring", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 206 + }, + "id": "e12c0318-99b1-44f2-830c-3a38a43207ca_206", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e19e64ee-130e-4c07-961f-8a339f0b8362_107.json b/packages/security_detection_engine/kibana/security_rule/e19e64ee-130e-4c07-961f-8a339f0b8362_107.json new file mode 100644 index 00000000000..153165f5fce --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e19e64ee-130e-4c07-961f-8a339f0b8362_107.json @@ -0,0 +1,87 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Telnet provides a command line interface for communication with a remote device or server. This rule identifies Telnet network connections to publicly routable IP addresses.", + "false_positives": [ + "Telnet can be used for both benign or malicious purposes. Telnet is included by default in some Linux distributions, so its presence is not inherently suspicious. The use of Telnet to manage devices remotely has declined in recent years in favor of more secure protocols such as SSH. Telnet usage by non-automated tools or frameworks may be suspicious." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Connection to External Network via Telnet", + "query": "sequence by process.entity_id\n [process where host.os.type == \"linux\" and process.name == \"telnet\" and event.type == \"start\"]\n [network where host.os.type == \"linux\" and process.name == \"telnet\" and not cidrmatch(\n destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\", \"192.0.0.0/29\",\n \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\", \"192.0.2.0/24\",\n \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\", \"100.64.0.0/10\",\n \"192.175.48.0/24\", \"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\", \"FE80::/10\",\n \"FF00::/8\"\n )\n ]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e19e64ee-130e-4c07-961f-8a339f0b8362", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "e19e64ee-130e-4c07-961f-8a339f0b8362_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e1db8899-97c1-4851-8993-3a3265353601_3.json b/packages/security_detection_engine/kibana/security_rule/e1db8899-97c1-4851-8993-3a3265353601_3.json new file mode 100644 index 00000000000..9507f240745 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e1db8899-97c1-4851-8993-3a3265353601_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected data exfiltration to a particular geo-location (by region name). Data transfers to geo-locations that are outside the normal traffic patterns of an organization could indicate exfiltration over command and control channels.", + "from": "now-6h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_sent_bytes_destination_geo_country_iso_code", + "name": "Potential Data Exfiltration Activity to an Unusual ISO Code", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "risk_score": 21, + "rule_id": "e1db8899-97c1-4851-8993-3a3265353601", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your network data. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `logs-network_traffic.*` if you used Network Packet Capture.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "e1db8899-97c1-4851-8993-3a3265353601_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e2258f48-ba75-4248-951b-7c885edf18c2_6.json b/packages/security_detection_engine/kibana/security_rule/e2258f48-ba75-4248-951b-7c885edf18c2_6.json new file mode 100644 index 00000000000..34b3ea479d8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e2258f48-ba75-4248-951b-7c885edf18c2_6.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies service creation events of common mining services, possibly indicating the infection of a system with a cryptominer.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Mining Process Creation Event", + "query": "file where host.os.type == \"linux\" and event.type == \"creation\" and event.action : (\"creation\", \"file_create_event\") and \nfile.name : (\"aliyun.service\", \"moneroocean_miner.service\", \"c3pool_miner.service\", \"pnsd.service\", \"apache4.service\", \"pastebin.service\", \"xvf.service\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e2258f48-ba75-4248-951b-7c885edf18c2", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "e2258f48-ba75-4248-951b-7c885edf18c2_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e26f042e-c590-4e82-8e05-41e81bd822ad_112.json b/packages/security_detection_engine/kibana/security_rule/e26f042e-c590-4e82-8e05-41e81bd822ad_112.json new file mode 100644 index 00000000000..75905987429 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e26f042e-c590-4e82-8e05-41e81bd822ad_112.json @@ -0,0 +1,133 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the use of Reflection.Assembly to load PEs and DLLs in memory in PowerShell scripts. Attackers use this method to load executables and DLLs without writing to the disk, bypassing security solutions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious .NET Reflection via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Suspicious .NET Reflection via PowerShell\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks. This makes it available for use in various environments, and creates an attractive way for attackers to execute code.\n\nAttackers can use .NET reflection to load PEs and DLLs in memory. These payloads are commonly embedded in the script, which can circumvent file-based security protections.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Examine file or network events from the involved PowerShell process for suspicious behavior.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Evaluate whether the user needs to use PowerShell to complete tasks.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the script using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately outside engineering or IT business units. As long as the analyst did not identify malware or suspicious activity related to the user or host, this alert can be dismissed.\n\n### Related rules\n\n- PowerShell PSReflect Script - 56f2e9b5-4803-4e44-a0a4-a52dc79d57fe\n- Potential Process Injection via PowerShell - 2e29e96a-b67c-455a-afe4-de6183431d0d\n- PowerShell Suspicious Payload Encoded and Compressed - 81fe9dc6-a2d7-4192-a2d8-eed98afc766a\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"[System.Reflection.Assembly]::Load\" or\n \"[Reflection.Assembly]::Load\"\n ) and\n not powershell.file.script_block_text : (\n (\"CommonWorkflowParameters\" or \"RelatedLinksHelpInfo\") and\n \"HelpDisplayStrings\"\n ) and\n not (powershell.file.script_block_text :\n (\"Get-SolutionFiles\" or \"Get-VisualStudio\" or \"Select-MSBuildPath\") and\n file.name : \"PathFunctions.ps1\"\n ) and\n not file.path : C\\:\\\\\\\\Program?Files\\\\\\\\Microsoft?Monitoring?Agent\\\\\\\\Agent\\\\\\\\Health?Service?State\\\\\\\\Monitoring?Host?Temporary?Files*\\\\\\\\AvailabilityGroupMonitoring.ps1 and\n not user.id : \"S-1-5-18\"\n", + "references": [ + "https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.load" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e26f042e-c590-4e82-8e05-41e81bd822ad", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1620", + "name": "Reflective Code Loading", + "reference": "https://attack.mitre.org/techniques/T1620/" + }, + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.001", + "name": "Dynamic-link Library Injection", + "reference": "https://attack.mitre.org/techniques/T1055/001/" + }, + { + "id": "T1055.002", + "name": "Portable Executable Injection", + "reference": "https://attack.mitre.org/techniques/T1055/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 112 + }, + "id": "e26f042e-c590-4e82-8e05-41e81bd822ad_112", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e28b8093-833b-4eda-b877-0873d134cf3c_2.json b/packages/security_detection_engine/kibana/security_rule/e28b8093-833b-4eda-b877-0873d134cf3c_2.json new file mode 100644 index 00000000000..a6d60cb85ee --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e28b8093-833b-4eda-b877-0873d134cf3c_2.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the ability of a process to be able to create RAW and PACKET socket types for the available network namespaces by a non-root user. A malicious process with this capability may exploit routing between hosts, bypass network access controls, and otherwise tamper with host networking if a firewall is not in place to limit the packet types and contents. The CAP_NET_RAW capability allows the process to bind to any address within the available namespaces, which allows network traffic sniffing by a non root user. The rule identifies previously unknown processes executing with CAP_NET_RAW capabilities through the use of the new terms rule type.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Network Traffic Capture via CAP_NET_RAW", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "event.category:\"process\" and host.os.type:\"linux\" and event.type:\"start\" and event.action:\"exec\" and process.name:* and\n(process.thread.capabilities.effective:\"CAP_NET_RAW\" or process.thread.capabilities.permitted:\"CAP_NET_RAW\") and\nnot user.id:\"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e28b8093-833b-4eda-b877-0873d134cf3c", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1040", + "name": "Network Sniffing", + "reference": "https://attack.mitre.org/techniques/T1040/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 2 + }, + "id": "e28b8093-833b-4eda-b877-0873d134cf3c_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3.json b/packages/security_detection_engine/kibana/security_rule/e2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3.json new file mode 100644 index 00000000000..83c2faf9935 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3.json @@ -0,0 +1,84 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Adversaries may attempt to get a listing of network connections to or from a compromised system.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "System Network Connections Discovery", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and\nprocess.name in (\"netstat\", \"lsof\", \"who\", \"w\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e2dc8f8c-5f16-42fa-b49e-0eb8057f7444", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1049", + "name": "System Network Connections Discovery", + "reference": "https://attack.mitre.org/techniques/T1049/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "e2dc8f8c-5f16-42fa-b49e-0eb8057f7444_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e2f9fdf5-8076-45ad-9427-41e0e03dc9c2_110.json b/packages/security_detection_engine/kibana/security_rule/e2f9fdf5-8076-45ad-9427-41e0e03dc9c2_110.json new file mode 100644 index 00000000000..0762cbaa301 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e2f9fdf5-8076-45ad-9427-41e0e03dc9c2_110.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious psexec activity which is executing from the psexec service that has been renamed, possibly to evade detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Process Execution via Renamed PsExec Executable", + "note": "## Triage and analysis\n\n### Investigating Suspicious Process Execution via Renamed PsExec Executable\n\nPsExec is a remote administration tool that enables the execution of commands with both regular and SYSTEM privileges on Windows systems. It operates by executing a service component `Psexecsvc` on a remote system, which then runs a specified process and returns the results to the local system. Microsoft develops PsExec as part of the Sysinternals Suite. Although commonly used by administrators, PsExec is frequently used by attackers to enable lateral movement and execute commands as SYSTEM to disable defenses and bypass security protections.\n\nThis rule identifies instances where the PsExec service component is executed using a custom name. This behavior can indicate an attempt to bypass security controls or detections that look for the default PsExec service component name.\n\n#### Possible investigation steps\n\n- Check if the usage of this tool complies with the organization's administration policy.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Identify the target computer and its role in the IT environment.\n- Investigate what commands were run, and assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. As long as the analyst did not identify suspicious activity related to the user or involved hosts, and the tool is allowed by the organization's policy, such alerts can be dismissed.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - Prioritize cases involving critical servers and users.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.pe.original_file_name : \"psexesvc.exe\" and not process.name : \"PSEXESVC.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e2f9fdf5-8076-45ad-9427-41e0e03dc9c2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1569", + "name": "System Services", + "reference": "https://attack.mitre.org/techniques/T1569/", + "subtechnique": [ + { + "id": "T1569.002", + "name": "Service Execution", + "reference": "https://attack.mitre.org/techniques/T1569/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "e2f9fdf5-8076-45ad-9427-41e0e03dc9c2_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e3343ab9-4245-4715-b344-e11c56b0a47f_109.json b/packages/security_detection_engine/kibana/security_rule/e3343ab9-4245-4715-b344-e11c56b0a47f_109.json new file mode 100644 index 00000000000..2df3059654f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e3343ab9-4245-4715-b344-e11c56b0a47f_109.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Compiled HTML files (.chm) are commonly distributed as part of the Microsoft HTML Help system. Adversaries may conceal malicious code in a CHM file and deliver it to a victim for execution. CHM content is loaded by the HTML Help executable program (hh.exe).", + "false_positives": [ + "The HTML Help executable program (hh.exe) runs whenever a user clicks a compiled help (.chm) file or menu item that opens the help file inside the Help Viewer. This is not always malicious, but adversaries may abuse this technology to conceal malicious code." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Process Activity via Compiled HTML File", + "note": "## Triage and analysis\n\n### Investigating Process Activity via Compiled HTML File\n\nCHM (Compiled HTML) files are a format for delivering online help files on Windows. CHM files are compressed compilations of various content, such as HTML documents, images, and scripting/web-related programming languages such as VBA, JScript, Java, and ActiveX.\n\nWhen users double-click CHM files, the HTML Help executable program (`hh.exe`) will execute them. `hh.exe` also can be used to execute code embedded in those files, PowerShell scripts, and executables. This makes it useful for attackers not only to proxy the execution of malicious payloads via a signed binary that could bypass security controls, but also to gain initial access to environments via social engineering methods.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate the parent process to gain understanding of what triggered this behavior.\n - Retrieve `.chm`, `.ps1`, and other files that were involved to further examination.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executables, scripts and help files retrieved from the system using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"hh.exe\" and\n process.name : (\"mshta.exe\", \"cmd.exe\", \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\", \"cscript.exe\", \"wscript.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e3343ab9-4245-4715-b344-e11c56b0a47f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1204", + "name": "User Execution", + "reference": "https://attack.mitre.org/techniques/T1204/", + "subtechnique": [ + { + "id": "T1204.002", + "name": "Malicious File", + "reference": "https://attack.mitre.org/techniques/T1204/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.001", + "name": "Compiled HTML File", + "reference": "https://attack.mitre.org/techniques/T1218/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "e3343ab9-4245-4715-b344-e11c56b0a47f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e3cf38fa-d5b8-46cc-87f9-4a7513e4281d_106.json b/packages/security_detection_engine/kibana/security_rule/e3cf38fa-d5b8-46cc-87f9-4a7513e4281d_106.json new file mode 100644 index 00000000000..574109d3bc4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e3cf38fa-d5b8-46cc-87f9-4a7513e4281d_106.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies unusual processes connecting to domains using known free SSL certificates. Adversaries may employ a known encryption algorithm to conceal command and control traffic.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Connection to Commonly Abused Free SSL Certificate Providers", + "query": "network where host.os.type == \"windows\" and network.protocol == \"dns\" and\n /* Add new free SSL certificate provider domains here */\n dns.question.name : (\"*letsencrypt.org\", \"*.sslforfree.com\", \"*.zerossl.com\", \"*.freessl.org\") and\n\n /* Native Windows process paths that are unlikely to have network connections to domains secured using free SSL certificates */\n process.executable : (\"C:\\\\Windows\\\\System32\\\\*.exe\",\n \"C:\\\\Windows\\\\System\\\\*.exe\",\n\t \"C:\\\\Windows\\\\SysWOW64\\\\*.exe\",\n\t\t \"C:\\\\Windows\\\\Microsoft.NET\\\\Framework*\\\\*.exe\",\n\t\t \"C:\\\\Windows\\\\explorer.exe\",\n\t\t \"C:\\\\Windows\\\\notepad.exe\") and\n\n /* Insert noisy false positives here */\n not process.name : (\"svchost.exe\", \"MicrosoftEdge*.exe\", \"msedge.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dns.question.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e3cf38fa-d5b8-46cc-87f9-4a7513e4281d", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1573", + "name": "Encrypted Channel", + "reference": "https://attack.mitre.org/techniques/T1573/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "e3cf38fa-d5b8-46cc-87f9-4a7513e4281d_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e3e904b3-0a8e-4e68-86a8-977a163e21d3_110.json b/packages/security_detection_engine/kibana/security_rule/e3e904b3-0a8e-4e68-86a8-977a163e21d3_110.json new file mode 100644 index 00000000000..b44bd881c83 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e3e904b3-0a8e-4e68-86a8-977a163e21d3_110.json @@ -0,0 +1,91 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation or modification of a K Desktop Environment (KDE) AutoStart script or desktop file that will execute upon each user logon. Adversaries may abuse this method for persistence.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via KDE AutoStart Script or Desktop File Modification", + "note": "## Triage and analysis\n\n### Investigating Persistence via KDE AutoStart Script or Desktop File Modification\n\nK Desktop Environment (KDE) is a popular graphical desktop environment for Linux systems. It supports AutoStart scripts and desktop files that execute automatically upon user logon.\n\nAdversaries may exploit this feature to maintain persistence on a compromised system by creating or modifying these files.\n\nThe detection rule 'Persistence via KDE AutoStart Script or Desktop File Modification' is designed to identify such activities by monitoring file events on Linux systems. It specifically targets the creation or modification of files with extensions \".sh\" or \".desktop\" in various AutoStart directories. By detecting these events, the rule helps security analysts identify potential abuse of KDE AutoStart functionality by malicious actors.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n### Possible investigation steps\n\n- Investigate the file that was created or modified.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\n path LIKE '/home/%/.config/autostart/%.sh' OR path LIKE '/home/%/.config/autostart/%.desktop' OR\\n path LIKE '/root/.config/autostart/%.sh' OR path LIKE '/root/.config/autostart/%.desktop' OR\\n path LIKE '/home/%/.kde/Autostart/%.sh' OR path LIKE '/home/%/.kde/Autostart/%.desktop' OR\\n path LIKE '/root/.kde/Autostart/%.sh' OR path LIKE '/root/.kde/Autostart/%.desktop' OR\\n path LIKE '/home/%/.kde4/Autostart/%.sh' OR path LIKE '/home/%/.kde4/Autostart/%.desktop' OR\\n path LIKE '/root/.kde4/Autostart/%.sh' OR path LIKE '/root/.kde4/Autostart/%.desktop' OR\\n path LIKE '/home/%/.kde/share/autostart/%.sh' OR path LIKE '/home/%/.kde/share/autostart/%.desktop' OR\\n path LIKE '/root/.kde/share/autostart/%.sh' OR path LIKE '/root/.kde/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.kde4/share/autostart/%.sh' OR path LIKE '/home/%/.kde4/share/autostart/%.desktop' OR\\n path LIKE '/root/.kde4/share/autostart/%.sh' OR path LIKE '/root/.kde4/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.local/share/autostart/%.sh' OR path LIKE '/home/%/.local/share/autostart/%.desktop' OR\\n path LIKE '/root/.local/share/autostart/%.sh' OR path LIKE '/root/.local/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.config/autostart-scripts/%.sh' OR path LIKE '/home/%/.config/autostart-scripts/%.desktop' OR\\n path LIKE '/root/.config/autostart-scripts/%.sh' OR path LIKE '/root/.config/autostart-scripts/%.desktop' OR\\n path LIKE '/etc/xdg/autostart/%.sh' OR path LIKE '/etc/xdg/autostart/%.desktop' OR\\n path LIKE '/usr/share/autostart/%.sh' OR path LIKE '/usr/share/autostart/%.desktop'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\n path LIKE '/home/%/.config/autostart/%.sh' OR path LIKE '/home/%/.config/autostart/%.desktop' OR\\n path LIKE '/root/.config/autostart/%.sh' OR path LIKE '/root/.config/autostart/%.desktop' OR\\n path LIKE '/home/%/.kde/Autostart/%.sh' OR path LIKE '/home/%/.kde/Autostart/%.desktop' OR\\n path LIKE '/root/.kde/Autostart/%.sh' OR path LIKE '/root/.kde/Autostart/%.desktop' OR\\n path LIKE '/home/%/.kde4/Autostart/%.sh' OR path LIKE '/home/%/.kde4/Autostart/%.desktop' OR\\n path LIKE '/root/.kde4/Autostart/%.sh' OR path LIKE '/root/.kde4/Autostart/%.desktop' OR\\n path LIKE '/home/%/.kde/share/autostart/%.sh' OR path LIKE '/home/%/.kde/share/autostart/%.desktop' OR\\n path LIKE '/root/.kde/share/autostart/%.sh' OR path LIKE '/root/.kde/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.kde4/share/autostart/%.sh' OR path LIKE '/home/%/.kde4/share/autostart/%.desktop' OR\\n path LIKE '/root/.kde4/share/autostart/%.sh' OR path LIKE '/root/.kde4/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.local/share/autostart/%.sh' OR path LIKE '/home/%/.local/share/autostart/%.desktop' OR\\n path LIKE '/root/.local/share/autostart/%.sh' OR path LIKE '/root/.local/share/autostart/%.desktop' OR\\n path LIKE '/home/%/.config/autostart-scripts/%.sh' OR path LIKE '/home/%/.config/autostart-scripts/%.desktop' OR\\n path LIKE '/root/.config/autostart-scripts/%.sh' OR path LIKE '/root/.config/autostart-scripts/%.desktop' OR\\n path LIKE '/etc/xdg/autostart/%.sh' OR path LIKE '/etc/xdg/autostart/%.desktop' OR\\n path LIKE '/usr/share/autostart/%.sh' OR path LIKE '/usr/share/autostart/%.desktop'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses cron jobs for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"linux\" and event.type != \"deletion\" and\n file.extension in (\"sh\", \"desktop\") and\n file.path :\n (\n \"/home/*/.config/autostart/*\", \"/root/.config/autostart/*\",\n \"/home/*/.kde/Autostart/*\", \"/root/.kde/Autostart/*\",\n \"/home/*/.kde4/Autostart/*\", \"/root/.kde4/Autostart/*\",\n \"/home/*/.kde/share/autostart/*\", \"/root/.kde/share/autostart/*\",\n \"/home/*/.kde4/share/autostart/*\", \"/root/.kde4/share/autostart/*\",\n \"/home/*/.local/share/autostart/*\", \"/root/.local/share/autostart/*\",\n \"/home/*/.config/autostart-scripts/*\", \"/root/.config/autostart-scripts/*\",\n \"/etc/xdg/autostart/*\", \"/usr/share/autostart/*\"\n ) and\n not process.name in (\"yum\", \"dpkg\", \"install\", \"dnf\", \"teams\", \"yum-cron\", \"dnf-automatic\", \"docker\", \"dockerd\", \n \"rpm\", \"pacman\", \"podman\", \"nautilus\", \"remmina\", \"cinnamon-settings.py\")\n", + "references": [ + "https://userbase.kde.org/System_Settings/Autostart", + "https://www.amnesty.org/en/latest/research/2020/09/german-made-finspy-spyware-found-in-egypt-and-mac-and-linux-versions-revealed/", + "https://www.intezer.com/blog/research/operation-electrorat-attacker-creates-fake-companies-to-drain-your-crypto-wallets/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e3e904b3-0a8e-4e68-86a8-977a163e21d3", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "e3e904b3-0a8e-4e68-86a8-977a163e21d3_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e514d8cd-ed15-4011-84e2-d15147e059f1_110.json b/packages/security_detection_engine/kibana/security_rule/e514d8cd-ed15-4011-84e2-d15147e059f1_110.json new file mode 100644 index 00000000000..8b612824c24 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e514d8cd-ed15-4011-84e2-d15147e059f1_110.json @@ -0,0 +1,132 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the modification of an account's Kerberos pre-authentication options. An adversary with GenericWrite/GenericAll rights over the account can maliciously modify these settings to perform offline password cracking attacks such as AS-REP roasting.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Kerberos Pre-authentication Disabled for User", + "note": "## Triage and analysis\n\n### Investigating Kerberos Pre-authentication Disabled for User\n\nKerberos pre-authentication is an account protection against offline password cracking. When enabled, a user requesting access to a resource initiates communication with the Domain Controller (DC) by sending an Authentication Server Request (AS-REQ) message with a timestamp that is encrypted with the hash of their password. If and only if the DC is able to successfully decrypt the timestamp with the hash of the user\u2019s password, it will then send an Authentication Server Response (AS-REP) message that contains the Ticket Granting Ticket (TGT) to the user. Part of the AS-REP message is signed with the user\u2019s password. Microsoft's security monitoring [recommendations](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4738) state that `'Don't Require Preauth' \u2013 Enabled` should not be enabled for user accounts because it weakens security for the account\u2019s Kerberos authentication.\n\nAS-REP roasting is an attack against Kerberos for user accounts that do not require pre-authentication, which means that if the target user has pre-authentication disabled, an attacker can request authentication data for it and get a TGT that can be brute-forced offline, similarly to Kerberoasting.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Determine if the target account is sensitive or privileged.\n- Inspect the account activities for suspicious or abnormal behaviors in the alert timeframe.\n\n### False positive analysis\n\n- Disabling pre-authentication is a bad security practice and should not be allowed in the domain. The security team should map and monitor any potential benign true positives (B-TPs), especially if the target account is privileged.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Reset the target account's password if there is any risk of TGTs having been retrieved.\n- Re-enable the preauthentication option or disable the target account.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.code:4738 and winlog.api:\"wineventlog\" and message:\"'Don't Require Preauth' - Enabled\"\n", + "references": [ + "https://harmj0y.medium.com/roasting-as-reps-e6179a65216b", + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4738", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0026_windows_audit_user_account_management.md" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "message", + "type": "match_only_text" + }, + { + "ecs": false, + "name": "winlog.api", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e514d8cd-ed15-4011-84e2-d15147e059f1", + "setup": "## Setup\n\nThe 'Audit User Account Management' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nAccount Management >\nAudit User Account Management (Success,Failure)\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Defense Evasion", + "Tactic: Privilege Escalation", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring", + "Data Source: Active Directory" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/", + "subtechnique": [ + { + "id": "T1558.004", + "name": "AS-REP Roasting", + "reference": "https://attack.mitre.org/techniques/T1558/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/", + "subtechnique": [ + { + "id": "T1078.002", + "name": "Domain Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "e514d8cd-ed15-4011-84e2-d15147e059f1_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e6c98d38-633d-4b3e-9387-42112cd5ac10_106.json b/packages/security_detection_engine/kibana/security_rule/e6c98d38-633d-4b3e-9387-42112cd5ac10_106.json new file mode 100644 index 00000000000..bc6e2f6f309 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e6c98d38-633d-4b3e-9387-42112cd5ac10_106.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Authorization plugins are used to extend the authorization services API and implement mechanisms that are not natively supported by the OS, such as multi-factor authentication with third party software. Adversaries may abuse this feature to persist and/or collect clear text credentials as they traverse the registered plugins during user logon.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Authorization Plugin Modification", + "query": "event.category:file and host.os.type:macos and not event.type:deletion and\n file.path:(/Library/Security/SecurityAgentPlugins/* and\n not /Library/Security/SecurityAgentPlugins/TeamViewerAuthPlugin.bundle/*) and\n not process.name:shove and process.code_signature.trusted:true\n", + "references": [ + "https://developer.apple.com/documentation/security/authorization_plug-ins", + "https://www.xorrior.com/persistent-credential-theft/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e6c98d38-633d-4b3e-9387-42112cd5ac10", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.002", + "name": "Authentication Package", + "reference": "https://attack.mitre.org/techniques/T1547/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "e6c98d38-633d-4b3e-9387-42112cd5ac10_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e6e8912f-283f-4d0d-8442-e0dcaf49944b_107.json b/packages/security_detection_engine/kibana/security_rule/e6e8912f-283f-4d0d-8442-e0dcaf49944b_107.json new file mode 100644 index 00000000000..16c02f03f5c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e6e8912f-283f-4d0d-8442-e0dcaf49944b_107.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when a screensaver plist file is modified by an unexpected process. An adversary can maintain persistence on a macOS endpoint by creating a malicious screensaver (.saver) file and configuring the screensaver plist file to execute code each time the screensaver is activated.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Screensaver Plist File Modified by Unexpected Process", + "note": "## Triage and analysis\n\n- Analyze the plist file modification event to identify whether the change was expected or not\n- Investigate the process that modified the plist file for malicious code or other suspicious behavior\n- Identify if any suspicious or known malicious screensaver (.saver) files were recently written to or modified on the host\n", + "query": "file where host.os.type == \"macos\" and event.type != \"deletion\" and\n file.name: \"com.apple.screensaver.*.plist\" and\n file.path : (\n \"/Users/*/Library/Preferences/ByHost/*\",\n \"/Library/Managed Preferences/*\",\n \"/System/Library/Preferences/*\"\n ) and\n (\n process.code_signature.trusted == false or\n process.code_signature.exists == false or\n\n /* common script interpreters and abused native macOS bins */\n process.name : (\n \"curl\",\n \"mktemp\",\n \"tail\",\n \"funzip\",\n \"python*\",\n \"osascript\",\n \"perl\"\n )\n ) and\n\n /* Filter OS processes modifying screensaver plist files */\n not process.executable : (\n \"/usr/sbin/cfprefsd\",\n \"/usr/libexec/xpcproxy\",\n \"/System/Library/CoreServices/ManagedClient.app/Contents/Resources/MCXCompositor\",\n \"/System/Library/CoreServices/ManagedClient.app/Contents/MacOS/ManagedClient\"\n )\n", + "references": [ + "https://posts.specterops.io/saving-your-access-d562bf5bf90b", + "https://github.com/D00MFist/PersistentJXA" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.code_signature.exists", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.code_signature.trusted", + "type": "boolean" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e6e8912f-283f-4d0d-8442-e0dcaf49944b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "e6e8912f-283f-4d0d-8442-e0dcaf49944b_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e7125cea-9fe1-42a5-9a05-b0792cf86f5a_106.json b/packages/security_detection_engine/kibana/security_rule/e7125cea-9fe1-42a5-9a05-b0792cf86f5a_106.json new file mode 100644 index 00000000000..d6cc8fb0f2d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e7125cea-9fe1-42a5-9a05-b0792cf86f5a_106.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution of suspicious persistent programs (scripts, rundll32, etc.) by looking at process lineage and command line usage.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Execution of Persistent Suspicious Program", + "query": "/* userinit followed by explorer followed by early child process of explorer (unlikely to be launched interactively) within 1m */\nsequence by host.id, user.name with maxspan=1m\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"userinit.exe\" and process.parent.name : \"winlogon.exe\"]\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"explorer.exe\"]\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"explorer.exe\" and\n /* add suspicious programs here */\n process.pe.original_file_name in (\"cscript.exe\",\n \"wscript.exe\",\n \"PowerShell.EXE\",\n \"MSHTA.EXE\",\n \"RUNDLL32.EXE\",\n \"REGSVR32.EXE\",\n \"RegAsm.exe\",\n \"MSBuild.exe\",\n \"InstallUtil.exe\") and\n /* add potential suspicious paths here */\n process.args : (\"C:\\\\Users\\\\*\", \"C:\\\\ProgramData\\\\*\", \"C:\\\\Windows\\\\Temp\\\\*\", \"C:\\\\Windows\\\\Tasks\\\\*\", \"C:\\\\PerfLogs\\\\*\", \"C:\\\\Intel\\\\*\")\n ]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e7125cea-9fe1-42a5-9a05-b0792cf86f5a", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "e7125cea-9fe1-42a5-9a05-b0792cf86f5a_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e72f87d0-a70e-4f8d-8443-a6407bc34643_106.json b/packages/security_detection_engine/kibana/security_rule/e72f87d0-a70e-4f8d-8443-a6407bc34643_106.json new file mode 100644 index 00000000000..4fe15a7e154 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e72f87d0-a70e-4f8d-8443-a6407bc34643_106.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects the creation of a WMI Event Subscription. Attackers can abuse this mechanism for persistence or to elevate to SYSTEM privileges.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious WMI Event Subscription Created", + "query": "any where event.dataset == \"windows.sysmon_operational\" and event.code == \"21\" and\n winlog.event_data.Operation : \"Created\" and winlog.event_data.Consumer : (\"*subscription:CommandLineEventConsumer*\", \"*subscription:ActiveScriptEventConsumer*\")\n", + "references": [ + "https://www.blackhat.com/docs/us-15/materials/us-15-Graeber-Abusing-Windows-Management-Instrumentation-WMI-To-Build-A-Persistent%20Asynchronous-And-Fileless-Backdoor-wp.pdf", + "https://medium.com/threatpunter/detecting-removing-wmi-persistence-60ccbb7dff96" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Consumer", + "type": "unknown" + }, + { + "ecs": false, + "name": "winlog.event_data.Operation", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e72f87d0-a70e-4f8d-8443-a6407bc34643", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.003", + "name": "Windows Management Instrumentation Event Subscription", + "reference": "https://attack.mitre.org/techniques/T1546/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "e72f87d0-a70e-4f8d-8443-a6407bc34643_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e7cb3cfd-aaa3-4d7b-af18-23b89955062c_8.json b/packages/security_detection_engine/kibana/security_rule/e7cb3cfd-aaa3-4d7b-af18-23b89955062c_8.json new file mode 100644 index 00000000000..351d0229d9a --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e7cb3cfd-aaa3-4d7b-af18-23b89955062c_8.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the unshadow utility which is part of John the Ripper, a password-cracking tool on the host machine. Malicious actors can use the utility to retrieve the combined contents of the '/etc/shadow' and '/etc/password' files. Using the combined file generated from the utility, the malicious threat actors can use them as input for password-cracking utilities or prepare themselves for future operations by gathering credential information of the victim.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Credential Dumping via Unshadow", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and\nprocess.name == \"unshadow\" and process.args_count >= 3\n", + "references": [ + "https://www.cyberciti.biz/faq/unix-linux-password-cracking-john-the-ripper/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e7cb3cfd-aaa3-4d7b-af18-23b89955062c", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.008", + "name": "/etc/passwd and /etc/shadow", + "reference": "https://attack.mitre.org/techniques/T1003/008/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "e7cb3cfd-aaa3-4d7b-af18-23b89955062c_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e7cd5982-17c8-4959-874c-633acde7d426_206.json b/packages/security_detection_engine/kibana/security_rule/e7cd5982-17c8-4959-874c-633acde7d426_206.json new file mode 100644 index 00000000000..8df99cac0fe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e7cd5982-17c8-4959-874c-633acde7d426_206.json @@ -0,0 +1,88 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Austin Songer" + ], + "description": "Identifies when an AWS Route Table has been modified or deleted.", + "false_positives": [ + "Route Table could be modified or deleted by a system administrator. Verify whether the user identity, user agent, and/or hostname should be making changes in your environment. Route Table being modified from unfamiliar users should be investigated. If known behavior is causing false positives, it can be exempted from the rule. Also automated processes that use Terraform may lead to false positives." + ], + "from": "now-60m", + "index": [ + "filebeat-*", + "logs-aws*" + ], + "interval": "10m", + "language": "kuery", + "license": "Elastic License v2", + "name": "AWS Route Table Modified or Deleted", + "note": "", + "query": "event.dataset:aws.cloudtrail and event.provider:ec2.amazonaws.com and event.action:(ReplaceRoute or ReplaceRouteTableAssociation or\nDeleteRouteTable or DeleteRoute or DisassociateRouteTable) and event.outcome:success\n", + "references": [ + "https://github.com/easttimor/aws-incident-response#network-routing", + "https://docs.datadoghq.com/security_platform/default_rules/aws-ec2-route-table-modified/", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReplaceRoute.html", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReplaceRouteTableAssociation", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteRouteTable.html", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteRoute.html", + "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateRouteTable.html" + ], + "related_integrations": [ + { + "integration": "cloudtrail", + "package": "aws", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e7cd5982-17c8-4959-874c-633acde7d426", + "setup": "The AWS Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "low", + "tags": [ + "Domain: Cloud", + "Data Source: AWS", + "Data Source: Amazon Web Services", + "Use Case: Network Security Monitoring", + "Tactic: Persistence" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 206 + }, + "id": "e7cd5982-17c8-4959-874c-633acde7d426_206", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e86da94d-e54b-4fb5-b96c-cecff87e8787_107.json b/packages/security_detection_engine/kibana/security_rule/e86da94d-e54b-4fb5-b96c-cecff87e8787_107.json new file mode 100644 index 00000000000..1d1fd107848 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e86da94d-e54b-4fb5-b96c-cecff87e8787_107.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies registry modifications related to the Windows Security Support Provider (SSP) configuration. Adversaries may abuse this to establish persistence in an environment.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Installation of Security Support Provider", + "query": "registry where host.os.type == \"windows\" and\n registry.path : (\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Lsa\\\\Security Packages*\",\n \"HKLM\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Lsa\\\\OSConfig\\\\Security Packages*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Lsa\\\\Security Packages*\",\n \"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\*ControlSet*\\\\Control\\\\Lsa\\\\OSConfig\\\\Security Packages*\"\n ) and\n not process.executable : (\"C:\\\\Windows\\\\System32\\\\msiexec.exe\", \"C:\\\\Windows\\\\SysWOW64\\\\msiexec.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e86da94d-e54b-4fb5-b96c-cecff87e8787", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.005", + "name": "Security Support Provider", + "reference": "https://attack.mitre.org/techniques/T1547/005/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "e86da94d-e54b-4fb5-b96c-cecff87e8787_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e88d1fe9-b2f4-48d4-bace-a026dc745d4b_6.json b/packages/security_detection_engine/kibana/security_rule/e88d1fe9-b2f4-48d4-bace-a026dc745d4b_6.json new file mode 100644 index 00000000000..fadff4f662e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e88d1fe9-b2f4-48d4-bace-a026dc745d4b_6.json @@ -0,0 +1,97 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects files creation and modification on the host system from the the Windows Subsystem for Linux. Adversaries may enable and use WSL for Linux to avoid detection.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Host Files System Changes via Windows Subsystem for Linux", + "query": "sequence by process.entity_id with maxspan=5m\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : \"dllhost.exe\" and \n /* Plan9FileSystem CLSID - WSL Host File System Worker */\n process.command_line : \"*{DFB65C4C-B34F-435D-AFE9-A86218684AA8}*\"]\n [file where host.os.type == \"windows\" and process.name : \"dllhost.exe\" and not file.path : \"?:\\\\Users\\\\*\\\\Downloads\\\\*\"]\n", + "references": [ + "https://github.com/microsoft/WSL" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "e88d1fe9-b2f4-48d4-bace-a026dc745d4b", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1202", + "name": "Indirect Command Execution", + "reference": "https://attack.mitre.org/techniques/T1202/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "e88d1fe9-b2f4-48d4-bace-a026dc745d4b_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e9001ee6-2d00-4d2f-849e-b8b1fb05234c_105.json b/packages/security_detection_engine/kibana/security_rule/e9001ee6-2d00-4d2f-849e-b8b1fb05234c_105.json new file mode 100644 index 00000000000..a2d689b4ab9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e9001ee6-2d00-4d2f-849e-b8b1fb05234c_105.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the execution of several commonly used system commands executed by a previously unknown executable located in commonly abused directories. An alert from this rule can indicate the presence of potentially malicious activity, such as the execution of unauthorized or suspicious processes attempting to run malicious code. Detecting and investigating such behavior can help identify and mitigate potential security threats, protecting the system and its data from potential compromise.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious System Commands Executed by Previously Unknown Executable", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "host.os.type:linux and event.category:process and event.action:(exec or exec_event or fork or fork_event) and \nprocess.executable:(\n /bin/* or /usr/bin/* or /usr/share/* or /tmp/* or /var/tmp/* or /dev/shm/* or\n /etc/init.d/* or /etc/rc*.d/* or /etc/crontab or /etc/cron.*/* or /etc/update-motd.d/* or \n /usr/lib/update-notifier/* or /home/*/.* or /boot/* or /srv/* or /run/*) \n and process.args:(whoami or id or hostname or uptime or top or ifconfig or netstat or route or ps or pwd or ls) and \n not process.name:(sudo or which or whoami or id or hostname or uptime or top or netstat or ps or pwd or ls or apt or \n dpkg or yum or rpm or dnf or dockerd or docker or snapd or snap) and\n not process.parent.executable:(/bin/* or /usr/bin/* or /run/k3s/* or /etc/network/* or /opt/Elastic/*)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "e9001ee6-2d00-4d2f-849e-b8b1fb05234c", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 105 + }, + "id": "e9001ee6-2d00-4d2f-849e-b8b1fb05234c_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e92c99b6-c547-4bb6-b244-2f27394bc849_3.json b/packages/security_detection_engine/kibana/security_rule/e92c99b6-c547-4bb6-b244-2f27394bc849_3.json new file mode 100644 index 00000000000..0e79bda6675 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e92c99b6-c547-4bb6-b244-2f27394bc849_3.json @@ -0,0 +1,60 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected high bytes of data written to an external device via Airdrop. In a typical operational setting, there is usually a predictable pattern or a certain range of data that is written to external devices. An unusually large amount of data being written is anomalous and can signal illicit data copying or transfer activities.", + "from": "now-2h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_bytes_written_to_external_device_airdrop", + "name": "Spike in Bytes Sent to an External Device via Airdrop", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "e92c99b6-c547-4bb6-b244-2f27394bc849", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the Elastic Defend integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1011", + "name": "Exfiltration Over Other Network Medium", + "reference": "https://attack.mitre.org/techniques/T1011/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "e92c99b6-c547-4bb6-b244-2f27394bc849_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e94262f2-c1e9-4d3f-a907-aeab16712e1a_110.json b/packages/security_detection_engine/kibana/security_rule/e94262f2-c1e9-4d3f-a907-aeab16712e1a_110.json new file mode 100644 index 00000000000..2f5dff20afe --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e94262f2-c1e9-4d3f-a907-aeab16712e1a_110.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies an unexpected executable file being created or modified by a Windows system critical process, which may indicate activity related to remote code execution or other forms of exploitation.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Executable File Creation by a System Critical Process", + "note": "## Triage and analysis\n\n### Investigating Unusual Executable File Creation by a System Critical Process\n\nWindows internal/system processes have some characteristics that can be used to spot suspicious activities. One of these characteristics is file operations.\n\nThis rule looks for the creation of executable files done by system-critical processes. This can indicate the exploitation of a vulnerability or a malicious process masquerading as a system-critical process.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.extension : (\"exe\", \"dll\") and\n process.name : (\"smss.exe\",\n \"autochk.exe\",\n \"csrss.exe\",\n \"wininit.exe\",\n \"services.exe\",\n \"lsass.exe\",\n \"winlogon.exe\",\n \"userinit.exe\",\n \"LogonUI.exe\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "e94262f2-c1e9-4d3f-a907-aeab16712e1a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1211", + "name": "Exploitation for Defense Evasion", + "reference": "https://attack.mitre.org/techniques/T1211/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1203", + "name": "Exploitation for Client Execution", + "reference": "https://attack.mitre.org/techniques/T1203/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "e94262f2-c1e9-4d3f-a907-aeab16712e1a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/e9b0902b-c515-413b-b80b-a8dcebc81a66_3.json b/packages/security_detection_engine/kibana/security_rule/e9b0902b-c515-413b-b80b-a8dcebc81a66_3.json new file mode 100644 index 00000000000..7201319a122 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/e9b0902b-c515-413b-b80b-a8dcebc81a66_3.json @@ -0,0 +1,61 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected an abnormal volume of remote files shared on the host indicating potential lateral movement activity. One of the primary goals of attackers after gaining access to a network is to locate and exfiltrate valuable information. Attackers might perform multiple small transfers to match normal egress activity in the network, to evade detection.", + "from": "now-90m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "lmd_high_count_remote_file_transfer", + "name": "Spike in Remote File Transfers", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/lmd", + "https://www.elastic.co/blog/detecting-lateral-movement-activity-a-new-kibana-integration", + "https://www.elastic.co/blog/remote-desktop-protocol-connections-elastic-security" + ], + "related_integrations": [ + { + "package": "lmd", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "risk_score": 21, + "rule_id": "e9b0902b-c515-413b-b80b-a8dcebc81a66", + "setup": "## Setup\n\nThe rule requires the Lateral Movement Detection integration assets to be installed, as well as file and Windows RDP process events collected by the Elastic Defend integration. \n\n### Lateral Movement Detection Setup\nThe Lateral Movement Detection integration detects lateral movement activity by identifying abnormalities in file and Windows RDP events. Anomalies are detected using Elastic's Anomaly Detection feature.\n\n#### Prerequisite Requirements:\n- Fleet is required for Lateral Movement Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- File events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n#### The following steps should be executed to install assets associated with the Lateral Movement Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Lateral Movement Detection and select the integration to see more details about it.\n- Under Settings, click Install Lateral Movement Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Lateral Movement Detection, you'll need to enable the corresponding Anomaly Detection jobs.\n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your file events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/lmd/kibana/ml_module/lmd-ml.json) configuration file, you will see a card for Lateral Movement Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Lateral Movement Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Lateral Movement" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1210", + "name": "Exploitation of Remote Services", + "reference": "https://attack.mitre.org/techniques/T1210/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "e9b0902b-c515-413b-b80b-a8dcebc81a66_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ea09ff26-3902-4c53-bb8e-24b7a5d029dd_3.json b/packages/security_detection_engine/kibana/security_rule/ea09ff26-3902-4c53-bb8e-24b7a5d029dd_3.json new file mode 100644 index 00000000000..9466b14b768 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ea09ff26-3902-4c53-bb8e-24b7a5d029dd_3.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected a suspicious Windows process. This process has been classified as malicious in two ways. It was predicted to be malicious by the ProblemChild supervised ML model, and it was found to be an unusual child process name, for the parent process, by an unsupervised ML model. Such a process may be an instance of suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_rare_process_by_parent", + "name": "Unusual Process Spawned by a Parent Process", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "ea09ff26-3902-4c53-bb8e-24b7a5d029dd", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "ea09ff26-3902-4c53-bb8e-24b7a5d029dd_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eaef8a35-12e0-4ac0-bc14-81c72b6bd27c_2.json b/packages/security_detection_engine/kibana/security_rule/eaef8a35-12e0-4ac0-bc14-81c72b6bd27c_2.json new file mode 100644 index 00000000000..4a08a5d888e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eaef8a35-12e0-4ac0-bc14-81c72b6bd27c_2.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects suspicious network events executed by the APT package manager, potentially indicating persistence through an APT backdoor. In Linux, APT (Advanced Package Tool) is a command-line utility used for handling packages on Debian-based systems, providing functions for installing, updating, upgrading, and removing software along with managing package repositories. Attackers can backdoor APT to gain persistence by injecting malicious code into scripts that APT runs, thereby ensuring continued unauthorized access or control each time APT is used for package management.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious APT Package Manager Network Connection", + "query": "sequence by host.id with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.parent.name == \"apt\" and process.args == \"-c\" and process.name in (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\"\n )\n ] by process.entity_id\n [network where host.os.type == \"linux\" and event.action == \"connection_attempted\" and event.type == \"start\"\n ] by process.parent.entity_id\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "eaef8a35-12e0-4ac0-bc14-81c72b6bd27c", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Command and Control", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/" + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [] + } + ], + "type": "eql", + "version": 2 + }, + "id": "eaef8a35-12e0-4ac0-bc14-81c72b6bd27c_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eb44611f-62a8-4036-a5ef-587098be6c43_4.json b/packages/security_detection_engine/kibana/security_rule/eb44611f-62a8-4036-a5ef-587098be6c43_4.json new file mode 100644 index 00000000000..48011719ead --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eb44611f-62a8-4036-a5ef-587098be6c43_4.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that can be used to record webcam video. Attackers can capture this information to extort or spy on victims.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Webcam Video Capture Capabilities", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"NewFrameEventHandler\" or\n \"VideoCaptureDevice\" or\n \"DirectX.Capture.Filters\" or\n \"VideoCompressors\" or\n \"Start-WebcamRecorder\" or\n (\n (\"capCreateCaptureWindowA\" or\n \"capCreateCaptureWindow\" or\n \"capGetDriverDescription\") and\n (\"avicap32.dll\" or \"avicap32\")\n )\n )\n", + "references": [ + "https://github.com/EmpireProject/Empire/blob/master/lib/modules/powershell/collection/WebcamRecorder.py" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "eb44611f-62a8-4036-a5ef-587098be6c43", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Collection", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1125", + "name": "Video Capture", + "reference": "https://attack.mitre.org/techniques/T1125/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "eb44611f-62a8-4036-a5ef-587098be6c43_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eb610e70-f9e6-4949-82b9-f1c5bcd37c39_111.json b/packages/security_detection_engine/kibana/security_rule/eb610e70-f9e6-4949-82b9-f1c5bcd37c39_111.json new file mode 100644 index 00000000000..b348b59162d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eb610e70-f9e6-4949-82b9-f1c5bcd37c39_111.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that have the capability of requesting kerberos tickets, which is a common step in Kerberoasting toolkits to crack service accounts.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Kerberos Ticket Request", + "note": "## Triage and analysis\n\n### Investigating PowerShell Kerberos Ticket Request\n\nPowerShell is one of the main tools system administrators use for automation, report routines, and other tasks, making it available for use in various environments, creating an attractive way for attackers to execute code.\n\nAccounts associated with a service principal name (SPN) are viable targets for Kerberoasting attacks, which use brute force to crack the user password, which is used to encrypt a Kerberos TGS ticket.\n\nAttackers can use PowerShell to request these Kerberos tickets, with the intent of extracting them from memory to perform Kerberoasting.\n\n#### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate if the script was executed, and if so, which account was targeted.\n- Validate if the account has an SPN associated with it.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Check if the script has any other functionality that can be potentially malicious.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Review event ID [4769](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4769) related to this account and service name for additional information.\n\n### False positive analysis\n\n- A possible false positive can be identified if the script content is not malicious/harmful or does not request Kerberos tickets for user accounts, as computer accounts are not vulnerable to Kerberoasting due to complex password requirements and policy.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services. Prioritize privileged accounts.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n KerberosRequestorSecurityToken\n ) and not user.id : (\"S-1-5-18\" or \"S-1-5-20\") and\n not powershell.file.script_block_text : (\n (\"sentinelbreakpoints\" and (\"Set-PSBreakpoint\" or \"Set-HookFunctionTabs\")) or\n (\"function global\" and \"\\\\windows\\\\sentinel\\\\4\")\n )\n", + "references": [ + "https://cobalt.io/blog/kerberoast-attack-techniques", + "https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "eb610e70-f9e6-4949-82b9-f1c5bcd37c39", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/", + "subtechnique": [ + { + "id": "T1558.003", + "name": "Kerberoasting", + "reference": "https://attack.mitre.org/techniques/T1558/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 111 + }, + "id": "eb610e70-f9e6-4949-82b9-f1c5bcd37c39_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eb9eb8ba-a983-41d9-9c93-a1c05112ca5e_110.json b/packages/security_detection_engine/kibana/security_rule/eb9eb8ba-a983-41d9-9c93-a1c05112ca5e_110.json new file mode 100644 index 00000000000..8b6820cf4c1 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eb9eb8ba-a983-41d9-9c93-a1c05112ca5e_110.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential attempts to disable Security-Enhanced Linux (SELinux), which is a Linux kernel security feature to support access control policies. Adversaries may disable security tools to avoid possible detection of their tools and activities.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Disabling of SELinux", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and process.name == \"setenforce\" and process.args == \"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "eb9eb8ba-a983-41d9-9c93-a1c05112ca5e", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "eb9eb8ba-a983-41d9-9c93-a1c05112ca5e_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6_108.json b/packages/security_detection_engine/kibana/security_rule/ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6_108.json new file mode 100644 index 00000000000..1c51d181bcf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6_108.json @@ -0,0 +1,86 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the password log file from the default Mimikatz memssp module.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Mimikatz Memssp Log File Detected", + "note": "## Triage and analysis\n\n### Investigating Mimikatz Memssp Log File Detected\n\n[Mimikatz](https://github.com/gentilkiwi/mimikatz) is an open-source tool used to collect, decrypt, and/or use cached credentials. This tool is commonly abused by adversaries during the post-compromise stage where adversaries have gained an initial foothold on an endpoint and are looking to elevate privileges and seek out additional authentication objects such as tokens/hashes/credentials that can then be used to laterally move and pivot across a network.\n\nThis rule looks for the creation of a file named `mimilsa.log`, which is generated when using the Mimikatz misc::memssp module, which injects a malicious Windows SSP to collect locally authenticated credentials, which includes the computer account password, running service credentials, and any accounts that logon.\n\n#### Possible investigation steps\n\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (e.g., 4624) to the target host.\n- Retrieve and inspect the log file contents.\n- Search for DLL files created in the same location as the log file, and retrieve unsigned DLLs.\n - Use the PowerShell Get-FileHash cmdlet to get the SHA-256 hash value of these files.\n - Search for the existence of these files in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n - Identify the process that created the DLL using file creation events.\n\n### False positive analysis\n\n- This file name `mimilsa.log` should not legitimately be created.\n\n### Related rules\n\n- Mimikatz Powershell Module Activity - ac96ceb8-4399-4191-af1d-4feeac1f1f46\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the host is a Domain Controller (DC):\n - Activate your incident response plan for total Active Directory compromise.\n - Review the privileges assigned to users that can access the DCs to ensure that the least privilege principle is being followed and reduce the attack surface.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Reboot the host to remove the injected SSP from memory.\n- Reimage the host operating system or restore compromised files to clean versions.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and file.name : \"mimilsa.log\" and process.name : \"lsass.exe\"\n", + "references": [ + "https://www.elastic.co/security-labs/detect-credential-access" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "ebb200e8-adf0-43f8-a0bb-4ee5b5d852c6_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ebf1adea-ccf2-4943-8b96-7ab11ca173a5_109.json b/packages/security_detection_engine/kibana/security_rule/ebf1adea-ccf2-4943-8b96-7ab11ca173a5_109.json new file mode 100644 index 00000000000..ef186d91952 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ebf1adea-ccf2-4943-8b96-7ab11ca173a5_109.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when Internet Information Services (IIS) HTTP Logging is disabled on a server. An attacker with IIS server access via a webshell or other mechanism can disable HTTP Logging as an effective anti-forensics measure.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 33, + "name": "IIS HTTP Logging Disabled", + "note": "## Triage and analysis\n\n### Investigating IIS HTTP Logging Disabled\n\nIIS (Internet Information Services) is a Microsoft web server software used to host websites and web applications on Windows. It provides features for serving dynamic and static content, and can be managed through a graphical interface or command-line tools.\n\nIIS logging is a data source that can be used for security monitoring, forensics, and incident response. It contains mainly information related to requests done to the web server, and can be used to spot malicious activities like webshells. Adversaries can tamper, clear, and delete this data to evade detection, cover their tracks, and slow down incident response.\n\nThis rule monitors commands that disable IIS logging.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - Verify if any other anti-forensics behaviors were observed.\n- Verify whether the logs stored in the `C:\\inetpub\\logs\\logfiles\\w3svc1` directory were deleted after this action.\n- Check if this operation is done under change management and approved according to the organization's policy.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Re-enable affected logging components, services, and security monitoring.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"appcmd.exe\" or ?process.pe.original_file_name == \"appcmd.exe\") and\n process.args : \"/dontLog*:*True\" and\n not process.parent.name : \"iissetup.exe\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "ebf1adea-ccf2-4943-8b96-7ab11ca173a5", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.002", + "name": "Disable Windows Event Logging", + "reference": "https://attack.mitre.org/techniques/T1562/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "ebf1adea-ccf2-4943-8b96-7ab11ca173a5_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ebfe1448-7fac-4d59-acea-181bd89b1f7f_109.json b/packages/security_detection_engine/kibana/security_rule/ebfe1448-7fac-4d59-acea-181bd89b1f7f_109.json new file mode 100644 index 00000000000..a7c10e8b189 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ebfe1448-7fac-4d59-acea-181bd89b1f7f_109.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies process execution from suspicious default Windows directories. This is sometimes done by adversaries to hide malware in trusted paths.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Process Execution from an Unusual Directory", + "note": "## Triage and analysis\n\n### Investigating Process Execution from an Unusual Directory\n\nThis rule identifies processes that are executed from suspicious default Windows directories. Adversaries may abuse this technique by planting malware in trusted paths, making it difficult for security analysts to discern if their activities are malicious or take advantage of exceptions that may apply to these paths.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes, examining their executable files for prevalence, location, and valid digital signatures.\n- Investigate any abnormal behavior by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Examine arguments and working directory to determine the program's source or the nature of the tasks it is performing.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of executable and signature conditions.\n\n### Related Rules\n\n- Unusual Windows Path Activity - 445a342e-03fb-42d0-8656-0367eb2dead5\n- Execution from Unusual Directory - Command Line - cff92c41-2225-4763-b4ce-6f71e5bda5e6\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n /* add suspicious execution paths here */\n process.executable : (\n \"?:\\\\PerfLogs\\\\*.exe\", \"?:\\\\Users\\\\Public\\\\*.exe\", \"?:\\\\Windows\\\\Tasks\\\\*.exe\",\n \"?:\\\\Intel\\\\*.exe\", \"?:\\\\AMD\\\\Temp\\\\*.exe\", \"?:\\\\Windows\\\\AppReadiness\\\\*.exe\",\n \"?:\\\\Windows\\\\ServiceState\\\\*.exe\", \"?:\\\\Windows\\\\security\\\\*.exe\", \"?:\\\\Windows\\\\IdentityCRL\\\\*.exe\",\n \"?:\\\\Windows\\\\Branding\\\\*.exe\", \"?:\\\\Windows\\\\csc\\\\*.exe\", \"?:\\\\Windows\\\\DigitalLocker\\\\*.exe\",\n \"?:\\\\Windows\\\\en-US\\\\*.exe\", \"?:\\\\Windows\\\\wlansvc\\\\*.exe\", \"?:\\\\Windows\\\\Prefetch\\\\*.exe\",\n \"?:\\\\Windows\\\\Fonts\\\\*.exe\", \"?:\\\\Windows\\\\diagnostics\\\\*.exe\", \"?:\\\\Windows\\\\TAPI\\\\*.exe\",\n \"?:\\\\Windows\\\\INF\\\\*.exe\", \"?:\\\\Windows\\\\System32\\\\Speech\\\\*.exe\", \"?:\\\\windows\\\\tracing\\\\*.exe\",\n \"?:\\\\windows\\\\IME\\\\*.exe\", \"?:\\\\Windows\\\\Performance\\\\*.exe\", \"?:\\\\windows\\\\intel\\\\*.exe\",\n \"?:\\\\windows\\\\ms\\\\*.exe\", \"?:\\\\Windows\\\\dot3svc\\\\*.exe\", \"?:\\\\Windows\\\\panther\\\\*.exe\",\n \"?:\\\\Windows\\\\RemotePackages\\\\*.exe\", \"?:\\\\Windows\\\\OCR\\\\*.exe\", \"?:\\\\Windows\\\\appcompat\\\\*.exe\",\n \"?:\\\\Windows\\\\apppatch\\\\*.exe\", \"?:\\\\Windows\\\\addins\\\\*.exe\", \"?:\\\\Windows\\\\Setup\\\\*.exe\",\n \"?:\\\\Windows\\\\Help\\\\*.exe\", \"?:\\\\Windows\\\\SKB\\\\*.exe\", \"?:\\\\Windows\\\\Vss\\\\*.exe\",\n \"?:\\\\Windows\\\\Web\\\\*.exe\", \"?:\\\\Windows\\\\servicing\\\\*.exe\", \"?:\\\\Windows\\\\CbsTemp\\\\*.exe\",\n \"?:\\\\Windows\\\\Logs\\\\*.exe\", \"?:\\\\Windows\\\\WaaS\\\\*.exe\", \"?:\\\\Windows\\\\ShellExperiences\\\\*.exe\",\n \"?:\\\\Windows\\\\ShellComponents\\\\*.exe\", \"?:\\\\Windows\\\\PLA\\\\*.exe\", \"?:\\\\Windows\\\\Migration\\\\*.exe\",\n \"?:\\\\Windows\\\\debug\\\\*.exe\", \"?:\\\\Windows\\\\Cursors\\\\*.exe\", \"?:\\\\Windows\\\\Containers\\\\*.exe\",\n \"?:\\\\Windows\\\\Boot\\\\*.exe\", \"?:\\\\Windows\\\\bcastdvr\\\\*.exe\", \"?:\\\\Windows\\\\assembly\\\\*.exe\",\n \"?:\\\\Windows\\\\TextInput\\\\*.exe\", \"?:\\\\Windows\\\\security\\\\*.exe\", \"?:\\\\Windows\\\\schemas\\\\*.exe\",\n \"?:\\\\Windows\\\\SchCache\\\\*.exe\", \"?:\\\\Windows\\\\Resources\\\\*.exe\", \"?:\\\\Windows\\\\rescache\\\\*.exe\",\n \"?:\\\\Windows\\\\Provisioning\\\\*.exe\", \"?:\\\\Windows\\\\PrintDialog\\\\*.exe\", \"?:\\\\Windows\\\\PolicyDefinitions\\\\*.exe\",\n \"?:\\\\Windows\\\\media\\\\*.exe\", \"?:\\\\Windows\\\\Globalization\\\\*.exe\", \"?:\\\\Windows\\\\L2Schemas\\\\*.exe\",\n \"?:\\\\Windows\\\\LiveKernelReports\\\\*.exe\", \"?:\\\\Windows\\\\ModemLogs\\\\*.exe\",\n \"?:\\\\Windows\\\\ImmersiveControlPanel\\\\*.exe\"\n ) and\n \n not process.name : (\n \"SpeechUXWiz.exe\", \"SystemSettings.exe\", \"TrustedInstaller.exe\",\n \"PrintDialog.exe\", \"MpSigStub.exe\", \"LMS.exe\", \"mpam-*.exe\"\n ) and\n not process.executable :\n (\"?:\\\\Intel\\\\Wireless\\\\WUSetupLauncher.exe\",\n \"?:\\\\Intel\\\\Wireless\\\\Setup.exe\",\n \"?:\\\\Intel\\\\Move Mouse.exe\",\n \"?:\\\\windows\\\\Panther\\\\DiagTrackRunner.exe\",\n \"?:\\\\Windows\\\\servicing\\\\GC64\\\\tzupd.exe\",\n \"?:\\\\Users\\\\Public\\\\res\\\\RemoteLite.exe\",\n \"?:\\\\Users\\\\Public\\\\IBM\\\\ClientSolutions\\\\*.exe\",\n \"?:\\\\Users\\\\Public\\\\Documents\\\\syspin.exe\",\n \"?:\\\\Users\\\\Public\\\\res\\\\FileWatcher.exe\")\n /* uncomment once in winlogbeat */\n /* and not (process.code_signature.subject_name == \"Microsoft Corporation\" and process.code_signature.trusted == true) */\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ebfe1448-7fac-4d59-acea-181bd89b1f7f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.005", + "name": "Match Legitimate Name or Location", + "reference": "https://attack.mitre.org/techniques/T1036/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "ebfe1448-7fac-4d59-acea-181bd89b1f7f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ec8efb0c-604d-42fa-ac46-ed1cfbc38f78_105.json b/packages/security_detection_engine/kibana/security_rule/ec8efb0c-604d-42fa-ac46-ed1cfbc38f78_105.json new file mode 100644 index 00000000000..ef3d1aef62f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ec8efb0c-604d-42fa-ac46-ed1cfbc38f78_105.json @@ -0,0 +1,116 @@ +{ + "attributes": { + "author": [ + "Elastic", + "Gary Blackwell", + "Austin Songer" + ], + "description": "Identifies when a new Inbox forwarding rule is created in Microsoft 365. Inbox rules process messages in the Inbox based on conditions and take actions. In this case, the rules will forward the emails to a defined address. Attackers can abuse Inbox Rules to intercept and exfiltrate email data without making organization-wide configuration changes or having the corresponding privileges.", + "false_positives": [ + "Users and Administrators can create inbox rules for legitimate purposes. Verify if it complies with the company policy and done with the user's consent. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Inbox Forwarding Rule Created", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and\nevent.category:web and event.action:(\"New-InboxRule\" or \"Set-InboxRule\") and\n (\n o365.audit.Parameters.ForwardTo:* or\n o365.audit.Parameters.ForwardAsAttachmentTo:* or\n o365.audit.Parameters.RedirectTo:*\n )\n and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/responding-to-a-compromised-email-account?view=o365-worldwide", + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-inboxrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/detect-and-remediate-outlook-rules-forms-attack?view=o365-worldwide", + "https://raw.githubusercontent.com/PwC-IR/Business-Email-Compromise-Guide/main/Extractor%20Cheat%20Sheet.pdf" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.ForwardAsAttachmentTo", + "type": "unknown" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.ForwardTo", + "type": "unknown" + }, + { + "ecs": false, + "name": "o365.audit.Parameters.RedirectTo", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "ec8efb0c-604d-42fa-ac46-ed1cfbc38f78", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Collection" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0009", + "name": "Collection", + "reference": "https://attack.mitre.org/tactics/TA0009/" + }, + "technique": [ + { + "id": "T1114", + "name": "Email Collection", + "reference": "https://attack.mitre.org/techniques/T1114/", + "subtechnique": [ + { + "id": "T1114.003", + "name": "Email Forwarding Rule", + "reference": "https://attack.mitre.org/techniques/T1114/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "ec8efb0c-604d-42fa-ac46-ed1cfbc38f78_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eda499b8-a073-4e35-9733-22ec71f57f3a_110.json b/packages/security_detection_engine/kibana/security_rule/eda499b8-a073-4e35-9733-22ec71f57f3a_110.json new file mode 100644 index 00000000000..f1a9d9176cf --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eda499b8-a073-4e35-9733-22ec71f57f3a_110.json @@ -0,0 +1,139 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects the Active Directory query tool, AdFind.exe. AdFind has legitimate purposes, but it is frequently leveraged by threat actors to perform post-exploitation Active Directory reconnaissance. The AdFind tool has been observed in Trickbot, Ryuk, Maze, and FIN6 campaigns. For Winlogbeat, this rule requires Sysmon.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "AdFind Command Activity", + "note": "## Triage and analysis\n\n### Investigating AdFind Command Activity\n\n[AdFind](http://www.joeware.net/freetools/tools/adfind/) is a freely available command-line tool used to retrieve information from Active Directory (AD). Network discovery and enumeration tools like `AdFind` are useful to adversaries in the same ways they are effective for network administrators. This tool provides quick ability to scope AD person/computer objects and understand subnets and domain information. There are many [examples](https://thedfirreport.com/category/adfind/) of this tool being adopted by ransomware and criminal groups and used in compromises.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Examine the command line to determine what information was retrieved by the tool.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- This rule has a high chance to produce false positives as it is a legitimate tool used by network administrators.\n- If this rule is noisy in your environment due to expected activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- Malicious behavior with `AdFind` should be investigated as part of a step within an attack chain. It doesn't happen in isolation, so reviewing previous logs/activity from impacted machines can be very telling.\n\n### Related rules\n\n- Windows Network Enumeration - 7b8bfc26-81d2-435e-965c-d722ee397ef1\n- Enumeration of Administrator Accounts - 871ea072-1b71-4def-b016-6278b505138d\n- Enumeration Command Spawned via WMIPrvSE - 770e0c4d-b998-41e5-a62e-c7901fd7f470\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"AdFind.exe\" or ?process.pe.original_file_name == \"AdFind.exe\") and\n process.args : (\"objectcategory=computer\", \"(objectcategory=computer)\",\n \"objectcategory=person\", \"(objectcategory=person)\",\n \"objectcategory=subnet\", \"(objectcategory=subnet)\",\n \"objectcategory=group\", \"(objectcategory=group)\",\n \"objectcategory=organizationalunit\", \"(objectcategory=organizationalunit)\",\n \"objectcategory=attributeschema\", \"(objectcategory=attributeschema)\",\n \"domainlist\", \"dcmodes\", \"adinfo\", \"dclist\", \"computers_pwnotreqd\", \"trustdmp\")\n", + "references": [ + "http://www.joeware.net/freetools/tools/adfind/", + "https://thedfirreport.com/2020/05/08/adfind-recon/", + "https://www.fireeye.com/blog/threat-research/2020/05/tactics-techniques-procedures-associated-with-maze-ransomware-incidents.html", + "https://www.cybereason.com/blog/dropping-anchor-from-a-trickbot-infection-to-the-discovery-of-the-anchor-malware", + "https://www.fireeye.com/blog/threat-research/2019/04/pick-six-intercepting-a-fin6-intrusion.html", + "https://usa.visa.com/dam/VCOM/global/support-legal/documents/fin6-cybercrime-group-expands-threat-To-ecommerce-merchants.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "eda499b8-a073-4e35-9733-22ec71f57f3a", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1018", + "name": "Remote System Discovery", + "reference": "https://attack.mitre.org/techniques/T1018/" + }, + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.002", + "name": "Domain Groups", + "reference": "https://attack.mitre.org/techniques/T1069/002/" + } + ] + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.002", + "name": "Domain Account", + "reference": "https://attack.mitre.org/techniques/T1087/002/" + } + ] + }, + { + "id": "T1482", + "name": "Domain Trust Discovery", + "reference": "https://attack.mitre.org/techniques/T1482/" + }, + { + "id": "T1016", + "name": "System Network Configuration Discovery", + "reference": "https://attack.mitre.org/techniques/T1016/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "eda499b8-a073-4e35-9733-22ec71f57f3a_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/edf8ee23-5ea7-4123-ba19-56b41e424ae3_111.json b/packages/security_detection_engine/kibana/security_rule/edf8ee23-5ea7-4123-ba19-56b41e424ae3_111.json new file mode 100644 index 00000000000..34154c3c24e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/edf8ee23-5ea7-4123-ba19-56b41e424ae3_111.json @@ -0,0 +1,102 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies abuse of the Windows Update Auto Update Client (wuauclt.exe) to load an arbitrary DLL. This behavior is used as a defense evasion technique to blend-in malicious activity with legitimate Windows software.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "ImageLoad via Windows Update Auto Update Client", + "note": "## Triage and analysis\n\n### Investigating ImageLoad via Windows Update Auto Update Client\n\nThe Windows Update Auto Update Client (wuauclt.exe) is the component responsible for managing system updates. However, adversaries may abuse this process to load a malicious DLL and execute malicious code while blending into a legitimate system mechanism. \n\nThis rule identifies potential abuse for code execution by monitoring for specific process arguments (\"/RunHandlerComServer\" and \"/UpdateDeploymentProvider\") and common writable paths where the target DLL can be placed (e.g., \"C:\\Users\\*.dll\", \"C:\\ProgramData\\*.dll\", etc.).\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate any abnormal behavior by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the command line and identify the DLL location.\n- Examine whether the DLL is signed.\n- Retrieve the DLL and determine if it is malicious:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate the behavior of child processes, such as network connections, registry or file modifications, and any spawned processes.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (?process.pe.original_file_name == \"wuauclt.exe\" or process.name : \"wuauclt.exe\") and\n /* necessary windows update client args to load a dll */\n process.args : \"/RunHandlerComServer\" and process.args : \"/UpdateDeploymentProvider\" and\n /* common paths writeable by a standard user where the target DLL can be placed */\n process.args : (\"C:\\\\Users\\\\*.dll\", \"C:\\\\ProgramData\\\\*.dll\", \"C:\\\\Windows\\\\Temp\\\\*.dll\", \"C:\\\\Windows\\\\Tasks\\\\*.dll\")\n", + "references": [ + "https://dtm.uk/wuauclt/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "edf8ee23-5ea7-4123-ba19-56b41e424ae3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/" + } + ] + } + ], + "timeline_id": "e70679c2-6cde-4510-9764-4823df18f7db", + "timeline_title": "Comprehensive Process Timeline", + "timestamp_override": "event.ingested", + "type": "eql", + "version": 111 + }, + "id": "edf8ee23-5ea7-4123-ba19-56b41e424ae3_111", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/edfd5ca9-9d6c-44d9-b615-1e56b920219c_4.json b/packages/security_detection_engine/kibana/security_rule/edfd5ca9-9d6c-44d9-b615-1e56b920219c_4.json new file mode 100644 index 00000000000..438524525bc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/edfd5ca9-9d6c-44d9-b615-1e56b920219c_4.json @@ -0,0 +1,85 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies attempts to create new users. Attackers may add new users to establish persistence on a system.", + "from": "now-9m", + "index": [ + "logs-system.auth-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Linux User Account Creation", + "note": "## Triage and analysis\n\n### Investigating Linux User Account Creation\n\nThe `useradd` and `adduser` commands are used to create new user accounts in Linux-based operating systems.\n\nAttackers may create new accounts (both local and domain) to maintain access to victim systems.\n\nThis rule identifies the usage of `useradd` and `adduser` to create new accounts.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Investigate whether the user was created succesfully.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Identify if the account was added to privileged groups or assigned special privileges after creation.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific Group\",\"query\":\"SELECT * FROM groups WHERE groupname = {{group.name}}\"}}\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- Account creation is a common administrative task, so there is a high chance of the activity being legitimate. Before investigating further, verify that this activity is not benign.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Delete the created account.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "iam where host.os.type == \"linux\" and (event.type == \"user\" and event.type == \"creation\") and\nprocess.name in (\"useradd\", \"adduser\") and user.name != null\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "edfd5ca9-9d6c-44d9-b615-1e56b920219c", + "setup": "## Setup\n\nThis rule requires data coming in from Filebeat.\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the \u201cFilebeat System Module\u201d to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1136", + "name": "Create Account", + "reference": "https://attack.mitre.org/techniques/T1136/", + "subtechnique": [ + { + "id": "T1136.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1136/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 4 + }, + "id": "edfd5ca9-9d6c-44d9-b615-1e56b920219c_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ee5300a7-7e31-4a72-a258-250abb8b3aa1_107.json b/packages/security_detection_engine/kibana/security_rule/ee5300a7-7e31-4a72-a258-250abb8b3aa1_107.json new file mode 100644 index 00000000000..a7a85cab5af --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ee5300a7-7e31-4a72-a258-250abb8b3aa1_107.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects unusual Print Spooler service (spoolsv.exe) child processes. This may indicate an attempt to exploit privilege escalation vulnerabilities related to the Printing Service on Windows.", + "false_positives": [ + "Install or update of a legitimate printing driver. Verify the printer driver file metadata such as manufacturer and signature information." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Print Spooler Child Process", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"spoolsv.exe\" and process.command_line != null and \n (?process.Ext.token.integrity_level_name : \"System\" or ?winlog.event_data.IntegrityLevel : \"System\") and\n\n /* exclusions for FP control below */\n not process.name : (\"splwow64.exe\", \"PDFCreator.exe\", \"acrodist.exe\", \"spoolsv.exe\", \"msiexec.exe\", \"route.exe\", \"WerFault.exe\") and\n not process.command_line : \"*\\\\WINDOWS\\\\system32\\\\spool\\\\DRIVERS*\" and\n not (process.name : \"net.exe\" and process.command_line : (\"*stop*\", \"*start*\")) and\n not (process.name : (\"cmd.exe\", \"powershell.exe\") and process.command_line : (\"*.spl*\", \"*\\\\program files*\", \"*route add*\")) and\n not (process.name : \"netsh.exe\" and process.command_line : (\"*add portopening*\", \"*rule name*\")) and\n not (process.name : \"regsvr32.exe\" and process.command_line : \"*PrintConfig.dll*\") and\n not process.executable : (\n \"?:\\\\Program Files (x86)\\\\CutePDF Writer\\\\CPWriter2.exe\",\n \"?:\\\\Program Files (x86)\\\\GPLGS\\\\gswin32c.exe\"\n )\n", + "references": [ + "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.IntegrityLevel", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ee5300a7-7e31-4a72-a258-250abb8b3aa1", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "ee5300a7-7e31-4a72-a258-250abb8b3aa1_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/eea82229-b002-470e-a9e1-00be38b14d32_107.json b/packages/security_detection_engine/kibana/security_rule/eea82229-b002-470e-a9e1-00be38b14d32_107.json new file mode 100644 index 00000000000..b1bbd8e9858 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/eea82229-b002-470e-a9e1-00be38b14d32_107.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the use of sqlite3 to directly modify the Transparency, Consent, and Control (TCC) SQLite database. This may indicate an attempt to bypass macOS privacy controls, including access to sensitive resources like the system camera, microphone, address book, and calendar.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Privacy Control Bypass via TCCDB Modification", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name : \"sqlite*\" and\n process.args : \"/*/Application Support/com.apple.TCC/TCC.db\" and\n not process.parent.executable : \"/Library/Bitdefender/AVP/product/bin/*\"\n", + "references": [ + "https://applehelpwriter.com/2016/08/29/discovering-how-dropbox-hacks-your-mac/", + "https://github.com/bp88/JSS-Scripts/blob/master/TCC.db%20Modifier.sh", + "https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "eea82229-b002-470e-a9e1-00be38b14d32", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "eea82229-b002-470e-a9e1-00be38b14d32_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ef04a476-07ec-48fc-8f3d-5e1742de76d3_108.json b/packages/security_detection_engine/kibana/security_rule/ef04a476-07ec-48fc-8f3d-5e1742de76d3_108.json new file mode 100644 index 00000000000..7f6068a4797 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ef04a476-07ec-48fc-8f3d-5e1742de76d3_108.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects when the tc (transmission control) binary is utilized to set a BPF (Berkeley Packet Filter) on a network interface. Tc is used to configure Traffic Control in the Linux kernel. It can shape, schedule, police and drop traffic. A threat actor can utilize tc to set a bpf filter on an interface for the purpose of manipulating the incoming traffic. This technique is not at all common and should indicate abnormal, suspicious or malicious activity.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "BPF filter applied using TC", + "query": "process where host.os.type == \"linux\" and event.type != \"end\" and process.executable == \"/usr/sbin/tc\" and\nprocess.args == \"filter\" and process.args == \"add\" and process.args == \"bpf\" and\nnot process.parent.executable == \"/usr/sbin/libvirtd\"\n", + "references": [ + "https://github.com/h3xduck/TripleCross/blob/master/src/helpers/deployer.sh", + "https://man7.org/linux/man-pages/man8/tc.8.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "ef04a476-07ec-48fc-8f3d-5e1742de76d3", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Threat: TripleCross", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "ef04a476-07ec-48fc-8f3d-5e1742de76d3_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ef100a2e-ecd4-4f72-9d1e-2f779ff3c311_7.json b/packages/security_detection_engine/kibana/security_rule/ef100a2e-ecd4-4f72-9d1e-2f779ff3c311_7.json new file mode 100644 index 00000000000..5baa3c29fdb --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ef100a2e-ecd4-4f72-9d1e-2f779ff3c311_7.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of the mimipenguin exploit script which is linux adaptation of Windows tool mimikatz. Mimipenguin exploit script is used to dump clear text passwords from a currently logged-in user. The tool exploits a known vulnerability CVE-2018-20781. Malicious actors can exploit the cleartext credentials in memory by dumping the process and extracting lines that have a high probability of containing cleartext passwords.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Credential Dumping via Proc Filesystem", + "query": "sequence by host.id, process.parent.name with maxspan=1m\n [process where host.os.type == \"linux\" and process.name == \"ps\" and event.action == \"exec\"\n and process.args in (\"-eo\", \"pid\", \"command\")]\n [process where host.os.type == \"linux\" and process.name == \"strings\" and event.action == \"exec\"\n and process.args : \"/tmp/*\"]\n", + "references": [ + "https://github.com/huntergregal/mimipenguin", + "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20781" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ef100a2e-ecd4-4f72-9d1e-2f779ff3c311", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.007", + "name": "Proc Filesystem", + "reference": "https://attack.mitre.org/techniques/T1003/007/" + } + ] + }, + { + "id": "T1212", + "name": "Exploitation for Credential Access", + "reference": "https://attack.mitre.org/techniques/T1212/" + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "ef100a2e-ecd4-4f72-9d1e-2f779ff3c311_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ef862985-3f13-4262-a686-5f357bbb9bc2_110.json b/packages/security_detection_engine/kibana/security_rule/ef862985-3f13-4262-a686-5f357bbb9bc2_110.json new file mode 100644 index 00000000000..de92b4dcb52 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ef862985-3f13-4262-a686-5f357bbb9bc2_110.json @@ -0,0 +1,120 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious use of whoami.exe which displays user, group, and privileges information for the user who is currently logged on to the local system.", + "false_positives": [ + "Some normal use of this program, at varying levels of frequency, may originate from scripts, automation tools and frameworks. Usage by non-engineers and ordinary users is unusual." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "logs-system.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Whoami Process Activity", + "note": "## Triage and analysis\n\n### Investigating Whoami Process Activity\n\nAfter successfully compromising an environment, attackers may try to gain situational awareness to plan their next steps. This can happen by running commands to enumerate network resources, users, connections, files, and installed security software.\n\nThis rule looks for the execution of the `whoami` utility. Attackers commonly use this utility to measure their current privileges, discover the current user, determine if a privilege escalation was successful, etc.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal account behavior, such as command executions, file creations or modifications, and network connections.\n\n### False positive analysis\n\n- Discovery activities are not inherently malicious if they occur in isolation. As long as the analyst did not identify suspicious activity related to the user or host, such alerts can be dismissed.\n\n### Related rules\n\n- Account Discovery Command via SYSTEM Account - 2856446a-34e6-435b-9fb5-f8f040bfa7ed\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"whoami.exe\" and\n(\n (\n /* scoped for whoami execution under system privileges */\n (\n user.domain : (\"NT *\", \"* NT\", \"IIS APPPOOL\") and\n user.id : (\"S-1-5-18\", \"S-1-5-19\", \"S-1-5-20\", \"S-1-5-82-*\") and\n not ?winlog.event_data.SubjectUserName : \"*$\"\n ) and\n not (\n process.parent.name : \"cmd.exe\" and\n process.parent.args : (\n \"chcp 437>nul 2>&1 & C:\\\\WINDOWS\\\\System32\\\\whoami.exe /groups\",\n \"chcp 437>nul 2>&1 & %systemroot%\\\\system32\\\\whoami /user\",\n \"C:\\\\WINDOWS\\\\System32\\\\whoami.exe /groups\",\n \"*WINDOWS\\\\system32\\\\config\\\\systemprofile*\"\n )\n ) and\n not (process.parent.executable : \"C:\\\\Windows\\\\system32\\\\inetsrv\\\\appcmd.exe\" and process.parent.args : \"LIST\") and\n not process.parent.executable : (\n \"C:\\\\Program Files\\\\Microsoft Monitoring Agent\\\\Agent\\\\MonitoringHost.exe\",\n \"C:\\\\Program Files\\\\Cohesity\\\\cohesity_windows_agent_service.exe\"\n )\n ) or\n process.parent.name : (\"wsmprovhost.exe\", \"w3wp.exe\", \"wmiprvse.exe\", \"rundll32.exe\", \"regsvr32.exe\")\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.SubjectUserName", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "ef862985-3f13-4262-a686-5f357bbb9bc2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1033", + "name": "System Owner/User Discovery", + "reference": "https://attack.mitre.org/techniques/T1033/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "ef862985-3f13-4262-a686-5f357bbb9bc2_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ef8cc01c-fc49-4954-a175-98569c646740_3.json b/packages/security_detection_engine/kibana/security_rule/ef8cc01c-fc49-4954-a175-98569c646740_3.json new file mode 100644 index 00000000000..1edec5134a6 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ef8cc01c-fc49-4954-a175-98569c646740_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job has detected data exfiltration to a particular destination port. Data transfer patterns that are outside the normal traffic patterns of an organization could indicate exfiltration over command and control channels.", + "from": "now-6h", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "ded_high_sent_bytes_destination_port", + "name": "Potential Data Exfiltration Activity to an Unusual Destination Port", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/ded", + "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration" + ], + "related_integrations": [ + { + "package": "ded", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "risk_score": 21, + "rule_id": "ef8cc01c-fc49-4954-a175-98569c646740", + "setup": "## Setup\n\nThe rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only). \n\n### Data Exfiltration Detection Setup\nThe Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature. \n\n#### Prerequisite Requirements:\n- Fleet is required for Data Exfiltration Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n\n#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.\n- Under Settings, click Install Data Exfiltration Detection assets and follow the prompts to install the assets.\n\n#### Anomaly Detection Setup\nBefore you can enable rules for Data Exfiltration Detection, you'll need to enable the corresponding Anomaly Detection jobs. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your network data. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `logs-network_traffic.*` if you used Network Packet Capture.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/ded/kibana/ml_module/ded-ml.json) configuration file, you will see a card for Data Exfiltration Detection under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection jobs and datafeeds.\n", + "severity": "low", + "tags": [ + "Use Case: Data Exfiltration Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "ef8cc01c-fc49-4954-a175-98569c646740_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f036953a-4615-4707-a1ca-dc53bf69dcd5_107.json b/packages/security_detection_engine/kibana/security_rule/f036953a-4615-4707-a1ca-dc53bf69dcd5_107.json new file mode 100644 index 00000000000..6ebcffcebae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f036953a-4615-4707-a1ca-dc53bf69dcd5_107.json @@ -0,0 +1,111 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies child processes of unusual instances of RunDLL32 where the command line parameters were suspicious. Misuse of RunDLL32 could indicate malicious activity.", + "from": "now-60m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "interval": "30m", + "language": "eql", + "license": "Elastic License v2", + "name": "Unusual Child Processes of RunDLL32", + "note": "## Triage and analysis\n\n### Investigating Unusual Child Processes of RunDLL32\n\nBy examining the specific traits of Windows binaries -- such as process trees, command lines, network connections, registry modifications, and so on -- it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity, such as masquerading and deserve further investigation.\n\nRunDLL32 is a legitimate Windows utility used to load and execute functions within dynamic-link libraries (DLLs). However, adversaries may abuse RunDLL32 to execute malicious code, bypassing security measures and evading detection. This rule identifies potential abuse by looking for an unusual process creation with no arguments followed by the creation of a child process.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process, such as network connections, registry or file modifications, and any spawned child processes.\n- Investigate the behavior of child processes, such as network connections, registry or file modifications, and any spawned processes.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related Rules\n\n- Unusual Network Connection via RunDLL32 - 52aaab7b-b51c-441a-89ce-4387b3aea886\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence with maxspan=1h\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n (process.name : \"rundll32.exe\" or process.pe.original_file_name == \"RUNDLL32.EXE\") and\n process.args_count == 1\n ] by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"rundll32.exe\"\n ] by process.parent.entity_id\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f036953a-4615-4707-a1ca-dc53bf69dcd5", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.011", + "name": "Rundll32", + "reference": "https://attack.mitre.org/techniques/T1218/011/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "f036953a-4615-4707-a1ca-dc53bf69dcd5_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f0493cb4-9b15-43a9-9359-68c23a7f2cf3_106.json b/packages/security_detection_engine/kibana/security_rule/f0493cb4-9b15-43a9-9359-68c23a7f2cf3_106.json new file mode 100644 index 00000000000..f382d7b6e4c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f0493cb4-9b15-43a9-9359-68c23a7f2cf3_106.json @@ -0,0 +1,140 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of a browser process to open an HTML file with high entropy and size. Adversaries may smuggle data and files past content filters by hiding malicious payloads inside of seemingly benign HTML files.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious HTML File Creation", + "query": "sequence by user.id with maxspan=5m\n [file where host.os.type == \"windows\" and event.action in (\"creation\", \"rename\") and\n file.extension : (\"htm\", \"html\") and\n file.path : (\"?:\\\\Users\\\\*\\\\Downloads\\\\*\",\n \"?:\\\\Users\\\\*\\\\Content.Outlook\\\\*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\Temp?_*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\7z*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\Rar$*\") and\n ((file.Ext.entropy >= 5 and file.size >= 150000) or file.size >= 1000000)]\n [process where host.os.type == \"windows\" and event.action == \"start\" and\n (\n (process.name in (\"chrome.exe\", \"msedge.exe\", \"brave.exe\", \"whale.exe\", \"browser.exe\", \"dragon.exe\", \"vivaldi.exe\", \"opera.exe\")\n and process.args == \"--single-argument\") or\n (process.name == \"iexplore.exe\" and process.args_count == 2) or\n (process.name in (\"firefox.exe\", \"waterfox.exe\") and process.args == \"-url\")\n )\n and process.args : (\"?:\\\\Users\\\\*\\\\Downloads\\\\*.htm*\",\n \"?:\\\\Users\\\\*\\\\Content.Outlook\\\\*.htm*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\Temp?_*.htm*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\7z*.htm*\",\n \"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\Rar$*.htm*\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": false, + "name": "file.Ext.entropy", + "type": "unknown" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.size", + "type": "long" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f0493cb4-9b15-43a9-9359-68c23a7f2cf3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + }, + { + "id": "T1566.002", + "name": "Spearphishing Link", + "reference": "https://attack.mitre.org/techniques/T1566/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1027", + "name": "Obfuscated Files or Information", + "reference": "https://attack.mitre.org/techniques/T1027/", + "subtechnique": [ + { + "id": "T1027.006", + "name": "HTML Smuggling", + "reference": "https://attack.mitre.org/techniques/T1027/006/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 106 + }, + "id": "f0493cb4-9b15-43a9-9359-68c23a7f2cf3_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7_107.json b/packages/security_detection_engine/kibana/security_rule/f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7_107.json new file mode 100644 index 00000000000..bf782a9c5ae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7_107.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a potential Gatekeeper bypass. In macOS, when applications or programs are downloaded from the internet, there is a quarantine flag set on the file. This attribute is read by Apple's Gatekeeper defense program at execution time. An adversary may disable this attribute to evade defenses.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Attempt to Remove File Quarantine Attribute", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and\n process.name : \"xattr\" and\n (\n (process.args : \"com.apple.quarantine\" and process.args : (\"-d\", \"-w\")) or\n (process.args : \"-c\") or\n (process.command_line : (\"/bin/bash -c xattr -c *\", \"/bin/zsh -c xattr -c *\", \"/bin/sh -c xattr -c *\"))\n ) and not process.args_count > 12\n", + "references": [ + "https://www.trendmicro.com/en_us/research/20/k/new-macos-backdoor-connected-to-oceanlotus-surfaces.html", + "https://ss64.com/osx/xattr.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "f0b48bbc-549e-4bcf-8ee0-a7a72586c6a7_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f0eb70e9-71e9-40cd-813f-bf8e8c812cb1_106.json b/packages/security_detection_engine/kibana/security_rule/f0eb70e9-71e9-40cd-813f-bf8e8c812cb1_106.json new file mode 100644 index 00000000000..e03bac68f9e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f0eb70e9-71e9-40cd-813f-bf8e8c812cb1_106.json @@ -0,0 +1,114 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies execution of the security_authtrampoline process via a scripting interpreter. This occurs when programs use AuthorizationExecute-WithPrivileges from the Security.framework to run another program with root privileges. It should not be run by itself, as this is a sign of execution with explicit logon credentials.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Execution with Explicit Credentials via Scripting", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:\"security_authtrampoline\" and\n process.parent.name:(osascript or com.apple.automator.runner or sh or bash or dash or zsh or python* or Python or perl* or php* or ruby or pwsh)\n", + "references": [ + "https://objectivebythesea.com/v2/talks/OBTS_v2_Thomas.pdf", + "https://www.manpagez.com/man/8/security_authtrampoline/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f0eb70e9-71e9-40cd-813f-bf8e8c812cb1", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1078", + "name": "Valid Accounts", + "reference": "https://attack.mitre.org/techniques/T1078/" + }, + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.004", + "name": "Elevated Execution with Prompt", + "reference": "https://attack.mitre.org/techniques/T1548/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "f0eb70e9-71e9-40cd-813f-bf8e8c812cb1_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7.json b/packages/security_detection_engine/kibana/security_rule/f16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7.json new file mode 100644 index 00000000000..97e224e2743 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious commands executed via a web server, which may suggest a vulnerability and remote shell access. Attackers may exploit a vulnerability in a web application to execute commands via a web server, or place a backdoor file that can be abused to gain code execution as a mechanism for persistence.", + "false_positives": [ + "Network monitoring or management products may have a web server component that runs shell commands as part of normal behavior." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Remote Code Execution via Web Server", + "note": "## Triage and analysis\n\n### Investigating Potential Remote Code Execution via Web Server\n\nAdversaries may backdoor web servers with web shells to establish persistent access to systems. A web shell is a malicious script, often embedded into a compromised web server, that grants an attacker remote access and control over the server. This enables the execution of arbitrary commands, data exfiltration, and further exploitation of the target network.\n\nThis rule detects a web server process spawning script and command line interface programs, potentially indicating attackers executing commands using the web shell.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Investigate abnormal behaviors by the subject process such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential reverse shells or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Investigate the process information for malicious or uncommon processes/process trees.\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n - Investigate the process tree spawned from the user that is used to run the web application service. A user that is running a web application should not spawn other child processes.\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info for Webapp User\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes WHERE uid = {{process.user.id}}\"}}\n- Examine the command line to determine which commands or scripts were executed.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and\nevent.action in (\"exec\", \"exec_event\") and process.parent.executable : (\n \"/usr/sbin/nginx\", \"/usr/local/sbin/nginx\",\n \"/usr/sbin/apache\", \"/usr/local/sbin/apache\",\n \"/usr/sbin/apache2\", \"/usr/local/sbin/apache2\",\n \"/usr/sbin/php*\", \"/usr/local/sbin/php*\",\n \"/usr/sbin/lighttpd\", \"/usr/local/sbin/lighttpd\",\n \"/usr/sbin/hiawatha\", \"/usr/local/sbin/hiawatha\",\n \"/usr/local/bin/caddy\", \n \"/usr/local/lsws/bin/lswsctrl\",\n \"*/bin/catalina.sh\"\n) and\nprocess.name : (\n \"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\",\n \"netcat\", \"ncat\", \"telnet\", \"awk\", \"socat\"\n ) and process.args : (\n \"whoami\", \"id\", \"uname\", \"cat\", \"hostname\", \"ip\", \"curl\", \"wget\", \"pwd\", \"ls\", \"cd\", \"python*\", \"php*\", \"perl\",\n \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\", \"socat\"\n ) and not process.name == \"phpquery\"\n", + "references": [ + "https://pentestlab.blog/tag/web-shell/", + "https://www.elastic.co/security-labs/elastic-response-to-the-the-spring4shell-vulnerability-cve-2022-22965" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f16fca20-4d6c-43f9-aec1-20b6de3b0aeb", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Initial Access", + "Data Source: Elastic Endgame", + "Use Case: Vulnerability", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1505", + "name": "Server Software Component", + "reference": "https://attack.mitre.org/techniques/T1505/", + "subtechnique": [ + { + "id": "T1505.003", + "name": "Web Shell", + "reference": "https://attack.mitre.org/techniques/T1505/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "f16fca20-4d6c-43f9-aec1-20b6de3b0aeb_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f24bcae1-8980-4b30-b5dd-f851b055c9e7_108.json b/packages/security_detection_engine/kibana/security_rule/f24bcae1-8980-4b30-b5dd-f851b055c9e7_108.json new file mode 100644 index 00000000000..0965938c463 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f24bcae1-8980-4b30-b5dd-f851b055c9e7_108.json @@ -0,0 +1,115 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the execution of osascript to create a hidden login item. This may indicate an attempt to persist a malicious program while concealing its presence.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Creation of Hidden Login Item via Apple Script", + "query": "process where host.os.type == \"macos\" and event.type in (\"start\", \"process_started\") and process.name : \"osascript\" and\n process.command_line : \"osascript*login item*hidden:true*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f24bcae1-8980-4b30-b5dd-f851b055c9e7", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.002", + "name": "AppleScript", + "reference": "https://attack.mitre.org/techniques/T1059/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1647", + "name": "Plist File Modification", + "reference": "https://attack.mitre.org/techniques/T1647/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "f24bcae1-8980-4b30-b5dd-f851b055c9e7_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f28e2be4-6eca-4349-bdd9-381573730c22_109.json b/packages/security_detection_engine/kibana/security_rule/f28e2be4-6eca-4349-bdd9-381573730c22_109.json new file mode 100644 index 00000000000..deb702bb3f8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f28e2be4-6eca-4349-bdd9-381573730c22_109.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a Secure Shell (SSH) client or server process creating or writing to a known SSH backdoor log file. Adversaries may modify SSH related binaries for persistence or credential access via patching sensitive functions to enable unauthorized access or to log SSH credentials for exfiltration.", + "false_positives": [ + "Updates to approved and trusted SSH executables can trigger this rule." + ], + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential OpenSSH Backdoor Logging Activity", + "query": "file where host.os.type == \"linux\" and event.type == \"change\" and process.executable : (\"/usr/sbin/sshd\", \"/usr/bin/ssh\") and\n (\n (file.name : (\".*\", \"~*\", \"*~\") and not file.name : (\".cache\", \".viminfo\", \".bash_history\", \".google_authenticator\",\n \".jelenv\", \".csvignore\", \".rtreport\")) or\n file.extension : (\"in\", \"out\", \"ini\", \"h\", \"gz\", \"so\", \"sock\", \"sync\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\") or\n file.path :\n (\n \"/private/etc/*--\",\n \"/usr/share/*\",\n \"/usr/include/*\",\n \"/usr/local/include/*\",\n \"/private/tmp/*\",\n \"/private/var/tmp/*\",\n \"/usr/tmp/*\",\n \"/usr/share/man/*\",\n \"/usr/local/share/*\",\n \"/usr/lib/*.so.*\",\n \"/private/etc/ssh/.sshd_auth\",\n \"/usr/bin/ssd\",\n \"/private/var/opt/power\",\n \"/private/etc/ssh/ssh_known_hosts\",\n \"/private/var/html/lol\",\n \"/private/var/log/utmp\",\n \"/private/var/lib\",\n \"/var/run/sshd/sshd.pid\",\n \"/var/run/nscd/ns.pid\",\n \"/var/run/udev/ud.pid\",\n \"/var/run/udevd.pid\"\n )\n )\n", + "references": [ + "https://github.com/eset/malware-ioc/tree/master/sshdoor", + "https://www.welivesecurity.com/wp-content/uploads/2021/01/ESET_Kobalos.pdf" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f28e2be4-6eca-4349-bdd9-381573730c22", + "setup": "## Setup\n\nThis rule requires data coming in from one of the following integrations:\n- Elastic Defend\n- Auditbeat\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\n### Auditbeat Setup\nAuditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.\n\n#### The following steps should be executed in order to add the Auditbeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).\n- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).\n- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).\n- For complete \u201cSetup and Run Auditbeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).\n\n#### Custom Ingest Pipeline\nFor versions <8.2, you need to add a custom ingest pipeline to populate `event.ingested` with @timestamp for non-elastic-agent indexes, like auditbeats/filebeat/winlogbeat etc. For more details to add a custom ingest pipeline refer to the [guide](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1556", + "name": "Modify Authentication Process", + "reference": "https://attack.mitre.org/techniques/T1556/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1554", + "name": "Compromise Client Software Binary", + "reference": "https://attack.mitre.org/techniques/T1554/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "f28e2be4-6eca-4349-bdd9-381573730c22_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f2c7b914-eda3-40c2-96ac-d23ef91776ca_106.json b/packages/security_detection_engine/kibana/security_rule/f2c7b914-eda3-40c2-96ac-d23ef91776ca_106.json new file mode 100644 index 00000000000..4c4a818d1be --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f2c7b914-eda3-40c2-96ac-d23ef91776ca_106.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications to the registered Subject Interface Package (SIP) providers. SIP providers are used by the Windows cryptographic system to validate file signatures on the system. This may be an attempt to bypass signature validation checks or inject code into critical processes.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "SIP Provider Modification", + "query": "registry where host.os.type == \"windows\" and event.type:\"change\" and\n registry.path: (\n \"*\\\\SOFTWARE\\\\Microsoft\\\\Cryptography\\\\OID\\\\EncodingType 0\\\\CryptSIPDllPutSignedDataMsg\\\\{*}\\\\Dll\",\n \"*\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Cryptography\\\\OID\\\\EncodingType 0\\\\CryptSIPDllPutSignedDataMsg\\\\{*}\\\\Dll\",\n \"*\\\\SOFTWARE\\\\Microsoft\\\\Cryptography\\\\Providers\\\\Trust\\\\FinalPolicy\\\\{*}\\\\$Dll\",\n \"*\\\\SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Cryptography\\\\Providers\\\\Trust\\\\FinalPolicy\\\\{*}\\\\$Dll\"\n ) and\n registry.data.strings:\"*.dll\"\n", + "references": [ + "https://github.com/mattifestation/PoCSubjectInterfacePackage" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f2c7b914-eda3-40c2-96ac-d23ef91776ca", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1553", + "name": "Subvert Trust Controls", + "reference": "https://attack.mitre.org/techniques/T1553/", + "subtechnique": [ + { + "id": "T1553.003", + "name": "SIP and Trust Provider Hijacking", + "reference": "https://attack.mitre.org/techniques/T1553/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 106 + }, + "id": "f2c7b914-eda3-40c2-96ac-d23ef91776ca_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f2f46686-6f3c-4724-bd7d-24e31c70f98f_108.json b/packages/security_detection_engine/kibana/security_rule/f2f46686-6f3c-4724-bd7d-24e31c70f98f_108.json new file mode 100644 index 00000000000..9ec7370deb7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f2f46686-6f3c-4724-bd7d-24e31c70f98f_108.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of a Local Security Authority Subsystem Service (lsass.exe) default memory dump. This may indicate a credential access attempt via trusted system utilities such as Task Manager (taskmgr.exe) and SQL Dumper (sqldumper.exe) or known pentesting tools such as Dumpert and AndrewSpecial.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "LSASS Memory Dump Creation", + "note": "## Triage and analysis\n\n### Investigating LSASS Memory Dump Creation\n\nLocal Security Authority Server Service (LSASS) is a process in Microsoft Windows operating systems that is responsible for enforcing security policy on the system. It verifies users logging on to a Windows computer or server, handles password changes, and creates access tokens.\n\nThis rule looks for the creation of memory dump files with file names compatible with credential dumping tools or that start with `lsass`.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Identify the process responsible for creating the dump file.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Any activity that triggered the alert and is not inherently malicious must be monitored by the security team.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.action != \"deletion\" and\n file.name : (\"lsass*.dmp\", \"dumpert.dmp\", \"Andrew.dmp\", \"SQLDmpr*.mdmp\", \"Coredump.dmp\") and\n\n not (\n process.executable : (\n \"?:\\\\Program Files\\\\Microsoft SQL Server\\\\*\\\\Shared\\\\SqlDumper.exe\",\n \"?:\\\\Windows\\\\System32\\\\dllhost.exe\"\n ) and\n file.path : (\n \"?:\\\\*\\\\Reporting Services\\\\Logfiles\\\\SQLDmpr*.mdmp\",\n \"?:\\\\Program Files\\\\Microsoft SQL Server\\\\*\\\\Shared\\\\ErrorDumps\\\\SQLDmpr*.mdmp\",\n \"?:\\\\Program Files\\\\Microsoft SQL Server\\\\*\\\\MSSQL\\\\LOG\\\\SQLDmpr*.mdmp\"\n )\n ) and\n\n not (\n process.executable : \"?:\\\\Windows\\\\system32\\\\WerFault.exe\" and\n file.path : (\n \"?:\\\\Windows\\\\System32\\\\config\\\\systemprofile\\\\AppData\\\\Local\\\\CrashDumps\\\\lsass.exe.*.dmp\",\n \"?:\\\\Windows\\\\System32\\\\%LOCALAPPDATA%\\\\CrashDumps\\\\lsass.exe.*.dmp\"\n )\n )\n", + "references": [ + "https://github.com/outflanknl/Dumpert", + "https://github.com/hoangprod/AndrewSpecial" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f2f46686-6f3c-4724-bd7d-24e31c70f98f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/", + "subtechnique": [ + { + "id": "T1003.001", + "name": "LSASS Memory", + "reference": "https://attack.mitre.org/techniques/T1003/001/" + } + ] + } + ] + } + ], + "timeline_id": "4d4c0b59-ea83-483f-b8c1-8c360ee53c5c", + "timeline_title": "Comprehensive File Timeline", + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "f2f46686-6f3c-4724-bd7d-24e31c70f98f_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f3403393-1fd9-4686-8f6e-596c58bc00b4_3.json b/packages/security_detection_engine/kibana/security_rule/f3403393-1fd9-4686-8f6e-596c58bc00b4_3.json new file mode 100644 index 00000000000..d75c188a6cc --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f3403393-1fd9-4686-8f6e-596c58bc00b4_3.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "A supervised machine learning model has identified a DNS question name that is predicted to be the result of a Domain Generation Algorithm (DGA), which could indicate command and control network activity.", + "from": "now-10m", + "index": [ + "logs-endpoint.events.*", + "logs-network_traffic.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Machine Learning Detected a DNS Request Predicted to be a DGA Domain", + "query": "ml_is_dga.malicious_prediction:1 and not dns.question.registered_domain:avsvmcloud.com\n", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/dga", + "https://www.elastic.co/security-labs/detect-domain-generation-algorithm-activity-with-new-kibana-integration" + ], + "related_integrations": [ + { + "package": "dga", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "dns.question.registered_domain", + "type": "keyword" + }, + { + "ecs": false, + "name": "ml_is_dga.malicious_prediction", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "f3403393-1fd9-4686-8f6e-596c58bc00b4", + "setup": "## Setup\n\nThe rule requires the Domain Generation Algorithm (DGA) Detection integration assets to be installed, as well as DNS events collected by integrations such as Elastic Defend, Network Packet Capture, or Packetbeat. \n\n### DGA Detection Setup\nThe DGA Detection integration consists of an ML-based framework to detect DGA activity in DNS events.\n\n#### Prerequisite Requirements:\n- Fleet is required for DGA Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- DNS events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint), [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration, or [Packetbeat](https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n- To set up and run Packetbeat, follow [this](https://www.elastic.co/guide/en/beats/packetbeat/current/setting-up-and-running.html) guide.\n\n#### The following steps should be executed to install assets associated with the DGA Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Domain Generation Algorithm Detection and select the integration to see more details about it.\n- Under Settings, click Install Domain Generation Algorithm Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich DNS events with predictions from the Supervised DGA Detection model. This is done via the ingest pipeline named `-ml_dga_ingest_pipeline` installed with the DGA Detection package.\n- If using an Elastic Beat such as Packetbeat, add the DGA ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `packetbeat.yml`.\n- If adding the DGA ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the DGA ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"ml_is_dga\": {\n \"properties\": {\n \"malicious_prediction\": {\n \"type\": \"long\"\n },\n \"malicious_probability\": {\n \"type\": \"float\"\n }\n }\n }\n }\n}\n```\n", + "severity": "low", + "tags": [ + "Domain: Network", + "Domain: Endpoint", + "Data Source: Elastic Defend", + "Use Case: Domain Generation Algorithm Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1568", + "name": "Dynamic Resolution", + "reference": "https://attack.mitre.org/techniques/T1568/", + "subtechnique": [ + { + "id": "T1568.002", + "name": "Domain Generation Algorithms", + "reference": "https://attack.mitre.org/techniques/T1568/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 3 + }, + "id": "f3403393-1fd9-4686-8f6e-596c58bc00b4_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f3475224-b179-4f78-8877-c2bd64c26b88_109.json b/packages/security_detection_engine/kibana/security_rule/f3475224-b179-4f78-8877-c2bd64c26b88_109.json new file mode 100644 index 00000000000..bc53c70c18e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f3475224-b179-4f78-8877-c2bd64c26b88_109.json @@ -0,0 +1,147 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies processes executed via Windows Management Instrumentation (WMI) on a remote host. This could be indicative of adversary lateral movement, but could be noisy if administrators use WMI to remotely manage hosts.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "WMI Incoming Lateral Movement", + "query": "sequence by host.id with maxspan = 2s\n\n /* Accepted Incoming RPC connection by Winmgmt service */\n\n [network where host.os.type == \"windows\" and process.name : \"svchost.exe\" and network.direction : (\"incoming\", \"ingress\") and\n source.ip != \"127.0.0.1\" and source.ip != \"::1\" and source.port >= 49152 and destination.port >= 49152\n ]\n\n /* Excluding Common FPs Nessus and SCCM */\n\n [process where host.os.type == \"windows\" and event.type == \"start\" and process.parent.name : \"WmiPrvSE.exe\" and\n not (?process.Ext.token.integrity_level_name : \"System\" or ?winlog.event_data.IntegrityLevel : \"System\") and\n not user.id : (\"S-1-5-18\", \"S-1-5-19\", \"S-1-5-20\") and\n not process.executable :\n (\"?:\\\\Program Files\\\\HPWBEM\\\\Tools\\\\hpsum_swdiscovery.exe\",\n \"?:\\\\Windows\\\\CCM\\\\Ccm32BitLauncher.exe\",\n \"?:\\\\Windows\\\\System32\\\\wbem\\\\mofcomp.exe\",\n \"?:\\\\Windows\\\\Microsoft.NET\\\\Framework*\\\\csc.exe\",\n \"?:\\\\Windows\\\\System32\\\\powercfg.exe\") and\n not (process.executable : \"?:\\\\Windows\\\\System32\\\\msiexec.exe\" and process.args : \"REBOOT=ReallySuppress\") and\n not (process.executable : \"?:\\\\Windows\\\\System32\\\\inetsrv\\\\appcmd.exe\" and process.args : \"uninstall\")\n ]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.direction", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "source.port", + "type": "long" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.IntegrityLevel", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f3475224-b179-4f78-8877-c2bd64c26b88", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1047", + "name": "Windows Management Instrumentation", + "reference": "https://attack.mitre.org/techniques/T1047/" + } + ] + } + ], + "type": "eql", + "version": 109 + }, + "id": "f3475224-b179-4f78-8877-c2bd64c26b88_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f3818c85-2207-4b51-8a28-d70fb156ee87_2.json b/packages/security_detection_engine/kibana/security_rule/f3818c85-2207-4b51-8a28-d70fb156ee87_2.json new file mode 100644 index 00000000000..7513bfd51d8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f3818c85-2207-4b51-8a28-d70fb156ee87_2.json @@ -0,0 +1,128 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects suspicious network events executed by systemd, potentially indicating persistence through a systemd backdoor. Systemd is a system and service manager for Linux operating systems, used to initialize and manage system processes. Attackers can backdoor systemd for persistence by creating or modifying systemd unit files to execute malicious scripts or commands, or by replacing legitimate systemd binaries with compromised ones, ensuring that their malicious code is automatically executed at system startup or during certain system events.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Network Connection via systemd", + "query": "sequence by host.id with maxspan=5s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.parent.name == \"systemd\" and process.name in (\n \"python*\", \"php*\", \"perl\", \"ruby\", \"lua*\", \"openssl\", \"nc\", \"netcat\", \"ncat\", \"telnet\", \"awk\"\n )\n ] by process.entity_id\n [network where host.os.type == \"linux\" and event.action == \"connection_attempted\" and event.type == \"start\"\n ] by process.parent.entity_id\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f3818c85-2207-4b51-8a28-d70fb156ee87", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Command and Control", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1543", + "name": "Create or Modify System Process", + "reference": "https://attack.mitre.org/techniques/T1543/", + "subtechnique": [ + { + "id": "T1543.002", + "name": "Systemd Service", + "reference": "https://attack.mitre.org/techniques/T1543/002/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [] + } + ], + "type": "eql", + "version": 2 + }, + "id": "f3818c85-2207-4b51-8a28-d70fb156ee87_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f3e22c8b-ea47-45d1-b502-b57b6de950b3_6.json b/packages/security_detection_engine/kibana/security_rule/f3e22c8b-ea47-45d1-b502-b57b6de950b3_6.json new file mode 100644 index 00000000000..a71ee1d3b5f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f3e22c8b-ea47-45d1-b502-b57b6de950b3_6.json @@ -0,0 +1,137 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule is triggered when a URL indicator from the Threat Intel Filebeat module or integrations has a match against an event that contains URL data, like DNS events, network logs, etc.", + "from": "now-65m", + "index": [ + "auditbeat-*", + "endgame-*", + "filebeat-*", + "logs-*", + "packetbeat-*", + "winlogbeat-*" + ], + "interval": "1h", + "language": "kuery", + "license": "Elastic License v2", + "name": "Threat Intel URL Indicator Match", + "note": "## Triage and Analysis\n\n### Investigating Threat Intel URL Indicator Match\n\nThreat Intel indicator match rules allow matching from a local observation, such as an endpoint event that records a file hash with an entry of a file hash stored within the Threat Intel integrations index.\n\nMatches are based on threat intelligence data that's been ingested during the last 30 days. Some integrations don't place expiration dates on their threat indicators, so we strongly recommend validating ingested threat indicators and reviewing match results. When reviewing match results, check associated activity to determine whether the event requires additional investigation.\n\nThis rule is triggered when a URL indicator from the Threat Intel Filebeat module or a threat intelligence integration matches against an event that contains URL data, like DNS events, network logs, etc.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the URL, which can be found in the `threat.indicator.matched.atomic` field:\n - Identify the type of malicious activity related to the URL (phishing, malware, etc.).\n - Check the reputation of the IP address in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n - Execute a WHOIS lookup to retrieve information about the domain registration and contacts to report abuse.\n - If dealing with a phishing incident:\n - Contact the user to gain more information around the delivery method, information sent, etc.\n - Analyze whether the URL is trying to impersonate a legitimate address. Look for typosquatting, extra or unusual subdomains, or other anomalies that could lure the user.\n - Investigate the phishing page to identify which information may have been sent to the attacker by the user.\n- Identify the process responsible for the connection, and investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Retrieve the involved process executable and examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Using the data collected through the analysis, scope users targeted and other machines infected in the environment.\n\n### False Positive Analysis\n\n- False positives might occur after large and publicly written campaigns if curious employees interact with attacker infrastructure.\n- Some feeds may include internal or known benign addresses by mistake (e.g., 8.8.8.8, google.com, 127.0.0.1, etc.). Make sure you understand how blocking a specific domain or address might impact the organization or normal system functioning.\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Consider reporting the address for abuse using the provided contact information.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "url.full:*\n", + "references": [ + "https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-threatintel.html", + "https://www.elastic.co/guide/en/security/master/es-threat-intel-integrations.html", + "https://www.elastic.co/security/tip" + ], + "required_fields": [ + { + "ecs": true, + "name": "url.full", + "type": "wildcard" + } + ], + "risk_score": 99, + "rule_id": "f3e22c8b-ea47-45d1-b502-b57b6de950b3", + "setup": "## Setup\n\nThis rule needs threat intelligence indicators to work.\nThreat intelligence indicators can be collected using an [Elastic Agent integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#agent-ti-integration),\nthe [Threat Intel module](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#ti-mod-integration),\nor a [custom integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#custom-ti-integration).\n\nMore information can be found [here](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html).\n", + "severity": "critical", + "tags": [ + "OS: Windows", + "Data Source: Elastic Endgame", + "Rule Type: Indicator Match" + ], + "threat_filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.category", + "negate": false, + "params": { + "query": "threat" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.category": "threat" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.kind", + "negate": false, + "params": { + "query": "enrichment" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.kind": "enrichment" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "disabled": false, + "key": "event.type", + "negate": false, + "params": { + "query": "indicator" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.type": "indicator" + } + } + } + ], + "threat_index": [ + "filebeat-*", + "logs-ti_*" + ], + "threat_indicator_path": "threat.indicator", + "threat_language": "kuery", + "threat_mapping": [ + { + "entries": [ + { + "field": "url.full", + "type": "mapping", + "value": "threat.indicator.url.full" + } + ] + }, + { + "entries": [ + { + "field": "url.original", + "type": "mapping", + "value": "threat.indicator.url.original" + } + ] + } + ], + "threat_query": "@timestamp >= \"now-30d/d\" and event.module:(threatintel or ti_*) and threat.indicator.url.full:* and not labels.is_ioc_transform_source:\"true\"", + "timeline_id": "495ad7a7-316e-4544-8a0f-9c098daee76e", + "timeline_title": "Generic Threat Match Timeline", + "timestamp_override": "event.ingested", + "type": "threat_match", + "version": 6 + }, + "id": "f3e22c8b-ea47-45d1-b502-b57b6de950b3_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f41296b4-9975-44d6-9486-514c6f635b2d_5.json b/packages/security_detection_engine/kibana/security_rule/f41296b4-9975-44d6-9486-514c6f635b2d_5.json new file mode 100644 index 00000000000..095c1e29732 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f41296b4-9975-44d6-9486-514c6f635b2d_5.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects potential exploitation of curl CVE-2023-38545 by monitoring for vulnerable command line arguments in conjunction with an unusual command line length. A flaw in curl version <= 8.3 makes curl vulnerable to a heap based buffer overflow during the SOCKS5 proxy handshake. Upgrade to curl version >= 8.4 to patch this vulnerability. This exploit can be executed with and without the use of environment variables. For increased visibility, enable the collection of http_proxy, HTTPS_PROXY and ALL_PROXY environment variables based on the instructions provided in the setup guide of this rule.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential curl CVE-2023-38545 Exploitation", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and process.name == \"curl\" \nand (\n process.args : (\"--socks5-hostname\", \"--proxy\", \"--preproxy\", \"socks5*\") or \n process.env_vars: (\"http_proxy=socks5h://*\", \"HTTPS_PROXY=socks5h://*\", \"ALL_PROXY=socks5h://*\")\n) and length(process.command_line) > 255 and \nnot process.parent.name in (\"cf-agent\", \"agent-run\", \"agent-check\", \"rudder\", \"agent-inventory\", \"cf-execd\") and\nnot process.args == \"/opt/rudder/bin/curl\"\n", + "references": [ + "https://curl.se/docs/CVE-2023-38545.html", + "https://daniel.haxx.se/blog/2023/10/11/curl-8-4-0/", + "https://twitter.com/_JohnHammond/status/1711986412554531015" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.env_vars", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f41296b4-9975-44d6-9486-514c6f635b2d", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n\nElastic Defend integration does not collect environment variable logging by default.\nIn order to capture this behavior, this rule requires a specific configuration option set within the advanced settings of the Elastic Defend integration.\n #### To set up environment variable capture for an Elastic Agent policy:\n- Go to \u201cSecurity \u2192 Manage \u2192 Policies\u201d.\n- Select an \u201cElastic Agent policy\u201d.\n- Click \u201cShow advanced settings\u201d.\n- Scroll down or search for \u201clinux.advanced.capture_env_vars\u201d.\n- Enter the names of environment variables you want to capture, separated by commas.\n- For this rule the linux.advanced.capture_env_vars variable should be set to \"http_proxy,HTTPS_PROXY,ALL_PROXY\".\n- Click \u201cSave\u201d.\nAfter saving the integration change, the Elastic Agents running this policy will be updated and the rule will function properly.\nFor more information on capturing environment variables refer to the [helper guide](https://www.elastic.co/guide/en/security/current/environment-variable-capture.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Use Case: Vulnerability", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1203", + "name": "Exploitation for Client Execution", + "reference": "https://attack.mitre.org/techniques/T1203/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "f41296b4-9975-44d6-9486-514c6f635b2d_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f44fa4b6-524c-4e87-8d9e-a32599e4fb7c_107.json b/packages/security_detection_engine/kibana/security_rule/f44fa4b6-524c-4e87-8d9e-a32599e4fb7c_107.json new file mode 100644 index 00000000000..89ce9060bb7 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f44fa4b6-524c-4e87-8d9e-a32599e4fb7c_107.json @@ -0,0 +1,96 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to establish persistence on an endpoint by abusing Microsoft Office add-ins.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistence via Microsoft Office AddIns", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n file.extension : (\"wll\",\"xll\",\"ppa\",\"ppam\",\"xla\",\"xlam\") and\n file.path :\n (\n \"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Word\\\\Startup\\\\*\",\n \"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\AddIns\\\\*\",\n \"C:\\\\Users\\\\*\\\\AppData\\\\Roaming\\\\Microsoft\\\\Excel\\\\XLSTART\\\\*\"\n )\n", + "references": [ + "https://labs.withsecure.com/publications/add-in-opportunities-for-office-persistence" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f44fa4b6-524c-4e87-8d9e-a32599e4fb7c", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1137", + "name": "Office Application Startup", + "reference": "https://attack.mitre.org/techniques/T1137/", + "subtechnique": [ + { + "id": "T1137.006", + "name": "Add-ins", + "reference": "https://attack.mitre.org/techniques/T1137/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "f44fa4b6-524c-4e87-8d9e-a32599e4fb7c_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f494c678-3c33-43aa-b169-bb3d5198c41d_110.json b/packages/security_detection_engine/kibana/security_rule/f494c678-3c33-43aa-b169-bb3d5198c41d_110.json new file mode 100644 index 00000000000..67410af8812 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f494c678-3c33-43aa-b169-bb3d5198c41d_110.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the assignment of the SeEnableDelegationPrivilege sensitive \"user right\" to a user. The SeEnableDelegationPrivilege \"user right\" enables computer and user accounts to be trusted for delegation. Attackers can abuse this right to compromise Active Directory accounts and elevate their privileges.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Sensitive Privilege SeEnableDelegationPrivilege assigned to a User", + "note": "## Triage and analysis\n\n### Investigating Sensitive Privilege SeEnableDelegationPrivilege assigned to a User\n\nKerberos delegation is an Active Directory feature that allows user and computer accounts to impersonate other accounts, act on their behalf, and use their privileges. Delegation (constrained and unconstrained) can be configured for user and computer objects.\n\nEnabling unconstrained delegation for a computer causes the computer to store the ticket-granting ticket (TGT) in memory at any time an account connects to the computer, so it can be used by the computer for impersonation when needed. Risk is heightened if an attacker compromises computers with unconstrained delegation enabled, as they could extract TGTs from memory and then replay them to move laterally on the domain. If the attacker coerces a privileged user to connect to the server, or if the user does so routinely, the account will be compromised and the attacker will be able to pass-the-ticket to privileged assets.\n\nSeEnableDelegationPrivilege is a user right that is controlled within the Local Security Policy of a domain controller and is managed through Group Policy. This setting is named **Enable computer and user accounts to be trusted for delegation**.\n\nIt is critical to control the assignment of this privilege. A user with this privilege and write access to a computer can control delegation settings, perform the attacks described above, and harvest TGTs from any user that connects to the system.\n\n#### Possible investigation steps\n\n- Investigate how the privilege was assigned to the user and who assigned it.\n- Investigate other potentially malicious activity that was performed by the user that assigned the privileges using the `user.id` and `winlog.activity_id` fields as a filter during the past 48 hours.\n- Investigate other alerts associated with the users/host during the past 48 hours.\n\n### False positive analysis\n\n- The SeEnableDelegationPrivilege privilege should not be assigned to users. If this rule is triggered in your environment legitimately, the security team should notify the administrators about the risks of using it.\n\n### Related rules\n\n- KRBTGT Delegation Backdoor - e052c845-48d0-4f46-8a13-7d0aba05df82\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Remove the privilege from the account.\n- Review the privileges of the administrator account that performed the action.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.action:\"Authorization Policy Change\" and event.code:4704 and\n winlog.event_data.PrivilegeList:\"SeEnableDelegationPrivilege\"\n", + "references": [ + "https://blog.harmj0y.net/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/", + "https://github.com/SigmaHQ/sigma/blob/master/rules/windows/builtin/security/win_alert_active_directory_user_control.yml", + "https://twitter.com/_nwodtuhs/status/1454049485080907776", + "https://www.thehacker.recipes/ad/movement/kerberos/delegations", + "https://github.com/atc-project/atomic-threat-coverage/blob/master/Atomic_Threat_Coverage/Logging_Policies/LP_0105_windows_audit_authorization_policy_change.md" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.PrivilegeList", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f494c678-3c33-43aa-b169-bb3d5198c41d", + "setup": "## Setup\n\nThe 'Audit Authorization Policy Change' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policy Configuration >\nAudit Policies >\nPolicy Change >\nAudit Authorization Policy Change (Success,Failure)\n```\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Tactic: Persistence", + "Data Source: Active Directory", + "Resources: Investigation Guide", + "Use Case: Active Directory Monitoring" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1098", + "name": "Account Manipulation", + "reference": "https://attack.mitre.org/techniques/T1098/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 110 + }, + "id": "f494c678-3c33-43aa-b169-bb3d5198c41d_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6.json b/packages/security_detection_engine/kibana/security_rule/f530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6.json new file mode 100644 index 00000000000..ab7674879a4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6.json @@ -0,0 +1,100 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies when the openssl command-line utility is used to encrypt multiple files on a host within a short time window. Adversaries may encrypt data on a single or multiple systems in order to disrupt the availability of their target's data and may attempt to hold the organization's data to ransom for the purposes of extortion.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Data Encryption via OpenSSL Utility", + "query": "sequence by host.id, user.name, process.parent.entity_id with maxspan=5s\n [ process where host.os.type == \"linux\" and event.action == \"exec\" and \n process.name == \"openssl\" and process.parent.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\", \"perl*\", \"php*\", \"python*\", \"xargs\") and\n process.args == \"-in\" and process.args == \"-out\" and\n process.args in (\"-k\", \"-K\", \"-kfile\", \"-pass\", \"-iv\", \"-md\") and\n /* excluding base64 encoding options and including encryption password or key params */\n not process.args in (\"-d\", \"-a\", \"-A\", \"-base64\", \"-none\", \"-nosalt\") ] with runs=10\n", + "references": [ + "https://www.welivesecurity.com/2017/06/30/telebots-back-supply-chain-attacks-against-ukraine/", + "https://www.trendmicro.com/en_us/research/21/f/bash-ransomware-darkradiation-targets-red-hat--and-debian-based-linux-distributions.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f530ca17-153b-4a7a-8cd3-98dd4b4ddf73", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Impact", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "Impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1486", + "name": "Data Encrypted for Impact", + "reference": "https://attack.mitre.org/techniques/T1486/" + } + ] + } + ], + "type": "eql", + "version": 6 + }, + "id": "f530ca17-153b-4a7a-8cd3-98dd4b4ddf73_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110.json b/packages/security_detection_engine/kibana/security_rule/f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110.json new file mode 100644 index 00000000000..cd0fd143158 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110.json @@ -0,0 +1,128 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a PowerShell process launched by either cscript.exe or wscript.exe. Observing Windows scripting processes executing a PowerShell script, may be indicative of malicious activity.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Script Executing PowerShell", + "note": "## Triage and analysis\n\n### Investigating Windows Script Executing PowerShell\n\nThe Windows Script Host (WSH) is an Windows automation technology, which is ideal for non-interactive scripting needs, such as logon scripting, administrative scripting, and machine automation.\n\nAttackers commonly use WSH scripts as their initial access method, acting like droppers for second stage payloads, but can also use them to download tools and utilities needed to accomplish their goals.\n\nThis rule looks for the spawn of the `powershell.exe` process with `cscript.exe` or `wscript.exe` as its parent process.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate commands executed by the spawned PowerShell process.\n- If unsigned files are found on the process tree, retrieve them and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Determine how the script file was delivered (email attachment, dropped by other processes, etc.).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n\n### False positive analysis\n\n- The usage of these script engines by regular users is unlikely. In the case of authorized benign true positives (B-TPs), exceptions can be added.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- If the malicious file was delivered via phishing:\n - Block the email sender from sending future emails.\n - Block the malicious web pages.\n - Remove emails from the sender from mailboxes.\n - Consider improvements to the security awareness program.\n- Reimage the host operating system and restore compromised files to clean versions.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : (\"cscript.exe\", \"wscript.exe\") and process.name : \"powershell.exe\" and\n not (\n process.parent.name : \"wscript.exe\" and\n process.parent.args : \"?:\\\\ProgramData\\\\intune-drive-mapping-generator\\\\IntuneDriveMapping-VBSHelper.vbs\" and\n process.parent.args : \"?:\\\\ProgramData\\\\intune-drive-mapping-generator\\\\DriveMapping.ps1\"\n )\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1566", + "name": "Phishing", + "reference": "https://attack.mitre.org/techniques/T1566/", + "subtechnique": [ + { + "id": "T1566.001", + "name": "Spearphishing Attachment", + "reference": "https://attack.mitre.org/techniques/T1566/001/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.005", + "name": "Visual Basic", + "reference": "https://attack.mitre.org/techniques/T1059/005/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "f545ff26-3c94-4fd0-bd33-3c7f95a3a0fc_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f580bf0a-2d23-43bb-b8e1-17548bb947ec_2.json b/packages/security_detection_engine/kibana/security_rule/f580bf0a-2d23-43bb-b8e1-17548bb947ec_2.json new file mode 100644 index 00000000000..4af3afa1a43 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f580bf0a-2d23-43bb-b8e1-17548bb947ec_2.json @@ -0,0 +1,107 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects rare internet network connections via the SMB protocol. SMB is commonly used to leak NTLM credentials via rogue UNC path injection.", + "from": "now-9m", + "history_window_start": "now-7d", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Rare SMB Connection to the Internet", + "new_terms_fields": [ + "destination.ip" + ], + "query": "event.category:network and host.os.type:windows and process.pid:4 and \n network.transport:tcp and destination.port:(139 or 445) and \n source.ip:(\n 10.0.0.0/8 or\n 172.16.0.0/12 or\n 192.168.0.0/16\n ) and\n not destination.ip:(\n 10.0.0.0/8 or\n 127.0.0.0/8 or\n 169.254.0.0/16 or\n 172.16.0.0/12 or\n 192.0.0.0/24 or\n 192.0.0.0/29 or\n 192.0.0.8/32 or\n 192.0.0.9/32 or\n 192.0.0.10/32 or\n 192.0.0.170/32 or\n 192.0.0.171/32 or\n 192.0.2.0/24 or\n 192.31.196.0/24 or\n 192.52.193.0/24 or\n 192.168.0.0/16 or\n 192.88.99.0/24 or\n 224.0.0.0/4 or\n 100.64.0.0/10 or\n 192.175.48.0/24 or\n 198.18.0.0/15 or\n 198.51.100.0/24 or\n 203.0.113.0/24 or\n 240.0.0.0/4 or\n \"::1\" or\n \"FE80::/10\" or\n \"FF00::/8\"\n )\n", + "references": [ + "https://www.securify.nl/en/blog/living-off-the-land-stealing-netntlm-hashes/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.transport", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pid", + "type": "long" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + } + ], + "risk_score": 47, + "rule_id": "f580bf0a-2d23-43bb-b8e1-17548bb947ec", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Exfiltration", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1048", + "name": "Exfiltration Over Alternative Protocol", + "reference": "https://attack.mitre.org/techniques/T1048/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 2 + }, + "id": "f580bf0a-2d23-43bb-b8e1-17548bb947ec_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f5861570-e39a-4b8a-9259-abd39f84cb97_3.json b/packages/security_detection_engine/kibana/security_rule/f5861570-e39a-4b8a-9259-abd39f84cb97_3.json new file mode 100644 index 00000000000..129e060c0b2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f5861570-e39a-4b8a-9259-abd39f84cb97_3.json @@ -0,0 +1,92 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the access on an object with WRITEDAC permissions. With the WRITEDAC permission, the user can perform a Write Discretionary Access Control List (WriteDACL) operation, which is used to modify the access control rules associated with a specific object within Active Directory. Attackers may abuse this privilege to grant themselves or other compromised accounts additional rights, ultimately compromising the target object, resulting in privilege escalation, lateral movement, and persistence.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-system.*", + "logs-windows.*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "WRITEDAC Access on Active Directory Object", + "query": "event.action:\"Directory Service Access\" and event.code:\"5136\" and\n winlog.event_data.AccessMask:\"0x40000\"\n", + "references": [ + "https://www.blackhat.com/docs/us-17/wednesday/us-17-Robbins-An-ACE-Up-The-Sleeve-Designing-Active-Directory-DACL-Backdoors.pdf" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.code", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.AccessMask", + "type": "unknown" + } + ], + "risk_score": 21, + "rule_id": "f5861570-e39a-4b8a-9259-abd39f84cb97", + "setup": "## Setup\n\nThe 'Audit Directory Service Access' logging policy must be configured for (Success, Failure).\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nPolicies >\nWindows Settings >\nSecurity Settings >\nAdvanced Audit Policies Configuration >\nAudit Policies >\nDS Access >\nAudit Directory Service Access (Success,Failure)\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Active Directory", + "Use Case: Active Directory Monitoring", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1222", + "name": "File and Directory Permissions Modification", + "reference": "https://attack.mitre.org/techniques/T1222/", + "subtechnique": [ + { + "id": "T1222.001", + "name": "Windows File and Directory Permissions Modification", + "reference": "https://attack.mitre.org/techniques/T1222/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 3 + }, + "id": "f5861570-e39a-4b8a-9259-abd39f84cb97_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f5c005d3-4e17-48b0-9cd7-444d48857f97_5.json b/packages/security_detection_engine/kibana/security_rule/f5c005d3-4e17-48b0-9cd7-444d48857f97_5.json new file mode 100644 index 00000000000..040e407190e --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f5c005d3-4e17-48b0-9cd7-444d48857f97_5.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the addition of the cap_setuid+ep or cap_setgid+ep capabilities via setcap. Setuid (Set User ID) and setgid (Set Group ID) are Unix-like OS features that enable processes to run with elevated privileges, based on the file owner or group. Threat actors can exploit these attributes to achieve persistence by creating malicious binaries, allowing them to maintain control over a compromised system with elevated permissions.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Setcap setuid/setgid Capability Set", + "note": "## Triage and analysis\n\n### Investigating Setcap setuid/setgid Capability Set\n\nSetuid (Set User ID) and setgid (Set Group ID) are Unix-like OS features that enable processes to run with elevated privileges, based on the file owner or group.\n\nThreat actors can exploit these attributes to achieve persistence by creating malicious binaries, allowing them to maintain control over a compromised system with elevated permissions.\n\nThis rule monitors for the addition of the cap_setuid+ep or cap_setgid+ep capabilities via setcap.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the file that was targeted by the addition of the setuid/setgid capability through OSQuery.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n - Cron jobs, services and other persistence mechanisms.\n - !{osquery{\"label\":\"Osquery - Retrieve Crontab Information\",\"query\":\"SELECT * FROM crontab\"}}\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator that performed these actions for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and \nprocess.name == \"setcap\" and process.args : \"cap_set?id+ep\" and not process.parent.name in (\"jem\", \"vzctl\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f5c005d3-4e17-48b0-9cd7-444d48857f97", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.001", + "name": "Setuid and Setgid", + "reference": "https://attack.mitre.org/techniques/T1548/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 5 + }, + "id": "f5c005d3-4e17-48b0-9cd7-444d48857f97_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3.json b/packages/security_detection_engine/kibana/security_rule/f5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3.json new file mode 100644 index 00000000000..9127bddd363 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "anomaly_threshold": 75, + "author": [ + "Elastic" + ], + "description": "A machine learning job combination has detected a set of one or more suspicious Windows processes with unusually high scores for malicious probability. These process(es) have been classified as malicious in several ways. The process(es) were predicted to be malicious by the ProblemChild supervised ML model. If the anomaly contains a cluster of suspicious processes, each process has the same parent process name, and the aggregate score of the event cluster was calculated to be unusually high by an unsupervised ML model. Such a cluster often contains suspicious or malicious activity, possibly involving LOLbins, that may be resistant to detection using conventional search rules.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "problem_child_high_sum_by_parent", + "name": "Suspicious Windows Process Cluster Spawned by a Parent Process", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/problemchild", + "https://www.elastic.co/security-labs/detecting-living-off-the-land-attacks-with-new-elastic-integration" + ], + "related_integrations": [ + { + "package": "problemchild", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "risk_score": 21, + "rule_id": "f5d9d36d-7c30-4cdb-a856-9f653c13d4e0", + "setup": "## Setup\n\nThe rule requires the Living off the Land (LotL) Attack Detection integration assets to be installed, as well as Windows process events collected by integrations such as Elastic Defend or Winlogbeat. \n\n### LotL Attack Detection Setup\nThe LotL Attack Detection integration detects living-off-the-land activity in Windows process events.\n\n#### Prerequisite Requirements:\n- Fleet is required for LotL Attack Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- Windows process events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) integration or Winlogbeat(https://www.elastic.co/guide/en/beats/winlogbeat/current/_winlogbeat_overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To set up and run Winlogbeat, follow [this](https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation-configuration.html) guide.\n\n#### The following steps should be executed to install assets associated with the LotL Attack Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Living off the Land Attack Detection and select the integration to see more details about it.\n- Under Settings, click Install Living off the Land Attack Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich Windows process events with predictions from the Supervised LotL Attack Detection model. This is done via the ingest pipeline named `-problem_child_ingest_pipeline` installed with the LotL Attack Detection package.\n- If using an Elastic Beat such as Winlogbeat, add the LotL ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `winlogbeat.yml`.\n- If adding the LotL ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the LotL ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"problemchild\": {\n \"properties\": {\n \"prediction\": {\n \"type\": \"long\"\n },\n \"prediction_probability\": {\n \"type\": \"float\"\n }\n }\n },\n \"blocklist_label\": {\n \"type\": \"long\"\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched Windows process events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `winlogbeat-*` if you used Winlogbeat.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/problemchild/kibana/ml_module/problemchild-ml.json) configuration file, you will see a card for \"Living off the Land Attack Detection\" under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Living off the Land Attack Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Defense Evasion" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "f5d9d36d-7c30-4cdb-a856-9f653c13d4e0_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f5fb4598-4f10-11ed-bdc3-0242ac120002_6.json b/packages/security_detection_engine/kibana/security_rule/f5fb4598-4f10-11ed-bdc3-0242ac120002_6.json new file mode 100644 index 00000000000..0e498a7bd4c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f5fb4598-4f10-11ed-bdc3-0242ac120002_6.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rules identifies a process created from an executable with a space appended to the end of the filename. This may indicate an attempt to masquerade a malicious file as benign to gain user execution. When a space is added to the end of certain files, the OS will execute the file according to it's true filetype instead of it's extension. Adversaries can hide a program's true filetype by changing the extension of the file. They can then add a space to the end of the name so that the OS automatically executes the file when it's double-clicked.", + "from": "now-9m", + "index": [ + "auditbeat-*", + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Masquerading Space After Filename", + "query": "process where host.os.type:(\"linux\",\"macos\") and\n event.type == \"start\" and\n (process.executable regex~ \"\"\"/[a-z0-9\\s_\\-\\\\./]+\\s\"\"\") and not\n process.name in (\"ls\", \"find\", \"grep\", \"xkbcomp\")\n", + "references": [ + "https://www.picussecurity.com/resource/blog/picus-10-critical-mitre-attck-techniques-t1036-masquerading" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f5fb4598-4f10-11ed-bdc3-0242ac120002", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.006", + "name": "Space after Filename", + "reference": "https://attack.mitre.org/techniques/T1036/006/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "f5fb4598-4f10-11ed-bdc3-0242ac120002_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3.json b/packages/security_detection_engine/kibana/security_rule/f638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3.json new file mode 100644 index 00000000000..f5fb5865f9f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Adversaries may use built-in applications to get a listing of local system or domain accounts and groups.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "Account or Group Discovery via Built-In Tools", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and ( \n (process.name in (\"groups\", \"id\")) or \n (process.name == \"dscl\" and process.args : (\"/Active Directory/*\", \"/Users*\", \"/Groups*\")) or\n (process.name == \"dscacheutil\" and process.args in (\"user\", \"group\")) or\n (process.args in (\"/etc/passwd\", \"/etc/master.passwd\", \"/etc/sudoers\")) or\n (process.name == \"getent\" and process.args in (\"passwd\", \"group\"))\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "f638a66d-3bbf-46b1-a52c-ef6f39fb6caf", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1069", + "name": "Permission Groups Discovery", + "reference": "https://attack.mitre.org/techniques/T1069/", + "subtechnique": [ + { + "id": "T1069.001", + "name": "Local Groups", + "reference": "https://attack.mitre.org/techniques/T1069/001/" + }, + { + "id": "T1069.002", + "name": "Domain Groups", + "reference": "https://attack.mitre.org/techniques/T1069/002/" + } + ] + }, + { + "id": "T1087", + "name": "Account Discovery", + "reference": "https://attack.mitre.org/techniques/T1087/", + "subtechnique": [ + { + "id": "T1087.001", + "name": "Local Account", + "reference": "https://attack.mitre.org/techniques/T1087/001/" + }, + { + "id": "T1087.002", + "name": "Domain Account", + "reference": "https://attack.mitre.org/techniques/T1087/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "f638a66d-3bbf-46b1-a52c-ef6f39fb6caf_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f63c8e3c-d396-404f-b2ea-0379d3942d73_109.json b/packages/security_detection_engine/kibana/security_rule/f63c8e3c-d396-404f-b2ea-0379d3942d73_109.json new file mode 100644 index 00000000000..efaeed2f944 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f63c8e3c-d396-404f-b2ea-0379d3942d73_109.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when the Windows Firewall is disabled using PowerShell cmdlets, which can help attackers evade network constraints, like internet and network lateral communication restrictions.", + "false_positives": [ + "Windows Firewall can be disabled by a system administrator. Verify whether the user identity, user agent, and/or hostname should be making changes in your environment. Windows Profile being disabled by unfamiliar users should be investigated. If known behavior is causing false positives, it can be exempted from the rule." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Windows Firewall Disabled via PowerShell", + "note": "## Triage and analysis\n\n### Investigating Windows Firewall Disabled via PowerShell\n\nWindows Defender Firewall is a native component that provides host-based, two-way network traffic filtering for a device and blocks unauthorized network traffic flowing into or out of the local device.\n\nAttackers can disable the Windows firewall or its rules to enable lateral movement and command and control activity.\n\nThis rule identifies patterns related to disabling the Windows firewall or its rules using the `Set-NetFirewallProfile` PowerShell cmdlet.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Check whether the user is an administrator and is legitimately performing troubleshooting.\n- In case of an allowed benign true positive (B-TP), assess adding rules to allow needed traffic and re-enable the firewall.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Re-enable the firewall with its desired configurations.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Review the privileges assigned to the involved users to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"windows\" and event.action == \"start\" and\n (process.name : (\"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") or ?process.pe.original_file_name == \"PowerShell.EXE\") and\n process.args : \"*Set-NetFirewallProfile*\" and\n (process.args : \"*-Enabled*\" and process.args : \"*False*\") and\n (process.args : \"*-All*\" or process.args : (\"*Public*\", \"*Domain*\", \"*Private*\"))\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/netsecurity/set-netfirewallprofile?view=windowsserver2019-ps", + "https://www.tutorialspoint.com/how-to-get-windows-firewall-profile-settings-using-powershell", + "http://powershellhelp.space/commands/set-netfirewallrule-psv5.php", + "http://woshub.com/manage-windows-firewall-powershell/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f63c8e3c-d396-404f-b2ea-0379d3942d73", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.004", + "name": "Disable or Modify System Firewall", + "reference": "https://attack.mitre.org/techniques/T1562/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "f63c8e3c-d396-404f-b2ea-0379d3942d73_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f683dcdf-a018-4801-b066-193d4ae6c8e5_106.json b/packages/security_detection_engine/kibana/security_rule/f683dcdf-a018-4801-b066-193d4ae6c8e5_106.json new file mode 100644 index 00000000000..43013fdb53b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f683dcdf-a018-4801-b066-193d4ae6c8e5_106.json @@ -0,0 +1,95 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies changes to the SoftwareUpdate preferences using the built-in defaults command. Adversaries may abuse this in an attempt to disable security updates.", + "false_positives": [ + "Authorized SoftwareUpdate Settings Changes" + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "SoftwareUpdate Preferences Modification", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.name:defaults and\n process.args:(write and \"-bool\" and (com.apple.SoftwareUpdate or /Library/Preferences/com.apple.SoftwareUpdate.plist) and not (TRUE or true))\n", + "references": [ + "https://blog.checkpoint.com/2017/07/13/osxdok-refuses-go-away-money/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f683dcdf-a018-4801-b066-193d4ae6c8e5", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "f683dcdf-a018-4801-b066-193d4ae6c8e5_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f75f65cf-ed04-48df-a7ff-b02a8bfe636e_3.json b/packages/security_detection_engine/kibana/security_rule/f75f65cf-ed04-48df-a7ff-b02a8bfe636e_3.json new file mode 100644 index 00000000000..110d3937bb4 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f75f65cf-ed04-48df-a7ff-b02a8bfe636e_3.json @@ -0,0 +1,89 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of built-in tools to read the contents of \\etc\\hosts on a local machine. Attackers may use this data to discover remote machines in an environment that may be used for Lateral Movement from the current system.", + "from": "now-119m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "interval": "60m", + "language": "eql", + "license": "Elastic License v2", + "name": "System Hosts File Access", + "query": "process where event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\") and\nprocess.name in (\"vi\", \"nano\", \"cat\", \"more\", \"less\") and process.args == \"/etc/hosts\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "f75f65cf-ed04-48df-a7ff-b02a8bfe636e", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Rule Type: BBR", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1018", + "name": "Remote System Discovery", + "reference": "https://attack.mitre.org/techniques/T1018/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 3 + }, + "id": "f75f65cf-ed04-48df-a7ff-b02a8bfe636e_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f7c4dc5a-a58d-491d-9f14-9b66507121c0_110.json b/packages/security_detection_engine/kibana/security_rule/f7c4dc5a-a58d-491d-9f14-9b66507121c0_110.json new file mode 100644 index 00000000000..abc44ab4ba9 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f7c4dc5a-a58d-491d-9f14-9b66507121c0_110.json @@ -0,0 +1,110 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies script engines creating files in the Startup folder, or the creation of script files in the Startup folder. Adversaries may abuse this technique to maintain persistence in an environment.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.file*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Persistent Scripts in the Startup Directory", + "note": "## Triage and analysis\n\n### Investigating Persistent Scripts in the Startup Directory\n\nThe Windows Startup folder is a special folder in Windows. Programs added to this folder are executed during account logon, without user interaction, providing an excellent way for attackers to maintain persistence.\n\nThis rule looks for shortcuts created by wscript.exe or cscript.exe, or js/vbs scripts created by any process.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate if the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the file using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Related rules\n\n- Suspicious Startup Shell Folder Modification - c8b150f0-0164-475b-a75e-74b47800a9ff\n- Startup Folder Persistence via Unsigned Process - 2fba96c0-ade5-4bce-b92f-a5df2509da3f\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and\n\n file.extension : (\"lnk\", \"vbs\", \"vbe\", \"wsh\", \"wsf\", \"js\") and\n not (startsWith(user.domain, \"NT\") or endsWith(user.domain, \"NT\")) and\n\n /* detect shortcuts created by wscript.exe or cscript.exe */\n (file.path : \"C:\\\\*\\\\Programs\\\\Startup\\\\*.lnk\" and\n process.name : (\"wscript.exe\", \"cscript.exe\")) or\n\n /* detect vbs or js files created by any process */\n file.path : (\"C:\\\\*\\\\Programs\\\\Startup\\\\*.vbs\",\n \"C:\\\\*\\\\Programs\\\\Startup\\\\*.vbe\",\n \"C:\\\\*\\\\Programs\\\\Startup\\\\*.wsh\",\n \"C:\\\\*\\\\Programs\\\\Startup\\\\*.wsf\",\n \"C:\\\\*\\\\Programs\\\\Startup\\\\*.js\")\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.domain", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f7c4dc5a-a58d-491d-9f14-9b66507121c0", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1547", + "name": "Boot or Logon Autostart Execution", + "reference": "https://attack.mitre.org/techniques/T1547/", + "subtechnique": [ + { + "id": "T1547.001", + "name": "Registry Run Keys / Startup Folder", + "reference": "https://attack.mitre.org/techniques/T1547/001/" + }, + { + "id": "T1547.009", + "name": "Shortcut Modification", + "reference": "https://attack.mitre.org/techniques/T1547/009/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 110 + }, + "id": "f7c4dc5a-a58d-491d-9f14-9b66507121c0_110", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f7c70f2e-4616-439c-85ac-5b98415042fe_2.json b/packages/security_detection_engine/kibana/security_rule/f7c70f2e-4616-439c-85ac-5b98415042fe_2.json new file mode 100644 index 00000000000..24101162f80 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f7c70f2e-4616-439c-85ac-5b98415042fe_2.json @@ -0,0 +1,103 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies potential privilege escalation exploitation of DAC (Discretionary access control) file permissions. The rule identifies exploitation of DAC checks on sensitive file paths via suspicious processes whose capabilities include CAP_DAC_OVERRIDE (where a process can bypass all read write and execution checks) or CAP_DAC_READ_SEARCH (where a process can read any file or perform any executable permission on the directories).", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Potential Privilege Escalation via Linux DAC permissions", + "new_terms_fields": [ + "host.id", + "process.command_line", + "process.executable" + ], + "query": "event.category:process and host.os.type:linux and event.type:start and event.action:exec and\n(process.thread.capabilities.permitted:CAP_DAC_* or process.thread.capabilities.effective: CAP_DAC_*) and\nprocess.command_line:(*sudoers* or *passwd* or *shadow* or */root/*) and not user.id:\"0\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.command_line", + "type": "wildcard" + }, + { + "ecs": true, + "name": "process.thread.capabilities.effective", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.thread.capabilities.permitted", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "f7c70f2e-4616-439c-85ac-5b98415042fe", + "setup": "## Setup\n\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 2 + }, + "id": "f7c70f2e-4616-439c-85ac-5b98415042fe_2", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f81ee52c-297e-46d9-9205-07e66931df26_108.json b/packages/security_detection_engine/kibana/security_rule/f81ee52c-297e-46d9-9205-07e66931df26_108.json new file mode 100644 index 00000000000..3eea16b0699 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f81ee52c-297e-46d9-9205-07e66931df26_108.json @@ -0,0 +1,129 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies suspicious processes being spawned by the Microsoft Exchange Server worker process (w3wp). This activity may indicate exploitation activity or access to an existing web shell backdoor.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Exchange Worker Spawning Suspicious Processes", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.parent.name : \"w3wp.exe\" and process.parent.args : \"MSExchange*AppPool\" and\n (process.name : (\"cmd.exe\", \"powershell.exe\", \"pwsh.exe\", \"powershell_ise.exe\") or\n ?process.pe.original_file_name in (\"cmd.exe\", \"powershell.exe\", \"pwsh.dll\", \"powershell_ise.exe\"))\n", + "references": [ + "https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers", + "https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities", + "https://discuss.elastic.co/t/detection-and-response-for-hafnium-activity/266289" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.pe.original_file_name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f81ee52c-297e-46d9-9205-07e66931df26", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Initial Access", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0001", + "name": "Initial Access", + "reference": "https://attack.mitre.org/tactics/TA0001/" + }, + "technique": [ + { + "id": "T1190", + "name": "Exploit Public-Facing Application", + "reference": "https://attack.mitre.org/techniques/T1190/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + }, + { + "id": "T1059.003", + "name": "Windows Command Shell", + "reference": "https://attack.mitre.org/techniques/T1059/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "f81ee52c-297e-46d9-9205-07e66931df26_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f85ce03f-d8a8-4c83-acdc-5c8cd0592be7_106.json b/packages/security_detection_engine/kibana/security_rule/f85ce03f-d8a8-4c83-acdc-5c8cd0592be7_106.json new file mode 100644 index 00000000000..058a04bd396 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f85ce03f-d8a8-4c83-acdc-5c8cd0592be7_106.json @@ -0,0 +1,94 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects attempts to exploit privilege escalation vulnerabilities related to the Adobe Acrobat Reader PrivilegedHelperTool responsible for installing updates. For more information, refer to CVE-2020-9615, CVE-2020-9614 and CVE-2020-9613 and verify that the impacted system is patched.", + "false_positives": [ + "Trusted system or Adobe Acrobat Related processes." + ], + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Suspicious Child Process of Adobe Acrobat Reader Update Service", + "query": "event.category:process and host.os.type:macos and event.type:(start or process_started) and\n process.parent.name:com.adobe.ARMDC.SMJobBlessHelper and\n user.name:root and\n not process.executable: (/Library/PrivilegedHelperTools/com.adobe.ARMDC.SMJobBlessHelper or\n /usr/bin/codesign or\n /private/var/folders/zz/*/T/download/ARMDCHammer or\n /usr/sbin/pkgutil or\n /usr/bin/shasum or\n /usr/bin/perl* or\n /usr/sbin/spctl or\n /usr/sbin/installer or\n /usr/bin/csrutil)\n", + "references": [ + "https://rekken.github.io/2020/05/14/Security-Flaws-in-Adobe-Acrobat-Reader-Allow-Malicious-Program-to-Gain-Root-on-macOS-Silently/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f85ce03f-d8a8-4c83-acdc-5c8cd0592be7", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a macOS System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, for MacOS it is recommended to select \"Traditional Endpoints\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/current/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: macOS", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Use Case: Vulnerability", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 106 + }, + "id": "f85ce03f-d8a8-4c83-acdc-5c8cd0592be7_106", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f874315d-5188-4b4a-8521-d1c73093a7e4_109.json b/packages/security_detection_engine/kibana/security_rule/f874315d-5188-4b4a-8521-d1c73093a7e4_109.json new file mode 100644 index 00000000000..00d235a1aee --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f874315d-5188-4b4a-8521-d1c73093a7e4_109.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies modifications of the AmsiEnable registry key to 0, which disables the Antimalware Scan Interface (AMSI). An adversary can modify this key to disable AMSI protections.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Modification of AmsiEnable Registry Key", + "note": "## Triage and analysis\n\n### Investigating Modification of AmsiEnable Registry Key\n\nThe Windows Antimalware Scan Interface (AMSI) is a versatile interface standard that allows your applications and services to integrate with any antimalware product on a machine. AMSI integrates with multiple Windows components, ranging from User Account Control (UAC) to VBA macros and PowerShell.\n\nSince AMSI is widely used across security products for increased visibility, attackers can disable it to evade detections that rely on it.\n\nThis rule monitors the modifications to the Software\\Microsoft\\Windows Script\\Settings\\AmsiEnable registry key.\n\n#### Possible investigation steps\n\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the execution of scripts and macros after the registry modification.\n- Retrieve scripts or Microsoft Office files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Use process name, command line, and file hash to search for occurrences on other hosts.\n\n### False positive analysis\n\n- This modification should not happen legitimately. Any potential benign true positive (B-TP) should be mapped and monitored by the security team as these modifications expose the host to malware infections.\n\n### Related rules\n\n- Microsoft Windows Defender Tampering - fe794edd-487f-4a90-b285-3ee54f2af2d3\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Delete or set the key to its default value.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n registry.path : (\n \"HKEY_USERS\\\\*\\\\Software\\\\Microsoft\\\\Windows Script\\\\Settings\\\\AmsiEnable\",\n \"HKU\\\\*\\\\Software\\\\Microsoft\\\\Windows Script\\\\Settings\\\\AmsiEnable\",\n \"\\\\REGISTRY\\\\USER\\\\*\\\\Software\\\\Microsoft\\\\Windows Script\\\\Settings\\\\AmsiEnable\"\n ) and\n registry.data.strings: (\"0\", \"0x00000000\")\n", + "references": [ + "https://hackinparis.com/data/slides/2019/talks/HIP2019-Dominic_Chell-Cracking_The_Perimeter_With_Sharpshooter.pdf", + "https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "f874315d-5188-4b4a-8521-d1c73093a7e4", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "f874315d-5188-4b4a-8521-d1c73093a7e4_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/f9790abf-bd0c-45f9-8b5f-d0b74015e029_9.json b/packages/security_detection_engine/kibana/security_rule/f9790abf-bd0c-45f9-8b5f-d0b74015e029_9.json new file mode 100644 index 00000000000..dbcec091aa2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/f9790abf-bd0c-45f9-8b5f-d0b74015e029_9.json @@ -0,0 +1,108 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple consecutive logon failures targeting an Admin account from the same source address and within a short time interval. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to accounts.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-system.security*", + "logs-windows.forwarded*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Privileged Account Brute Force", + "note": "## Triage and analysis\n\n### Investigating Privileged Account Brute Force\n\nAdversaries with no prior knowledge of legitimate credentials within the system or environment may guess passwords to attempt access to accounts. Without knowledge of the password for an account, an adversary may opt to guess the password using a repetitive or iterative mechanism systematically. More details can be found [here](https://attack.mitre.org/techniques/T1110/001/).\n\nThis rule identifies potential password guessing/brute force activity from a single address against an account that contains the `admin` pattern on its name, which is likely a highly privileged account.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the logon failure reason code and the targeted user name.\n - Prioritize the investigation if the account is critical or has administrative privileges over the domain.\n- Investigate the source IP address of the failed Network Logon attempts.\n - Identify whether these attempts are coming from the internet or are internal.\n- Investigate other alerts associated with the involved users and source host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n- Check whether the involved credentials are used in automation or scheduled tasks.\n- If this activity is suspicious, contact the account owner and confirm whether they are aware of it.\n- Examine the source host for derived artifacts that indicate compromise:\n - Observe and collect information about the following activities in the alert source host:\n - Attempts to contact external domains and addresses.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the host which is the source of this activity.\n\n### False positive analysis\n\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Domain trust relationship issues.\n- Infrastructure or availability issues.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the source host to prevent further post-compromise behavior.\n- If the asset is exposed to the internet with RDP or other remote services available, take the necessary measures to restrict access to the asset. If not possible, limit the access via the firewall to only the needed IP addresses. Also, ensure the system uses robust authentication mechanisms and is patched regularly.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by winlog.computer_name, source.ip with maxspan=10s\n [authentication where event.action == \"logon-failed\" and winlog.logon.type : \"Network\" and\n source.ip != null and source.ip != \"127.0.0.1\" and source.ip != \"::1\" and user.name : \"*admin*\" and\n\n /* noisy failure status codes often associated to authentication misconfiguration */\n not winlog.event_data.Status : (\"0xC000015B\", \"0XC000005E\", \"0XC0000133\", \"0XC0000192\")] with runs=5\n", + "references": [ + "https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4625" + ], + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.computer_name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.Status", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.logon.type", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "f9790abf-bd0c-45f9-8b5f-d0b74015e029", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Resources: Investigation Guide" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 9 + }, + "id": "f9790abf-bd0c-45f9-8b5f-d0b74015e029_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fa01341d-6662-426b-9d0c-6d81e33c8a9d_108.json b/packages/security_detection_engine/kibana/security_rule/fa01341d-6662-426b-9d0c-6d81e33c8a9d_108.json new file mode 100644 index 00000000000..453667cd7d3 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fa01341d-6662-426b-9d0c-6d81e33c8a9d_108.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a remote file copy attempt to a hidden network share. This may indicate lateral movement or data staging activity.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "winlogbeat-*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Remote File Copy to a Hidden Share", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n (\n process.name : (\"cmd.exe\", \"powershell.exe\", \"xcopy.exe\") and\n process.args : (\"copy*\", \"move*\", \"cp\", \"mv\") or\n process.name : \"robocopy.exe\"\n ) and process.args : \"*\\\\\\\\*\\\\*$*\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "fa01341d-6662-426b-9d0c-6d81e33c8a9d", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Lateral Movement", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0008", + "name": "Lateral Movement", + "reference": "https://attack.mitre.org/tactics/TA0008/" + }, + "technique": [ + { + "id": "T1021", + "name": "Remote Services", + "reference": "https://attack.mitre.org/techniques/T1021/", + "subtechnique": [ + { + "id": "T1021.002", + "name": "SMB/Windows Admin Shares", + "reference": "https://attack.mitre.org/techniques/T1021/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "fa01341d-6662-426b-9d0c-6d81e33c8a9d_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fa210b61-b627-4e5e-86f4-17e8270656ab_6.json b/packages/security_detection_engine/kibana/security_rule/fa210b61-b627-4e5e-86f4-17e8270656ab_6.json new file mode 100644 index 00000000000..ef174d60d09 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fa210b61-b627-4e5e-86f4-17e8270656ab_6.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies multiple external consecutive login failures targeting a user account from the same source address within a short time interval. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to these accounts.", + "from": "now-9m", + "index": [ + "logs-system.auth-*" + ], + "language": "eql", + "license": "Elastic License v2", + "max_signals": 5, + "name": "Potential External Linux SSH Brute Force Detected", + "note": "## Triage and analysis\n\n### Investigating Potential External Linux SSH Brute Force Detected\n\nThe rule identifies consecutive SSH login failures targeting a user account from the same source IP address to the same target host indicating brute force login attempts.\n\nThis rule will generate a lot of noise for systems with a front-facing SSH service, as adversaries scan the internet for remotely accessible SSH services and try to brute force them to gain unauthorized access. \n\nIn case this rule generates too much noise and external brute forcing is of not much interest, consider turning this rule off and enabling \"Potential Internal Linux SSH Brute Force Detected\" to detect internal brute force attempts.\n\n#### Possible investigation steps\n\n- Investigate the login failure user name(s).\n- Investigate the source IP address of the failed ssh login attempt(s).\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Identify the source and the target computer and their roles in the IT environment.\n\n### False positive analysis\n\n- Authentication misconfiguration or obsolete credentials.\n- Service account password expired.\n- Infrastructure or availability issue.\n\n### Related Rules\n\n- Potential Internal Linux SSH Brute Force Detected - 1c27fa22-7727-4dd3-81c0-de6da5555feb\n- Potential SSH Password Guessing - 8cb84371-d053-4f4f-bce0-c74990e28f28\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by host.id, source.ip, user.name with maxspan=15s\n [ authentication where host.os.type == \"linux\" and \n event.action in (\"ssh_login\", \"user_login\") and event.outcome == \"failure\" and\n not cidrmatch(source.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \n \"::1\", \"FE80::/10\", \"FF00::/8\") ] with runs = 10\n", + "related_integrations": [ + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "source.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "user.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fa210b61-b627-4e5e-86f4-17e8270656ab", + "setup": "## Setup\n\nThis rule requires data coming in from Filebeat.\n\n### Filebeat Setup\nFilebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.\n\n#### The following steps should be executed in order to add the Filebeat on a Linux System:\n- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.\n- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html).\n- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).\n- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).\n- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).\n- For complete \u201cSetup and Run Filebeat\u201d information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).\n\n#### Rule Specific Setup Note\n- This rule requires the \u201cFilebeat System Module\u201d to be enabled.\n- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.\n- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Credential Access" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1110", + "name": "Brute Force", + "reference": "https://attack.mitre.org/techniques/T1110/", + "subtechnique": [ + { + "id": "T1110.001", + "name": "Password Guessing", + "reference": "https://attack.mitre.org/techniques/T1110/001/" + }, + { + "id": "T1110.003", + "name": "Password Spraying", + "reference": "https://attack.mitre.org/techniques/T1110/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 6 + }, + "id": "fa210b61-b627-4e5e-86f4-17e8270656ab_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fa3a59dc-33c3-43bf-80a9-e8437a922c7f_7.json b/packages/security_detection_engine/kibana/security_rule/fa3a59dc-33c3-43bf-80a9-e8437a922c7f_7.json new file mode 100644 index 00000000000..5b3a580f93d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fa3a59dc-33c3-43bf-80a9-e8437a922c7f_7.json @@ -0,0 +1,126 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This detection rule detects the creation of a shell through a chain consisting of the execution of a suspicious binary (located in a commonly abused location or executed manually) followed by a network event and ending with a shell being spawned. Stageless reverse tcp shells display this behaviour. Attackers may spawn reverse shells to establish persistence onto a target system.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Reverse Shell via Suspicious Binary", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n[ process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and\n process.executable : (\n \"./*\", \"/tmp/*\", \"/var/tmp/*\", \"/var/www/*\", \"/dev/shm/*\", \"/etc/init.d/*\", \"/etc/rc*.d/*\",\n \"/etc/crontab\", \"/etc/cron.*\", \"/etc/update-motd.d/*\", \"/usr/lib/update-notifier/*\",\n \"/boot/*\", \"/srv/*\", \"/run/*\", \"/root/*\", \"/etc/rc.local\"\n ) and\n process.parent.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and not\n process.name : (\"curl\", \"wget\", \"ping\", \"apt\", \"dpkg\", \"yum\", \"rpm\", \"dnf\", \"dockerd\") ]\n[ network where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"connection_attempted\", \"connection_accepted\") and\n process.executable : (\n \"./*\", \"/tmp/*\", \"/var/tmp/*\", \"/var/www/*\", \"/dev/shm/*\", \"/etc/init.d/*\", \"/etc/rc*.d/*\",\n \"/etc/crontab\", \"/etc/cron.*\", \"/etc/update-motd.d/*\", \"/usr/lib/update-notifier/*\",\n \"/boot/*\", \"/srv/*\", \"/run/*\", \"/root/*\", \"/etc/rc.local\"\n ) and destination.ip != null and destination.ip != \"127.0.0.1\" and destination.ip != \"::1\" ]\n[ process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") and \n process.parent.name : (\"bash\", \"dash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\") ]\n", + "references": [ + "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "fa3a59dc-33c3-43bf-80a9-e8437a922c7f", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Execution", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.004", + "name": "Unix Shell", + "reference": "https://attack.mitre.org/techniques/T1059/004/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1071", + "name": "Application Layer Protocol", + "reference": "https://attack.mitre.org/techniques/T1071/" + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "fa3a59dc-33c3-43bf-80a9-e8437a922c7f_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fa488440-04cc-41d7-9279-539387bf2a17_8.json b/packages/security_detection_engine/kibana/security_rule/fa488440-04cc-41d7-9279-539387bf2a17_8.json new file mode 100644 index 00000000000..8397cd0cb84 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fa488440-04cc-41d7-9279-539387bf2a17_8.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the creation of the Antimalware Scan Interface (AMSI) DLL in an unusual location. This may indicate an attempt to bypass AMSI by loading a rogue AMSI module instead of the legit one.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Suspicious Antimalware Scan Interface DLL", + "note": "## Triage and analysis\n\n### Investigating Suspicious Antimalware Scan Interface DLL\n\nThe Windows Antimalware Scan Interface (AMSI) is a versatile interface standard that allows your applications and services to integrate with any antimalware product on a machine. AMSI integrates with multiple Windows components, ranging from User Account Control (UAC) to VBA macros and PowerShell.\n\nAttackers might copy a rogue AMSI DLL to an unusual location to prevent the process from loading the legitimate module, achieving a bypass to execute malicious code.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Identify the process that created the DLL and which account was used.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the execution of scripts and macros after the registry modification.\n- Investigate other processes launched from the directory that the DLL was created.\n- Inspect the host for suspicious or abnormal behavior in the alert timeframe:\n - Observe and collect information about the following activities in the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n\n### False positive analysis\n\n- This modification should not happen legitimately. Any potential benign true positive (B-TP) should be mapped and monitored by the security team as these modifications expose the host to malware infections.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "file where host.os.type == \"windows\" and event.type != \"deletion\" and file.path != null and\n file.name : (\"amsi.dll\", \"amsi\") and not file.path : (\"?:\\\\Windows\\\\system32\\\\amsi.dll\", \"?:\\\\Windows\\\\Syswow64\\\\amsi.dll\", \"?:\\\\$WINDOWS.~BT\\\\NewOS\\\\Windows\\\\WinSXS\\\\*\", \"?:\\\\$WINDOWS.~BT\\\\NewOS\\\\Windows\\\\servicing\\\\LCU\\\\*\", \"?:\\\\$WINDOWS.~BT\\\\Work\\\\*\\\\*\", \"?:\\\\Windows\\\\SoftwareDistribution\\\\Download\\\\*\")\n", + "references": [ + "https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "fa488440-04cc-41d7-9279-539387bf2a17", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + }, + { + "id": "T1574", + "name": "Hijack Execution Flow", + "reference": "https://attack.mitre.org/techniques/T1574/", + "subtechnique": [ + { + "id": "T1574.001", + "name": "DLL Search Order Hijacking", + "reference": "https://attack.mitre.org/techniques/T1574/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 8 + }, + "id": "fa488440-04cc-41d7-9279-539387bf2a17_8", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fac52c69-2646-4e79-89c0-fd7653461010_6.json b/packages/security_detection_engine/kibana/security_rule/fac52c69-2646-4e79-89c0-fd7653461010_6.json new file mode 100644 index 00000000000..c4e6eddba8b --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fac52c69-2646-4e79-89c0-fd7653461010_6.json @@ -0,0 +1,98 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for potential attempts to disable AppArmor. AppArmor is a Linux security module that enforces fine-grained access control policies to restrict the actions and resources that specific applications and processes can access. Adversaries may disable security tools to avoid possible detection of their tools and activities.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*", + "auditbeat-*", + "logs-auditd_manager.auditd-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Disabling of AppArmor", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\", \"executed\", \"process_started\")\n and (\n (process.name == \"systemctl\" and process.args == \"disable\" and process.args == \"apparmor\") or\n (process.name == \"ln\" and process.args : \"/etc/apparmor.d/*\" and process.args == \"/etc/apparmor.d/disable/\")\n)\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "auditd_manager", + "version": "^1.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fac52c69-2646-4e79-89c0-fd7653461010", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame", + "Data Source: Auditd Manager" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/", + "subtechnique": [ + { + "id": "T1562.001", + "name": "Disable or Modify Tools", + "reference": "https://attack.mitre.org/techniques/T1562/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 6 + }, + "id": "fac52c69-2646-4e79-89c0-fd7653461010_6", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fb02b8d3-71ee-4af1-bacd-215d23f17efa_107.json b/packages/security_detection_engine/kibana/security_rule/fb02b8d3-71ee-4af1-bacd-215d23f17efa_107.json new file mode 100644 index 00000000000..19fb6ac761d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fb02b8d3-71ee-4af1-bacd-215d23f17efa_107.json @@ -0,0 +1,142 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies the native Windows tools regsvr32.exe, regsvr64.exe, RegSvcs.exe, or RegAsm.exe making a network connection. This may be indicative of an attacker bypassing allowlists or running arbitrary scripts via a signed Microsoft binary.", + "false_positives": [ + "Security testing may produce events like this. Activity of this kind performed by non-engineers and ordinary users is unusual." + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Network Connection via Registration Utility", + "note": "## Triage and analysis\n\n### Investigating Network Connection via Registration Utility\n\nBy examining the specific traits of Windows binaries -- such as process trees, command lines, network connections, registry modifications, and so on -- it's possible to establish a baseline of normal activity. Deviations from this baseline can indicate malicious activity such as masquerading, and deserve further investigation.\n\nThis rule looks for the execution of `regsvr32.exe`, `RegAsm.exe`, or `RegSvcs.exe` utilities followed by a network connection to an external address. Attackers can abuse utilities to execute malicious files or masquerade as those utilities in order to bypass detections and evade defenses.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n - Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n - Investigate the file digital signature and process original filename, if suspicious, treat it as potential malware.\n- Investigate the target host that the signed binary is communicating with.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of destination IP address and command line conditions.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and\n process.name : (\"regsvr32.exe\", \"RegAsm.exe\", \"RegSvcs.exe\") and\n not (\n (?process.Ext.token.integrity_level_name : \"System\" or ?winlog.event_data.IntegrityLevel : \"System\") and\n (process.parent.name : \"msiexec.exe\" or process.parent.executable : (\"C:\\\\Program Files (x86)\\\\*.exe\", \"C:\\\\Program Files\\\\*.exe\"))\n )\n ]\n [network where host.os.type == \"windows\" and process.name : (\"regsvr32.exe\", \"RegAsm.exe\", \"RegSvcs.exe\") and\n not cidrmatch(destination.ip, \"10.0.0.0/8\", \"127.0.0.0/8\", \"169.254.0.0/16\", \"172.16.0.0/12\", \"192.0.0.0/24\",\n \"192.0.0.0/29\", \"192.0.0.8/32\", \"192.0.0.9/32\", \"192.0.0.10/32\", \"192.0.0.170/32\", \"192.0.0.171/32\",\n \"192.0.2.0/24\", \"192.31.196.0/24\", \"192.52.193.0/24\", \"192.168.0.0/16\", \"192.88.99.0/24\", \"224.0.0.0/4\",\n \"100.64.0.0/10\", \"192.175.48.0/24\",\"198.18.0.0/15\", \"198.51.100.0/24\", \"203.0.113.0/24\", \"240.0.0.0/4\", \"::1\",\n \"FE80::/10\", \"FF00::/8\") and network.protocol != \"dns\"]\n", + "references": [ + "https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "network.protocol", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.Ext.token.integrity_level_name", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + }, + { + "ecs": false, + "name": "winlog.event_data.IntegrityLevel", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fb02b8d3-71ee-4af1-bacd-215d23f17efa", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1218", + "name": "System Binary Proxy Execution", + "reference": "https://attack.mitre.org/techniques/T1218/", + "subtechnique": [ + { + "id": "T1218.009", + "name": "Regsvcs/Regasm", + "reference": "https://attack.mitre.org/techniques/T1218/009/" + }, + { + "id": "T1218.010", + "name": "Regsvr32", + "reference": "https://attack.mitre.org/techniques/T1218/010/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 107 + }, + "id": "fb02b8d3-71ee-4af1-bacd-215d23f17efa_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fc7c0fa4-8f03-4b3e-8336-c5feab0be022_108.json b/packages/security_detection_engine/kibana/security_rule/fc7c0fa4-8f03-4b3e-8336-c5feab0be022_108.json new file mode 100644 index 00000000000..410f7dce623 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fc7c0fa4-8f03-4b3e-8336-c5feab0be022_108.json @@ -0,0 +1,147 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies User Account Control (UAC) bypass attempts by abusing an elevated COM Interface to launch a malicious program. Attackers may attempt to bypass UAC to stealthily execute code with elevated permissions.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "UAC Bypass Attempt via Elevated COM Internet Explorer Add-On Installer", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and\n process.executable : \"C:\\\\*\\\\AppData\\\\*\\\\Temp\\\\IDC*.tmp\\\\*.exe\" and\n process.parent.name : \"ieinstal.exe\" and process.parent.args : \"-Embedding\"\n\n /* uncomment once in winlogbeat */\n /* and not (process.code_signature.subject_name == \"Microsoft Corporation\" and process.code_signature.trusted == true) */\n", + "references": [ + "https://swapcontext.blogspot.com/2020/11/uac-bypasses-from-comautoapprovallist.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "fc7c0fa4-8f03-4b3e-8336-c5feab0be022", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.002", + "name": "Bypass User Account Control", + "reference": "https://attack.mitre.org/techniques/T1548/002/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1559", + "name": "Inter-Process Communication", + "reference": "https://attack.mitre.org/techniques/T1559/", + "subtechnique": [ + { + "id": "T1559.001", + "name": "Component Object Model", + "reference": "https://attack.mitre.org/techniques/T1559/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 108 + }, + "id": "fc7c0fa4-8f03-4b3e-8336-c5feab0be022_108", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fd4a992d-6130-4802-9ff8-829b89ae801f_109.json b/packages/security_detection_engine/kibana/security_rule/fd4a992d-6130-4802-9ff8-829b89ae801f_109.json new file mode 100644 index 00000000000..aa266b08ad0 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fd4a992d-6130-4802-9ff8-829b89ae801f_109.json @@ -0,0 +1,119 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "The Application Shim was created to allow for backward compatibility of software as the operating system codebase changes over time. This Windows functionality has been abused by attackers to stealthily gain persistence and arbitrary code execution in legitimate Windows processes.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "endgame-*", + "logs-system.security*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Application Shimming via Sdbinst", + "query": "process where host.os.type == \"windows\" and event.type == \"start\" and process.name : \"sdbinst.exe\" and\n not (process.args : \"-m\" and process.args : \"-bg\") and\n not process.args : \"-mm\"\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fd4a992d-6130-4802-9ff8-829b89ae801f", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.011", + "name": "Application Shimming", + "reference": "https://attack.mitre.org/techniques/T1546/011/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.011", + "name": "Application Shimming", + "reference": "https://attack.mitre.org/techniques/T1546/011/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "fd4a992d-6130-4802-9ff8-829b89ae801f_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fd7a6052-58fa-4397-93c3-4795249ccfa2_210.json b/packages/security_detection_engine/kibana/security_rule/fd7a6052-58fa-4397-93c3-4795249ccfa2_210.json new file mode 100644 index 00000000000..3b84d9e7b5c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fd7a6052-58fa-4397-93c3-4795249ccfa2_210.json @@ -0,0 +1,106 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a suspicious parent child process relationship with cmd.exe descending from svchost.exe", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.*", + "logs-system.security*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Svchost spawning Cmd", + "new_terms_fields": [ + "host.id", + "process.command_line", + "user.id" + ], + "note": "## Triage and analysis\n\n### Investigating Svchost spawning Cmd\n\nThe Service Host process (SvcHost) is a system process that can host one, or multiple, Windows services in the Windows NT family of operating systems. Note that `Svchost.exe` is reserved for use by the operating system and should not be used by non-Windows services.\n\nThis rule looks for the creation of the `cmd.exe` process with `svchost.exe` as its parent process. This is an unusual behavior that can indicate the masquerading of a malicious process as `svchost.exe` or exploitation for privilege escalation.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate any abnormal behavior by the subject process such as network connections, registry or file modifications, and any spawned child processes.\n- Examine the host for derived artifacts that indicate suspicious activities:\n - Analyze the process executable using a private sandboxed analysis system.\n - Observe and collect information about the following activities in both the sandbox and the alert subject host:\n - Attempts to contact external domains and addresses.\n - Use the Elastic Defend network events to determine domains and addresses contacted by the subject process by filtering by the process' `process.entity_id`.\n - Examine the DNS cache for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve DNS Cache\",\"query\":\"SELECT * FROM dns_cache\"}}\n - Use the Elastic Defend registry events to examine registry keys accessed, modified, or created by the related processes in the process tree.\n - Examine the host services for suspicious or anomalous entries.\n - !{osquery{\"label\":\"Osquery - Retrieve All Services\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Services Running on User Accounts\",\"query\":\"SELECT description, display_name, name, path, pid, service_type, start_type, status, user_account FROM services WHERE\\nNOT (user_account LIKE '%LocalSystem' OR user_account LIKE '%LocalService' OR user_account LIKE '%NetworkService' OR\\nuser_account == null)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Service Unsigned Executables with Virustotal Link\",\"query\":\"SELECT concat('https://www.virustotal.com/gui/file/', sha1) AS VtLink, name, description, start_type, status, pid,\\nservices.path FROM services JOIN authenticode ON services.path = authenticode.path OR services.module_path =\\nauthenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.result != 'trusted'\\n\"}}\n - Retrieve the files' SHA-256 hash values using the PowerShell `Get-FileHash` cmdlet and search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n- Investigate potentially compromised accounts. Analysts can do this by searching for login events (for example, 4624) to the target host after the registry modification.\n\n\n### False positive analysis\n\n- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type:windows and event.category:process and event.type:start and process.parent.name:\"svchost.exe\" and process.name:(\"cmd.exe\" or \"Cmd.exe\" or \"CMD.EXE\")\n", + "references": [ + "https://nasbench.medium.com/demystifying-the-svchost-exe-process-and-its-command-line-options-508e9114e747" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + }, + { + "package": "system", + "version": "^1.6.4" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fd7a6052-58fa-4397-93c3-4795249ccfa2", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Execution", + "Resources: Investigation Guide", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/" + } + ] + } + ], + "timeline_id": "e70679c2-6cde-4510-9764-4823df18f7db", + "timeline_title": "Comprehensive Process Timeline", + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 210 + }, + "id": "fd7a6052-58fa-4397-93c3-4795249ccfa2_210", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fda1d332-5e08-4f27-8a9b-8c802e3292a6_7.json b/packages/security_detection_engine/kibana/security_rule/fda1d332-5e08-4f27-8a9b-8c802e3292a6_7.json new file mode 100644 index 00000000000..adf8dcfd638 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fda1d332-5e08-4f27-8a9b-8c802e3292a6_7.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for the copying or moving of a system binary to a suspicious directory. Adversaries may copy/move and rename system binaries to evade detection. Copying a system binary to a different location should not occur often, so if it does, the activity should be investigated.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "System Binary Copied and/or Moved to Suspicious Directory", + "query": "sequence by host.id, process.entity_id with maxspan=1s\n [process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name in (\"cp\", \"mv\") and process.args : (\n // Shells\n \"/bin/*sh\", \"/usr/bin/*sh\", \n\n // Interpreters\n \"/bin/python*\", \"/usr/bin/python*\", \"/bin/php*\", \"/usr/bin/php*\", \"/bin/ruby*\", \"/usr/bin/ruby*\", \"/bin/perl*\",\n \"/usr/bin/perl*\", \"/bin/lua*\", \"/usr/bin/lua*\", \"/bin/java*\", \"/usr/bin/java*\", \n\n // Compilers\n \"/bin/gcc*\", \"/usr/bin/gcc*\", \"/bin/g++*\", \"/usr/bin/g++*\", \"/bin/cc\", \"/usr/bin/cc\",\n\n // Suspicious utilities\n \"/bin/nc\", \"/usr/bin/nc\", \"/bin/ncat\", \"/usr/bin/ncat\", \"/bin/netcat\", \"/usr/bin/netcat\", \"/bin/nc.openbsd\",\n \"/usr/bin/nc.openbsd\", \"/bin/*awk\", \"/usr/bin/*awk\", \"/bin/socat\", \"/usr/bin/socat\", \"/bin/openssl\",\n \"/usr/bin/openssl\", \"/bin/telnet\", \"/usr/bin/telnet\", \"/bin/mkfifo\", \"/usr/bin/mkfifo\", \"/bin/mknod\",\n \"/usr/bin/mknod\", \"/bin/ping*\", \"/usr/bin/ping*\", \"/bin/nmap\", \"/usr/bin/nmap\",\n\n // System utilities\n \"/bin/ls\", \"/usr/bin/ls\", \"/bin/cat\", \"/usr/bin/cat\", \"/bin/sudo\", \"/usr/bin/sudo\", \"/bin/curl\", \"/usr/bin/curl\",\n \"/bin/wget\", \"/usr/bin/wget\", \"/bin/tmux\", \"/usr/bin/tmux\", \"/bin/screen\", \"/usr/bin/screen\", \"/bin/ssh\",\n \"/usr/bin/ssh\", \"/bin/ftp\", \"/usr/bin/ftp\"\n ) and not process.parent.name in (\"dracut-install\", \"apticron\", \"generate-from-dir\", \"platform-python\")]\n [file where host.os.type == \"linux\" and event.action == \"creation\" and file.path : (\n \"/dev/shm/*\", \"/run/shm/*\", \"/tmp/*\", \"/var/tmp/*\", \"/run/*\", \"/var/run/*\", \"/var/www/*\", \"/proc/*/fd/*\"\n ) and not file.path : (\"/tmp/rear*\", \"/var/tmp/rear*\", \"/var/tmp/dracut*\", \"/var/tmp/mkinitramfs*\")]\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fda1d332-5e08-4f27-8a9b-8c802e3292a6", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1564", + "name": "Hide Artifacts", + "reference": "https://attack.mitre.org/techniques/T1564/" + }, + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/", + "subtechnique": [ + { + "id": "T1036.003", + "name": "Rename System Utilities", + "reference": "https://attack.mitre.org/techniques/T1036/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 7 + }, + "id": "fda1d332-5e08-4f27-8a9b-8c802e3292a6_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fddff193-48a3-484d-8d35-90bb3d323a56_4.json b/packages/security_detection_engine/kibana/security_rule/fddff193-48a3-484d-8d35-90bb3d323a56_4.json new file mode 100644 index 00000000000..117cdbffcf8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fddff193-48a3-484d-8d35-90bb3d323a56_4.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Detects PowerShell scripts that have the capability of dumping Kerberos tickets from LSA, which potentially indicates an attacker's attempt to acquire credentials for lateral movement.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Kerberos Ticket Dump", + "note": "## Triage and analysis\n\n### Investigating PowerShell Kerberos Ticket Dump\n\nKerberos is an authentication protocol that relies on tickets to grant access to network resources. Adversaries may abuse this protocol to acquire credentials for lateral movement within a network.\n\nThis rule indicates the use of scripts that contain code capable of dumping Kerberos tickets, which can indicate potential PowerShell abuse for credential theft.\n\n### Possible investigation steps\n\n- Examine the script content that triggered the detection; look for suspicious DLL imports, collection or exfiltration capabilities, suspicious functions, encoded or compressed data, and other potentially malicious characteristics.\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Investigate if the script was executed, and if so, which account was targeted.\n- Identify the account involved and contact the owner to confirm whether they are aware of this activity.\n- Check if the script has any other functionality that can be potentially malicious.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Investigate other potentially compromised accounts and hosts. Review login events (like 4624) for suspicious events involving the subject and target accounts.\n\n### False positive analysis\n\n- If this activity is expected and noisy in your environment, consider adding exceptions \u2014 preferably with a combination of file path and user ID conditions.\n\n### Related Rules\n\n- PowerShell Kerberos Ticket Request - eb610e70-f9e6-4949-82b9-f1c5bcd37c39\n\n### Response and Remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n - If malicious activity is confirmed, perform a broader investigation to identify the scope of the compromise and determine the appropriate remediation steps.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Disable or limit involved accounts during the investigation and response.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Reimage the host operating system or restore the compromised files to clean versions.\n- Restrict PowerShell usage outside of IT and engineering business units using GPOs, AppLocker, Intune, or similar software.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "event.category:process and host.os.type:windows and\n powershell.file.script_block_text : (\n \"LsaCallAuthenticationPackage\" and\n (\n \"KerbRetrieveEncodedTicketMessage\" or\n \"KerbQueryTicketCacheMessage\" or\n \"KerbQueryTicketCacheExMessage\" or\n \"KerbQueryTicketCacheEx2Message\" or\n \"KerbRetrieveTicketMessage\" or\n \"KerbDecryptDataMessage\"\n )\n )\n", + "references": [ + "https://github.com/MzHmO/PowershellKerberos/blob/main/dumper.ps1" + ], + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + } + ], + "risk_score": 47, + "rule_id": "fddff193-48a3-484d-8d35-90bb3d323a56", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Data Source: PowerShell Logs" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0006", + "name": "Credential Access", + "reference": "https://attack.mitre.org/tactics/TA0006/" + }, + "technique": [ + { + "id": "T1003", + "name": "OS Credential Dumping", + "reference": "https://attack.mitre.org/techniques/T1003/" + }, + { + "id": "T1558", + "name": "Steal or Forge Kerberos Tickets", + "reference": "https://attack.mitre.org/techniques/T1558/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 4 + }, + "id": "fddff193-48a3-484d-8d35-90bb3d323a56_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fe25d5bc-01fa-494a-95ff-535c29cc4c96_5.json b/packages/security_detection_engine/kibana/security_rule/fe25d5bc-01fa-494a-95ff-535c29cc4c96_5.json new file mode 100644 index 00000000000..40298b4a0ae --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fe25d5bc-01fa-494a-95ff-535c29cc4c96_5.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "building_block_type": "default", + "description": "Identifies the use of Cmdlets and methods related to remote execution activities using WinRM. Attackers can abuse WinRM to perform lateral movement using built-in tools.", + "from": "now-119m", + "index": [ + "winlogbeat-*", + "logs-windows.powershell*" + ], + "interval": "60m", + "language": "kuery", + "license": "Elastic License v2", + "name": "PowerShell Script with Password Policy Discovery Capabilities", + "query": "event.category: \"process\" and host.os.type:windows and\n(\n powershell.file.script_block_text: (\n \"Get-ADDefaultDomainPasswordPolicy\" or\n \"Get-ADFineGrainedPasswordPolicy\" or\n \"Get-ADUserResultantPasswordPolicy\" or\n \"Get-DomainPolicy\" or\n \"Get-GPPPassword\" or\n \"Get-PassPol\"\n )\n or\n powershell.file.script_block_text: (\n (\"defaultNamingContext\" or \"ActiveDirectory.DirectoryContext\" or \"ActiveDirectory.DirectorySearcher\") and\n (\n (\n \".MinLengthPassword\" or\n \".MinPasswordAge\" or\n \".MaxPasswordAge\"\n ) or\n (\n \"minPwdAge\" or\n \"maxPwdAge\" or\n \"minPwdLength\"\n ) or\n (\n \"msDS-PasswordSettings\"\n )\n )\n )\n) and not powershell.file.script_block_text : (\n \"sentinelbreakpoints\" and \"Set-PSBreakpoint\" and \"PowerSploitIndicators\"\n )\n and not \n (\n powershell.file.script_block_text : (\"43c15630-959c-49e4-a977-758c5cc93408\" and \"CmdletsToExport\" and \"ActiveDirectory.Types.ps1xml\")\n )\n and not user.id : \"S-1-5-18\"\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "powershell.file.script_block_text", + "type": "unknown" + }, + { + "ecs": true, + "name": "user.id", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "fe25d5bc-01fa-494a-95ff-535c29cc4c96", + "setup": "## Setup\n\nThe 'PowerShell Script Block Logging' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add \"hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Discovery", + "Tactic: Execution", + "Data Source: PowerShell Logs", + "Rule Type: BBR" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0007", + "name": "Discovery", + "reference": "https://attack.mitre.org/tactics/TA0007/" + }, + "technique": [ + { + "id": "T1201", + "name": "Password Policy Discovery", + "reference": "https://attack.mitre.org/techniques/T1201/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1059", + "name": "Command and Scripting Interpreter", + "reference": "https://attack.mitre.org/techniques/T1059/", + "subtechnique": [ + { + "id": "T1059.001", + "name": "PowerShell", + "reference": "https://attack.mitre.org/techniques/T1059/001/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 5 + }, + "id": "fe25d5bc-01fa-494a-95ff-535c29cc4c96_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/fe794edd-487f-4a90-b285-3ee54f2af2d3_109.json b/packages/security_detection_engine/kibana/security_rule/fe794edd-487f-4a90-b285-3ee54f2af2d3_109.json new file mode 100644 index 00000000000..a0324d9e1a2 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/fe794edd-487f-4a90-b285-3ee54f2af2d3_109.json @@ -0,0 +1,104 @@ +{ + "attributes": { + "author": [ + "Austin Songer" + ], + "description": "Identifies when one or more features on Microsoft Defender are disabled. Adversaries may disable or tamper with Microsoft Defender features to evade detection and conceal malicious behavior.", + "false_positives": [ + "Legitimate Windows Defender configuration changes" + ], + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-endpoint.events.*", + "logs-windows.sysmon_operational-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Microsoft Windows Defender Tampering", + "note": "## Triage and analysis\n\n### Investigating Microsoft Windows Defender Tampering\n\nMicrosoft Windows Defender is an antivirus product built into Microsoft Windows, which makes it popular across multiple environments. Disabling it is a common step in threat actor playbooks.\n\nThis rule monitors the registry for modifications that disable Windows Defender features.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the account owner and confirm whether they are aware of this activity.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Examine which features have been disabled, and check if this operation is done under change management and approved according to the organization's policy.\n\n### False positive analysis\n\n- This mechanism can be used legitimately. Analysts can dismiss the alert if the administrator is aware of the activity, the configuration is justified (for example, it is being used to deploy other security solutions or troubleshooting), and no other suspicious activity has been observed.\n\n### Related rules\n\n- Windows Defender Disabled via Registry Modification - 2ffa1f1e-b6db-47fa-994b-1512743847eb\n- Disabling Windows Defender Security Settings via PowerShell - c8cccb06-faf2-4cd5-886e-2c9636cfcb87\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved hosts to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Take actions to restore the appropriate Windows Defender antivirus configurations.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type in (\"creation\", \"change\") and\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\PUAProtection\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender Security Center\\\\App and Browser protection\\\\DisallowExploitProtectionOverride\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\DisableAntiSpyware\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Features\\\\TamperProtection\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Real-Time Protection\\\\DisableRealtimeMonitoring\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Real-Time Protection\\\\DisableIntrusionPreventionSystem\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Real-Time Protection\\\\DisableScriptScanning\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Windows Defender Exploit Guard\\\\Controlled Folder Access\\\\EnableControlledFolderAccess\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Real-Time Protection\\\\DisableIOAVProtection\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Reporting\\\\DisableEnhancedNotifications\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\SpyNet\\\\DisableBlockAtFirstSeen\" and\n registry.data.strings : (\"1\", \"0x00000001\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\SpyNet\\\\SpynetReporting\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\SpyNet\\\\SubmitSamplesConsent\" and\n registry.data.strings : (\"0\", \"0x00000000\")) or\n (registry.path : \"HKLM\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows Defender\\\\Real-Time Protection\\\\DisableBehaviorMonitoring\" and\n registry.data.strings : (\"1\", \"0x00000001\"))\n", + "references": [ + "https://thedfirreport.com/2021/10/18/icedid-to-xinglocker-ransomware-in-24-hours/", + "https://www.tenforums.com/tutorials/32236-enable-disable-microsoft-defender-pua-protection-windows-10-a.html", + "https://www.tenforums.com/tutorials/104025-turn-off-core-isolation-memory-integrity-windows-10-a.html", + "https://www.tenforums.com/tutorials/105533-enable-disable-windows-defender-exploit-protection-settings.html", + "https://www.tenforums.com/tutorials/123792-turn-off-tamper-protection-microsoft-defender-antivirus.html", + "https://www.tenforums.com/tutorials/51514-turn-off-microsoft-defender-periodic-scanning-windows-10-a.html", + "https://www.tenforums.com/tutorials/3569-turn-off-real-time-protection-microsoft-defender-antivirus.html", + "https://www.tenforums.com/tutorials/99576-how-schedule-scan-microsoft-defender-antivirus-windows-10-a.html" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "fe794edd-487f-4a90-b285-3ee54f2af2d3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1562", + "name": "Impair Defenses", + "reference": "https://attack.mitre.org/techniques/T1562/" + }, + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 109 + }, + "id": "fe794edd-487f-4a90-b285-3ee54f2af2d3_109", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/feeed87c-5e95-4339-aef1-47fd79bcfbe3_107.json b/packages/security_detection_engine/kibana/security_rule/feeed87c-5e95-4339-aef1-47fd79bcfbe3_107.json new file mode 100644 index 00000000000..50cf192d30f --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/feeed87c-5e95-4339-aef1-47fd79bcfbe3_107.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Microsoft Office Products offer options for users and developers to control the security settings for running and using Macros. Adversaries may abuse these security settings to modify the default behavior of the Office Application to trust future macros and/or disable security warnings, which could increase their chances of establishing persistence.", + "from": "now-9m", + "index": [ + "winlogbeat-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "MS Office Macro Security Registry Modifications", + "note": "## Triage and analysis\n\n### Investigating MS Office Macro Security Registry Modifications\n\nMacros are small programs that are used to automate repetitive tasks in Microsoft Office applications. Historically, macros have been used for a variety of reasons -- from automating part of a job, to building entire processes and data flows. Macros are written in Visual Basic for Applications (VBA) and are saved as part of Microsoft Office files.\n\nMacros are often created for legitimate reasons, but they can also be written by attackers to gain access, harm a system, or bypass other security controls such as application allow listing. In fact, exploitation from malicious macros is one of the top ways that organizations are compromised today. These attacks are often conducted through phishing or spear phishing campaigns.\n\nAttackers can convince victims to modify Microsoft Office security settings, so their macros are trusted by default and no warnings are displayed when they are executed. These settings include:\n\n- *Trust access to the VBA project object model* - When enabled, Microsoft Office will trust all macros and run any code without showing a security warning or requiring user permission.\n- *VbaWarnings* - When set to 1, Microsoft Office will trust all macros and run any code without showing a security warning or requiring user permission.\n\nThis rule looks for registry changes affecting the conditions above.\n\n#### Possible investigation steps\n\n- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.\n- Identify the user account that performed the action and whether it should perform this kind of action.\n- Contact the user and check if the change was done manually.\n- Verify whether malicious macros were executed after the registry change.\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Retrieve recently executed Office documents and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - File and registry access, modification, and creation activities.\n - Service creation and launch activities.\n - Scheduled task creation.\n - Use the PowerShell Get-FileHash cmdlet to get the files' SHA-256 hash values.\n - Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.\n\n### False positive analysis\n\n- This activity should not happen legitimately. The security team should address any potential benign true positive (B-TP), as this configuration can put the user and the domain at risk.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Reset the registry key value.\n- Isolate the involved host to prevent further post-compromise behavior.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Explore using GPOs to manage security settings for Microsoft Office macros.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "registry where host.os.type == \"windows\" and event.type == \"change\" and\n registry.path : (\n \"HKU\\\\S-1-5-21-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\AccessVBOM\",\n \"HKU\\\\S-1-5-21-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\VbaWarnings\",\n \"HKU\\\\S-1-12-1-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\AccessVBOM\",\n \"HKU\\\\S-1-12-1-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\VbaWarnings\",\n \"\\\\REGISTRY\\\\USER\\\\S-1-5-21-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\AccessVBOM\",\n \"\\\\REGISTRY\\\\USER\\\\S-1-5-21-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\VbaWarnings\",\n \"\\\\REGISTRY\\\\USER\\\\S-1-12-1-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\AccessVBOM\",\n \"\\\\REGISTRY\\\\USER\\\\S-1-12-1-*\\\\SOFTWARE\\\\Microsoft\\\\Office\\\\*\\\\Security\\\\VbaWarnings\"\n ) and\n registry.data.strings : (\"0x00000001\", \"1\") and\n process.name : (\"cscript.exe\", \"wscript.exe\", \"mshta.exe\", \"mshta.exe\", \"winword.exe\", \"excel.exe\")\n", + "related_integrations": [ + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "registry.data.strings", + "type": "wildcard" + }, + { + "ecs": true, + "name": "registry.path", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "feeed87c-5e95-4339-aef1-47fd79bcfbe3", + "setup": "## Setup\n\nIf enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2,\nevents will not define `event.ingested` and default fallback for EQL rules was not added until version 8.2.\nHence for this rule to work effectively, users will need to add a custom ingest pipeline to populate\n`event.ingested` to @timestamp.\nFor more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Resources: Investigation Guide", + "Data Source: Elastic Endgame", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1112", + "name": "Modify Registry", + "reference": "https://attack.mitre.org/techniques/T1112/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1204", + "name": "User Execution", + "reference": "https://attack.mitre.org/techniques/T1204/", + "subtechnique": [ + { + "id": "T1204.002", + "name": "Malicious File", + "reference": "https://attack.mitre.org/techniques/T1204/002/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 107 + }, + "id": "feeed87c-5e95-4339-aef1-47fd79bcfbe3_107", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ff0d807d-869b-4a0d-a493-52bc46d2f1b1_3.json b/packages/security_detection_engine/kibana/security_rule/ff0d807d-869b-4a0d-a493-52bc46d2f1b1_3.json new file mode 100644 index 00000000000..c41dcf07e1d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ff0d807d-869b-4a0d-a493-52bc46d2f1b1_3.json @@ -0,0 +1,64 @@ +{ + "attributes": { + "anomaly_threshold": 70, + "author": [ + "Elastic" + ], + "description": "A population analysis machine learning job detected potential DGA (domain generation algorithm) activity. Such activity is often used by malware command and control (C2) channels. This machine learning job looks for a source IP address making DNS requests that have an aggregate high probability of being DGA activity.", + "from": "now-45m", + "interval": "15m", + "license": "Elastic License v2", + "machine_learning_job_id": "dga_high_sum_probability", + "name": "Potential DGA Activity", + "references": [ + "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html", + "https://docs.elastic.co/en/integrations/dga", + "https://www.elastic.co/security-labs/detect-domain-generation-algorithm-activity-with-new-kibana-integration" + ], + "related_integrations": [ + { + "package": "dga", + "version": "^2.0.0" + }, + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "network_traffic", + "version": "^1.1.0" + } + ], + "risk_score": 21, + "rule_id": "ff0d807d-869b-4a0d-a493-52bc46d2f1b1", + "setup": "## Setup\n\nThe rule requires the Domain Generation Algorithm (DGA) Detection integration assets to be installed, as well as DNS events collected by integrations such as Elastic Defend, Network Packet Capture, or Packetbeat. \n\n### DGA Detection Setup\nThe DGA Detection integration consists of an ML-based framework to detect DGA activity in DNS events.\n\n#### Prerequisite Requirements:\n- Fleet is required for DGA Detection.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n- DNS events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint), [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration, or [Packetbeat](https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-overview.html).\n- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.\n- To set up and run Packetbeat, follow [this](https://www.elastic.co/guide/en/beats/packetbeat/current/setting-up-and-running.html) guide.\n\n#### The following steps should be executed to install assets associated with the DGA Detection integration:\n- Go to the Kibana homepage. Under Management, click Integrations.\n- In the query bar, search for Domain Generation Algorithm Detection and select the integration to see more details about it.\n- Under Settings, click Install Domain Generation Algorithm Detection assets and follow the prompts to install the assets.\n\n#### Ingest Pipeline Setup\nBefore you can enable this rule, you'll need to enrich DNS events with predictions from the Supervised DGA Detection model. This is done via the ingest pipeline named `-ml_dga_ingest_pipeline` installed with the DGA Detection package.\n- If using an Elastic Beat such as Packetbeat, add the DGA ingest pipeline to it by adding a simple configuration [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html#pipelines-for-beats) to `packetbeat.yml`.\n- If adding the DGA ingest pipeline to an existing pipeline, use a [pipeline processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html).\n\n#### Adding Custom Mappings\n- Go to the Kibana homepage. Under Management, click Stack Management.\n- Under Data click Index Management and navigate to the Component Templates tab.\n- Templates that can be edited to add custom components will be marked with a @custom suffix. Edit the @custom component template corresponding to the beat/integration you added the DGA ingest pipeline to, by pasting the following JSON blob in the \"Load JSON\" flyout:\n```\n{\n \"properties\": {\n \"ml_is_dga\": {\n \"properties\": {\n \"malicious_prediction\": {\n \"type\": \"long\"\n },\n \"malicious_probability\": {\n \"type\": \"float\"\n }\n }\n }\n }\n}\n```\n\n### Anomaly Detection Setup\nBefore you can enable this rule, you'll need to enable the corresponding Anomaly Detection job. \n- Go to the Kibana homepage. Under Analytics, click Machine Learning.\n- Under Anomaly Detection, click Jobs, and then click \"Create job\". Select the Data View containing your enriched DNS events. For example, this would be `logs-endpoint.events.*` if you used Elastic Defend to collect events, or `logs-network_traffic.*` if you used Network Packet Capture.\n- If the selected Data View contains events that match the query in [this](https://github.com/elastic/integrations/blob/main/packages/dga/kibana/ml_module/dga-ml.json) configuration file, you will see a card for DGA under \"Use preconfigured jobs\".\n- Keep the default settings and click \"Create jobs\" to start the anomaly detection job and datafeed.\n", + "severity": "low", + "tags": [ + "Use Case: Domain Generation Algorithm Detection", + "Rule Type: ML", + "Rule Type: Machine Learning", + "Tactic: Command and Control" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1568", + "name": "Dynamic Resolution", + "reference": "https://attack.mitre.org/techniques/T1568/" + } + ] + } + ], + "type": "machine_learning", + "version": 3 + }, + "id": "ff0d807d-869b-4a0d-a493-52bc46d2f1b1_3", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ff10d4d8-fea7-422d-afb1-e5a2702369a9_9.json b/packages/security_detection_engine/kibana/security_rule/ff10d4d8-fea7-422d-afb1-e5a2702369a9_9.json new file mode 100644 index 00000000000..add59f0b981 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ff10d4d8-fea7-422d-afb1-e5a2702369a9_9.json @@ -0,0 +1,157 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Linux cron jobs are scheduled tasks that can be leveraged by malicious actors for persistence, privilege escalation and command execution. By creating or modifying cron job configurations, attackers can execute malicious commands or scripts at predefined intervals, ensuring their continued presence and enabling unauthorized activities.", + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Cron Job Created or Changed by Previously Unknown Process", + "new_terms_fields": [ + "host.id", + "file.path", + "process.executable" + ], + "note": "## Triage and analysis\n\n### Investigating Cron Job Created or Changed by Previously Unknown Process\nLinux cron jobs are scheduled tasks that run at specified intervals or times, managed by the cron daemon. \n\nBy creating or modifying cron job configurations, attackers can execute malicious commands or scripts at predefined intervals, ensuring their continued presence and enabling unauthorized activities.\n\nThis rule monitors the creation of previously unknown cron jobs by monitoring for file creation events in the most common cron job task location directories.\n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible Investigation Steps\n\n- Investigate the cron job file that was created or modified.\n- Investigate whether any other files in any of the available cron job directories have been altered through OSQuery.\n - !{osquery{\"label\":\"Osquery - Retrieve File Listing Information\",\"query\":\"SELECT * FROM file WHERE (\\n path LIKE '/etc/cron.allow.d/%' OR\\n path LIKE '/etc/cron.d/%' OR\\n path LIKE '/etc/cron.hourly/%' OR\\n path LIKE '/etc/cron.daily/%' OR\\n path LIKE '/etc/cron.weekly/%' OR\\n path LIKE '/etc/cron.monthly/%'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve rc-local.service File Information\",\"query\":\"SELECT * FROM file WHERE (\\n path = '/etc/cron.allow' OR\\n path = '/etc/cron.deny' OR\\n path = '/etc/crontab' OR\\n path = '/usr/sbin/cron' OR\\n path = '/usr/sbin/anacron'\\n)\\n\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Additional File Listing Information\",\"query\":\"SELECT\\n f.path,\\n u.username AS file_owner,\\n g.groupname AS group_owner,\\n datetime(f.atime, 'unixepoch') AS file_last_access_time,\\n datetime(f.mtime, 'unixepoch') AS file_last_modified_time,\\n datetime(f.ctime, 'unixepoch') AS file_last_status_change_time,\\n datetime(f.btime, 'unixepoch') AS file_created_time,\\n f.size AS size_bytes\\nFROM\\n file f\\n LEFT JOIN users u ON f.uid = u.uid\\n LEFT JOIN groups g ON f.gid = g.gid\\nWHERE (\\n path LIKE '/etc/cron.allow.d/%' OR\\n path LIKE '/etc/cron.d/%' OR\\n path LIKE '/etc/cron.hourly/%' OR\\n path LIKE '/etc/cron.daily/%' OR\\n path LIKE '/etc/cron.weekly/%' OR\\n path LIKE '/etc/cron.monthly/%'\\n)\\n\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, network administrator activity, or legitimate software installations.\n- Investigate whether the altered scripts call other malicious scripts elsewhere on the file system. \n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n- Investigate abnormal behaviors by the subject process/user such as network connections, file modifications, and any other spawned child processes.\n - Investigate listening ports and open sockets to look for potential command and control traffic or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n - Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n\n### False Positive Analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator who uses cron jobs for administrative purposes, consider adding exceptions for this specific administrator user account. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Related Rules\n\n- Suspicious File Creation in /etc for Persistence - 1c84dd64-7e6c-4bad-ac73-a5014ee37042\n- Potential Persistence Through Run Control Detected - 0f4d35e4-925e-4959-ab24-911be207ee6f\n- Potential Persistence Through init.d Detected - 474fd20e-14cc-49c5-8160-d9ab4ba16c8b\n- New Systemd Timer Created - 7fb500fa-8e24-4bd1-9480-2a819352602c\n- New Systemd Service Created by Previously Unknown Process - 17b0a495-4d9f-414c-8ad0-92f018b8e001\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Delete the service/timer or restore its original configuration.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "host.os.type : \"linux\" and event.action : (\"change\" or \"file_modify_event\" or \"creation\" or \"file_create_event\") and \nfile.path : (/etc/cron.allow or /etc/cron.deny or /etc/cron.d/* or /etc/cron.hourly/* or /etc/cron.daily/* or \n/etc/cron.weekly/* or /etc/cron.monthly/* or /etc/crontab or /usr/sbin/cron or /usr/sbin/anacron) \nand not (\n (process.name : (\"dpkg\" or \"dockerd\" or \"rpm\" or \"snapd\" or \"yum\" or \"exe\" or \"dnf\" or \"podman\" or \n \"dnf-automatic\" or puppet or autossl_check )) or \n (file.extension : (\"swp\" or \"swpx\")) or \n (process.name : \"sed\" and file.name : sed*) or \n (process.name : \"perl\" and file.name : e2scrub_all.tmp*) or\n (process.executable : /var/lib/dpkg*)\n)\n", + "references": [ + "https://pberba.github.io/security/2022/01/30/linux-threat-hunting-for-persistence-systemd-timers-cron/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ff10d4d8-fea7-422d-afb1-e5a2702369a9", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Tactic: Privilege Escalation", + "Tactic: Execution", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0002", + "name": "Execution", + "reference": "https://attack.mitre.org/tactics/TA0002/" + }, + "technique": [ + { + "id": "T1053", + "name": "Scheduled Task/Job", + "reference": "https://attack.mitre.org/techniques/T1053/", + "subtechnique": [ + { + "id": "T1053.003", + "name": "Cron", + "reference": "https://attack.mitre.org/techniques/T1053/003/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 9 + }, + "id": "ff10d4d8-fea7-422d-afb1-e5a2702369a9_9", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ff4dd44a-0ac6-44c4-8609-3f81bc820f02_105.json b/packages/security_detection_engine/kibana/security_rule/ff4dd44a-0ac6-44c4-8609-3f81bc820f02_105.json new file mode 100644 index 00000000000..e0e0287471d --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ff4dd44a-0ac6-44c4-8609-3f81bc820f02_105.json @@ -0,0 +1,90 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a transport rule creation in Microsoft 365. As a best practice, Exchange Online mail transport rules should not be set to forward email to domains outside of your organization. An adversary may create transport rules to exfiltrate data.", + "false_positives": [ + "A new transport rule may be created by a system or network administrator. Verify that the configuration change was expected. Exceptions can be added to this rule to filter expected behavior." + ], + "from": "now-30m", + "index": [ + "filebeat-*", + "logs-o365*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Microsoft 365 Exchange Transport Rule Creation", + "note": "", + "query": "event.dataset:o365.audit and event.provider:Exchange and event.category:web and event.action:\"New-TransportRule\" and event.outcome:success\n", + "references": [ + "https://docs.microsoft.com/en-us/powershell/module/exchange/new-transportrule?view=exchange-ps", + "https://docs.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/mail-flow-rules" + ], + "related_integrations": [ + { + "package": "o365", + "version": "^2.0.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.dataset", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.outcome", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.provider", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ff4dd44a-0ac6-44c4-8609-3f81bc820f02", + "setup": "The Office 365 Logs Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule.", + "severity": "medium", + "tags": [ + "Domain: Cloud", + "Data Source: Microsoft 365", + "Use Case: Configuration Audit", + "Tactic: Exfiltration" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1537", + "name": "Transfer Data to Cloud Account", + "reference": "https://attack.mitre.org/techniques/T1537/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "query", + "version": 105 + }, + "id": "ff4dd44a-0ac6-44c4-8609-3f81bc820f02_105", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/ff9bc8b9-f03b-4283-be58-ee0a16f5a11b_5.json b/packages/security_detection_engine/kibana/security_rule/ff9bc8b9-f03b-4283-be58-ee0a16f5a11b_5.json new file mode 100644 index 00000000000..d99d88e8fc8 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/ff9bc8b9-f03b-4283-be58-ee0a16f5a11b_5.json @@ -0,0 +1,118 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule detects potential sudo token manipulation attacks through process injection by monitoring the use of a debugger (gdb) process followed by a successful uid change event during the execution of the sudo process. A sudo token manipulation attack is performed by injecting into a process that has a valid sudo token, which can then be used by attackers to activate their own sudo token. This attack requires ptrace to be enabled in conjunction with the existence of a living process that has a valid sudo token with the same uid as the current user.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Sudo Token Manipulation via Process Injection", + "query": "sequence by host.id, process.session_leader.entity_id with maxspan=15s\n[ process where host.os.type == \"linux\" and event.type == \"start\" and event.action == \"exec\" and \n process.name == \"gdb\" and process.user.id != \"0\" and process.group.id != \"0\" ]\n[ process where host.os.type == \"linux\" and event.action == \"uid_change\" and event.type == \"change\" and \n process.name == \"sudo\" and process.user.id == \"0\" and process.group.id == \"0\" ]\n", + "references": [ + "https://github.com/nongiach/sudo_inject" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.id", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": false, + "name": "process.group.id", + "type": "unknown" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.session_leader.entity_id", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.user.id", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "ff9bc8b9-f03b-4283-be58-ee0a16f5a11b", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1055", + "name": "Process Injection", + "reference": "https://attack.mitre.org/techniques/T1055/", + "subtechnique": [ + { + "id": "T1055.008", + "name": "Ptrace System Calls", + "reference": "https://attack.mitre.org/techniques/T1055/008/" + } + ] + }, + { + "id": "T1548", + "name": "Abuse Elevation Control Mechanism", + "reference": "https://attack.mitre.org/techniques/T1548/", + "subtechnique": [ + { + "id": "T1548.003", + "name": "Sudo and Sudo Caching", + "reference": "https://attack.mitre.org/techniques/T1548/003/" + } + ] + } + ] + } + ], + "type": "eql", + "version": 5 + }, + "id": "ff9bc8b9-f03b-4283-be58-ee0a16f5a11b_5", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/manifest.yml b/packages/security_detection_engine/manifest.yml index 60c93691ca3..bb1ca065ffd 100644 --- a/packages/security_detection_engine/manifest.yml +++ b/packages/security_detection_engine/manifest.yml @@ -19,4 +19,4 @@ source: license: Elastic-2.0 title: Prebuilt Security Detection Rules type: integration -version: 8.13.1 +version: 8.13.2-beta.1 From 796a21dfa83e13072a468a9d39581543c95de49e Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 07:38:50 +1030 Subject: [PATCH 24/33] barracuda,barracuda_cloudgen_firewall: update manifest version format to v3.0.3 (#9390) --- packages/barracuda/changelog.yml | 5 +++++ packages/barracuda/manifest.yml | 4 ++-- packages/barracuda_cloudgen_firewall/changelog.yml | 5 +++++ packages/barracuda_cloudgen_firewall/manifest.yml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/barracuda/changelog.yml b/packages/barracuda/changelog.yml index fef1ca672a3..85bb4c9035e 100644 --- a/packages/barracuda/changelog.yml +++ b/packages/barracuda/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.12.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9390 - version: "1.11.2" changes: - description: Changed owners diff --git a/packages/barracuda/manifest.yml b/packages/barracuda/manifest.yml index 3e5c422dac1..7f921d6dacb 100644 --- a/packages/barracuda/manifest.yml +++ b/packages/barracuda/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.1" +format_version: "3.0.3" name: barracuda title: "Barracuda Web Application Firewall" -version: "1.11.2" +version: "1.12.0" description: "Collect logs from Barracuda Web Application Firewall with Elastic Agent." type: integration source: diff --git a/packages/barracuda_cloudgen_firewall/changelog.yml b/packages/barracuda_cloudgen_firewall/changelog.yml index c1eea6d8cd2..8ea2464cbc3 100644 --- a/packages/barracuda_cloudgen_firewall/changelog.yml +++ b/packages/barracuda_cloudgen_firewall/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.11.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9390 - version: "1.10.1" changes: - description: Changed owners diff --git a/packages/barracuda_cloudgen_firewall/manifest.yml b/packages/barracuda_cloudgen_firewall/manifest.yml index 751ef008aac..9821b00bf6c 100644 --- a/packages/barracuda_cloudgen_firewall/manifest.yml +++ b/packages/barracuda_cloudgen_firewall/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: barracuda_cloudgen_firewall title: Barracuda CloudGen Firewall Logs -version: "1.10.1" +version: "1.11.0" description: Collect logs from Barracuda CloudGen Firewall devices with Elastic Agent. categories: ["network", "security", "firewall_security"] type: integration From 436df0c40645acb41f660faa0e974debcb51216e Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 07:39:21 +1030 Subject: [PATCH 25/33] carbonblack_edr,cribl,cyberark_pta,cyberarkpas: update manifest version format to v3.0.3 (#9399) --- packages/carbonblack_edr/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-http-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-logfile-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-udp-config.yml | 2 ++ packages/carbonblack_edr/manifest.yml | 4 ++-- packages/cribl/changelog.yml | 5 +++++ packages/cribl/manifest.yml | 4 ++-- packages/cyberark_pta/changelog.yml | 5 +++++ .../data_stream/events/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/events/_dev/test/system/test-udp-config.yml | 2 ++ packages/cyberark_pta/manifest.yml | 4 ++-- packages/cyberarkpas/changelog.yml | 5 +++++ .../audit/_dev/test/system/test-logfile-config.yml | 2 ++ .../data_stream/audit/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/audit/_dev/test/system/test-tls-config.yml | 2 ++ .../data_stream/audit/_dev/test/system/test-udp-config.yml | 5 +++++ packages/cyberarkpas/manifest.yml | 4 ++-- 18 files changed, 51 insertions(+), 8 deletions(-) diff --git a/packages/carbonblack_edr/changelog.yml b/packages/carbonblack_edr/changelog.yml index 96f769c3961..776174ec3a9 100644 --- a/packages/carbonblack_edr/changelog.yml +++ b/packages/carbonblack_edr/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9399 - version: "1.16.2" changes: - description: Changed owners diff --git a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-http-config.yml b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-http-config.yml index bdd56f0c19f..e541ea0e844 100644 --- a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-http-config.yml +++ b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-http-config.yml @@ -15,3 +15,5 @@ numeric_keyword_fields: - carbonblack.edr.segment_id - carbonblack.edr.sensor_id - rule.id +assert: + hit_count: 21 diff --git a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-logfile-config.yml b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-logfile-config.yml index e55c2a819d4..3237e028ab8 100644 --- a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-logfile-config.yml +++ b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-logfile-config.yml @@ -13,3 +13,5 @@ numeric_keyword_fields: - carbonblack.edr.segment_id - carbonblack.edr.sensor_id - rule.id +assert: + hit_count: 21 diff --git a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-tcp-config.yml b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-tcp-config.yml index a52baab279d..39b560cc338 100644 --- a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-tcp-config.yml +++ b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-tcp-config.yml @@ -15,3 +15,5 @@ numeric_keyword_fields: - carbonblack.edr.segment_id - carbonblack.edr.sensor_id - rule.id +assert: + hit_count: 21 diff --git a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-udp-config.yml b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-udp-config.yml index fdb19629873..0fbe453506d 100644 --- a/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-udp-config.yml +++ b/packages/carbonblack_edr/data_stream/log/_dev/test/system/test-udp-config.yml @@ -15,3 +15,5 @@ numeric_keyword_fields: - carbonblack.edr.segment_id - carbonblack.edr.sensor_id - rule.id +assert: + hit_count: 21 diff --git a/packages/carbonblack_edr/manifest.yml b/packages/carbonblack_edr/manifest.yml index f3e50dbe2f1..97243c9291e 100644 --- a/packages/carbonblack_edr/manifest.yml +++ b/packages/carbonblack_edr/manifest.yml @@ -1,9 +1,9 @@ name: carbonblack_edr title: VMware Carbon Black EDR -version: "1.16.2" +version: "1.17.0" description: Collect logs from VMware Carbon Black EDR with Elastic Agent. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: [security, edr_xdr] conditions: kibana: diff --git a/packages/cribl/changelog.yml b/packages/cribl/changelog.yml index dcdfa1383a6..cb5384708cb 100644 --- a/packages/cribl/changelog.yml +++ b/packages/cribl/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.3.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9399 - version: "0.2.0" changes: - description: Adds the second phase of the Cribl package diff --git a/packages/cribl/manifest.yml b/packages/cribl/manifest.yml index b516f2c11bf..66cb85b6031 100644 --- a/packages/cribl/manifest.yml +++ b/packages/cribl/manifest.yml @@ -1,7 +1,7 @@ -format_version: 3.0.0 +format_version: 3.0.3 name: cribl title: "Cribl" -version: 0.2.0 +version: 0.3.0 description: Stream logs from Cribl into Elastic. type: integration categories: diff --git a/packages/cyberark_pta/changelog.yml b/packages/cyberark_pta/changelog.yml index bb924202189..8e4720b2b39 100644 --- a/packages/cyberark_pta/changelog.yml +++ b/packages/cyberark_pta/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.9.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9399 - version: "1.8.1" changes: - description: Changed owners diff --git a/packages/cyberark_pta/data_stream/events/_dev/test/system/test-tcp-config.yml b/packages/cyberark_pta/data_stream/events/_dev/test/system/test-tcp-config.yml index a18ff7a476b..6a8791195c4 100644 --- a/packages/cyberark_pta/data_stream/events/_dev/test/system/test-tcp-config.yml +++ b/packages/cyberark_pta/data_stream/events/_dev/test/system/test-tcp-config.yml @@ -6,3 +6,5 @@ data_stream: syslog_host: 0.0.0.0 syslog_port: 9514 preserve_original_event: true +assert: + hit_count: 2 diff --git a/packages/cyberark_pta/data_stream/events/_dev/test/system/test-udp-config.yml b/packages/cyberark_pta/data_stream/events/_dev/test/system/test-udp-config.yml index 60732f6d8db..ef7455639aa 100644 --- a/packages/cyberark_pta/data_stream/events/_dev/test/system/test-udp-config.yml +++ b/packages/cyberark_pta/data_stream/events/_dev/test/system/test-udp-config.yml @@ -6,3 +6,5 @@ data_stream: syslog_host: 0.0.0.0 syslog_port: 9514 preserve_original_event: true +assert: + hit_count: 2 diff --git a/packages/cyberark_pta/manifest.yml b/packages/cyberark_pta/manifest.yml index 28b3461ac39..de0895d9166 100644 --- a/packages/cyberark_pta/manifest.yml +++ b/packages/cyberark_pta/manifest.yml @@ -1,9 +1,9 @@ name: cyberark_pta title: Cyberark Privileged Threat Analytics -version: "1.8.1" +version: "1.9.0" description: Collect security logs from Cyberark PTA integration. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: ["security", "iam"] conditions: kibana: diff --git a/packages/cyberarkpas/changelog.yml b/packages/cyberarkpas/changelog.yml index b71a5486a4d..f4784d57d0a 100644 --- a/packages/cyberarkpas/changelog.yml +++ b/packages/cyberarkpas/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.20.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9399 - version: "2.19.3" changes: - description: Clean up null handling, formatting diff --git a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-logfile-config.yml b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-logfile-config.yml index ff054650eef..8d1df5b6a92 100644 --- a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-logfile-config.yml +++ b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-logfile-config.yml @@ -7,3 +7,5 @@ data_stream: numeric_keyword_fields: - process.pid - log.syslog.priority +assert: + hit_count: 343 \ No newline at end of file diff --git a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tcp-config.yml b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tcp-config.yml index 820456bc236..69ffe017bc4 100644 --- a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tcp-config.yml +++ b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tcp-config.yml @@ -5,3 +5,5 @@ data_stream: vars: syslog_host: 0.0.0.0 syslog_port: 9999 +assert: + hit_count: 343 \ No newline at end of file diff --git a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tls-config.yml b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tls-config.yml index 10b4f68e038..8009c1a76dc 100644 --- a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tls-config.yml +++ b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-tls-config.yml @@ -56,3 +56,5 @@ data_stream: BdcwL671AnnDY3GUxcmX7n8/E4lFwQEf5G4IbKa+/fIm4y4wzkINHYnCeTvVPHUZ rcZR4kw7O4cWsLR4NHJBosUVoaeoCizBB6xLREqISxIZuHKuEcYsRA== -----END RSA PRIVATE KEY----- +assert: + hit_count: 343 \ No newline at end of file diff --git a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-udp-config.yml b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-udp-config.yml index 4f2e86af14d..fbf6e26e702 100644 --- a/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-udp-config.yml +++ b/packages/cyberarkpas/data_stream/audit/_dev/test/system/test-udp-config.yml @@ -5,3 +5,8 @@ data_stream: vars: syslog_host: 0.0.0.0 syslog_port: 9999 +# Do not assert hit count for this input. Locally, the constraint is +# satisfied, but on CI, apparently the UDP input drops too many (>0) +# messages. +# assert: +# hit_count: 343 \ No newline at end of file diff --git a/packages/cyberarkpas/manifest.yml b/packages/cyberarkpas/manifest.yml index 2886f545443..248acd14c07 100644 --- a/packages/cyberarkpas/manifest.yml +++ b/packages/cyberarkpas/manifest.yml @@ -1,9 +1,9 @@ name: cyberarkpas title: CyberArk Privileged Access Security -version: "2.19.3" +version: "2.20.0" description: Collect logs from CyberArk Privileged Access Security with Elastic Agent. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: ["security", "iam"] conditions: kibana: From 0cd817a50cfd03e49b1dbd4d21b8daa91b0e48a3 Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 07:39:34 +1030 Subject: [PATCH 26/33] darktrace,fireeye,infoblox_nios,jamf_compliance_reporter,keycloak: update manifest version format to v3.0.3 (#9402) --- packages/darktrace/changelog.yml | 5 +++++ .../_dev/test/system/test-httpjson-config.yml | 2 ++ .../ai_analyst_alert/_dev/test/system/test-tcp-config.yml | 2 ++ .../ai_analyst_alert/_dev/test/system/test-tls-config.yml | 2 ++ .../ai_analyst_alert/_dev/test/system/test-udp-config.yml | 2 ++ .../_dev/test/pipeline/test-common-config.yml | 2 ++ .../_dev/test/system/test-httpjson-config.yml | 4 ++++ .../model_breach_alert/_dev/test/system/test-tcp-config.yml | 4 ++++ .../model_breach_alert/_dev/test/system/test-tls-config.yml | 4 ++++ .../model_breach_alert/_dev/test/system/test-udp-config.yml | 4 ++++ .../data_stream/model_breach_alert/fields/fields.yml | 2 +- .../system_status_alert/_dev/test/system/test-tcp-config.yml | 2 ++ .../system_status_alert/_dev/test/system/test-tls-config.yml | 2 ++ .../system_status_alert/_dev/test/system/test-udp-config.yml | 2 ++ packages/darktrace/docs/README.md | 2 +- packages/darktrace/manifest.yml | 4 ++-- .../fireeye/_dev/deploy/docker/sample_logs/fireeye-nx.log | 2 +- packages/fireeye/changelog.yml | 5 +++++ .../data_stream/nx/_dev/test/system/test-default-config.yml | 2 ++ .../data_stream/nx/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/nx/_dev/test/system/test-udp-config.yml | 2 ++ packages/fireeye/manifest.yml | 4 ++-- packages/infoblox_nios/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-logfile-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-udp-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-udp-tz-config.yml | 2 ++ packages/infoblox_nios/manifest.yml | 4 ++-- packages/jamf_compliance_reporter/changelog.yml | 5 +++++ .../log/_dev/test/system/test-http-endpoint-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-tcp-config.yml | 2 ++ packages/jamf_compliance_reporter/manifest.yml | 4 ++-- packages/keycloak/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-logfile-config.yml | 2 ++ .../log/_dev/test/system/test-logfile-non-utc-config.yml | 2 ++ packages/keycloak/manifest.yml | 4 ++-- 36 files changed, 92 insertions(+), 13 deletions(-) diff --git a/packages/darktrace/changelog.yml b/packages/darktrace/changelog.yml index 17bc417fbd4..c90e902916d 100644 --- a/packages/darktrace/changelog.yml +++ b/packages/darktrace/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.16.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9402 - version: "1.15.0" changes: - description: Set sensitive values as secret. diff --git a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-httpjson-config.yml b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-httpjson-config.yml index 81b8a00d092..2ec1692ba0e 100644 --- a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-httpjson-config.yml +++ b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-httpjson-config.yml @@ -9,3 +9,5 @@ data_stream: vars: preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 1 diff --git a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tcp-config.yml b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tcp-config.yml index 53314b710b8..b71ab66f339 100644 --- a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tcp-config.yml +++ b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tcp-config.yml @@ -8,3 +8,5 @@ data_stream: listen_port: 9571 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tls-config.yml b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tls-config.yml index d3819b60c78..2c4f4b106ff 100644 --- a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tls-config.yml +++ b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-tls-config.yml @@ -60,3 +60,5 @@ data_stream: listen_port: 9571 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-udp-config.yml b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-udp-config.yml index 0d9b6eb6f0e..57cccaca329 100644 --- a/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-udp-config.yml +++ b/packages/darktrace/data_stream/ai_analyst_alert/_dev/test/system/test-udp-config.yml @@ -8,3 +8,5 @@ data_stream: listen_port: 9574 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/data_stream/model_breach_alert/_dev/test/pipeline/test-common-config.yml b/packages/darktrace/data_stream/model_breach_alert/_dev/test/pipeline/test-common-config.yml index be41bb0d476..2799c3dfdd8 100644 --- a/packages/darktrace/data_stream/model_breach_alert/_dev/test/pipeline/test-common-config.yml +++ b/packages/darktrace/data_stream/model_breach_alert/_dev/test/pipeline/test-common-config.yml @@ -2,3 +2,5 @@ fields: tags: - preserve_original_event - preserve_duplicate_custom_fields +numeric_keyword_fields: + - darktrace.model_breach_alert.triggered_components.triggered_filters.arguments.value diff --git a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-httpjson-config.yml b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-httpjson-config.yml index 81b8a00d092..57cf8b59b58 100644 --- a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-httpjson-config.yml +++ b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-httpjson-config.yml @@ -9,3 +9,7 @@ data_stream: vars: preserve_original_event: true preserve_duplicate_custom_fields: true +numeric_keyword_fields: + - darktrace.model_breach_alert.triggered_components.triggered_filters.arguments.value +assert: + hit_count: 1 diff --git a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tcp-config.yml b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tcp-config.yml index db13b8d1220..40459035336 100644 --- a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tcp-config.yml +++ b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tcp-config.yml @@ -8,3 +8,7 @@ data_stream: listen_port: 9572 preserve_original_event: true preserve_duplicate_custom_fields: true +numeric_keyword_fields: + - darktrace.model_breach_alert.triggered_components.triggered_filters.arguments.value +assert: + hit_count: 4 diff --git a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tls-config.yml b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tls-config.yml index 0343a55d8d8..e5f7075c2d8 100644 --- a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tls-config.yml +++ b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-tls-config.yml @@ -60,3 +60,7 @@ data_stream: listen_port: 9572 preserve_original_event: true preserve_duplicate_custom_fields: true +numeric_keyword_fields: + - darktrace.model_breach_alert.triggered_components.triggered_filters.arguments.value +assert: + hit_count: 4 diff --git a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-udp-config.yml b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-udp-config.yml index c18b3883870..e53246e2920 100644 --- a/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-udp-config.yml +++ b/packages/darktrace/data_stream/model_breach_alert/_dev/test/system/test-udp-config.yml @@ -8,3 +8,7 @@ data_stream: listen_port: 9575 preserve_original_event: true preserve_duplicate_custom_fields: true +numeric_keyword_fields: + - darktrace.model_breach_alert.triggered_components.triggered_filters.arguments.value +assert: + hit_count: 4 \ No newline at end of file diff --git a/packages/darktrace/data_stream/model_breach_alert/fields/fields.yml b/packages/darktrace/data_stream/model_breach_alert/fields/fields.yml index a9723624791..8517545ab29 100644 --- a/packages/darktrace/data_stream/model_breach_alert/fields/fields.yml +++ b/packages/darktrace/data_stream/model_breach_alert/fields/fields.yml @@ -405,7 +405,7 @@ - name: expiry type: long description: nan - - name: isReferenced + - name: is_referenced type: boolean description: nan - name: name diff --git a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tcp-config.yml b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tcp-config.yml index 063df1e59b0..de520d458c3 100644 --- a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tcp-config.yml +++ b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tcp-config.yml @@ -8,3 +8,5 @@ data_stream: listen_port: 9573 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tls-config.yml b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tls-config.yml index 81f051da6d4..02d2b21c7a3 100644 --- a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tls-config.yml +++ b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-tls-config.yml @@ -60,3 +60,5 @@ data_stream: listen_port: 9573 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-udp-config.yml b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-udp-config.yml index cc4f6b075d4..16fb080160e 100644 --- a/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-udp-config.yml +++ b/packages/darktrace/data_stream/system_status_alert/_dev/test/system/test-udp-config.yml @@ -8,3 +8,5 @@ data_stream: listen_port: 9576 preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 2 diff --git a/packages/darktrace/docs/README.md b/packages/darktrace/docs/README.md index 64caf73775f..d53a8e5530f 100644 --- a/packages/darktrace/docs/README.md +++ b/packages/darktrace/docs/README.md @@ -1205,7 +1205,7 @@ An example event for `model_breach_alert` looks as following: | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.data.description | | keyword | | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.data.visibility | | keyword | | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.expiry | nan | long | -| darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.isReferenced | nan | boolean | +| darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.is_referenced | nan | boolean | | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.name | nan | keyword | | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.restricted | nan | boolean | | darktrace.model_breach_alert.triggered_components.triggered_filters.trigger.tag.thid | nan | long | diff --git a/packages/darktrace/manifest.yml b/packages/darktrace/manifest.yml index 585a1a5787e..4476d0137c8 100644 --- a/packages/darktrace/manifest.yml +++ b/packages/darktrace/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: darktrace title: Darktrace -version: "1.15.0" +version: "1.16.0" description: Collect logs from Darktrace with Elastic Agent. type: integration categories: diff --git a/packages/fireeye/_dev/deploy/docker/sample_logs/fireeye-nx.log b/packages/fireeye/_dev/deploy/docker/sample_logs/fireeye-nx.log index a8930a3c74a..29a8c5d577d 100644 --- a/packages/fireeye/_dev/deploy/docker/sample_logs/fireeye-nx.log +++ b/packages/fireeye/_dev/deploy/docker/sample_logs/fireeye-nx.log @@ -12,4 +12,4 @@ {"rawmsg":"{\"timestamp\":\"2020-09-23T05:02:21.282370+0000\",\"flow_id\":1444203537876422,\"iface\":\"pether3\",\"event_type\":\"http\",\"src_ip\":\"192.168.1.222\",\"src_port\":47220,\"dest_ip\":\"192.168.100.31\",\"dest_port\":5601,\"proto\":\"TCP\",\"tx_id\":2,\"http\":{\"hostname\":\"192.168.100.31\",\"url\":\"\\/internal\\/search\\/es\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/85.0.4183.102 Safari\\/537.36\",\"http_content_type\":\"application\\/json\",\"http_refer\":\"http:\\/\\/192.168.100.31:5601\\/app\\/kibana\",\"http_method\":\"POST\",\"protocol\":\"HTTP\\/1.1\",\"status\":200,\"length\":729}}\n","meta_sip4":"192.168.1.99","meta_oml":598,"deviceid":"860665216674","meta_cbname":"fireeye-7e0de1"} {"rawmsg":"{\"timestamp\":\"2020-09-23T05:03:27.260035+0000\",\"flow_id\":1312034511612776,\"iface\":\"pether3\",\"event_type\":\"http\",\"src_ip\":\"192.168.1.222\",\"src_port\":44191,\"dest_ip\":\"192.168.100.31\",\"dest_port\":5601,\"proto\":\"TCP\",\"tx_id\":15,\"http\":{\"hostname\":\"192.168.100.31\",\"url\":\"\\/internal\\/search\\/es\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/85.0.4183.102 Safari\\/537.36\",\"http_content_type\":\"application\\/json\",\"http_refer\":\"http:\\/\\/192.168.100.31:5601\\/app\\/kibana\",\"http_method\":\"POST\",\"protocol\":\"HTTP\\/1.1\",\"status\":200,\"length\":318}}\n","meta_sip4":"192.168.1.99","meta_oml":599,"deviceid":"860665216674","meta_cbname":"fireeye-7e0de1"} {"rawmsg":"{\"timestamp\":\"2020-09-23T05:03:28.132214+0000\",\"flow_id\":1312034511612776,\"iface\":\"pether3\",\"event_type\":\"fileinfo\",\"src_ip\":\"192.168.100.31\",\"src_port\":5601,\"dest_ip\":\"192.168.1.222\",\"dest_port\":44191,\"proto\":\"TCP\",\"http\":{\"hostname\":\"192.168.100.31\",\"url\":\"\\/internal\\/search\\/es\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/85.0.4183.102 Safari\\/537.36\",\"http_content_type\":\"application\\/json\",\"http_refer\":\"http:\\/\\/192.168.100.31:5601\\/app\\/kibana\",\"http_method\":\"POST\",\"protocol\":\"HTTP\\/1.1\",\"status\":200,\"length\":318},\"app_proto\":\"http\",\"fileinfo\":{\"filename\":\"\\/internal\\/search\\/es\",\"magic\":\"ASCII text, with very long lines, with no line terminators\",\"state\":\"CLOSED\",\"md5\":\"5a767f56dc36f6051d23ef803775e8e9\",\"stored\":false,\"size\":318,\"tx_id\":15}}\n","meta_sip4":"192.168.1.99","meta_oml":824,"deviceid":"860665216674","meta_cbname":"fireeye-7e0de1"} -{"rawmsg":"{\"timestamp\":\"2020-09-23T05:03:28.209311+0000\",\"flow_id\":1312034511612776,\"iface\":\"pether3\",\"event_type\":\"fileinfo\",\"src_ip\":\"192.168.1.222\",\"src_port\":44191,\"dest_ip\":\"192.168.100.31\",\"dest_port\":5601,\"proto\":\"TCP\",\"http\":{\"hostname\":\"192.168.100.31\",\"url\":\"\\/internal\\/search\\/es\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/85.0.4183.102 Safari\\/537.36\",\"http_refer\":\"http:\\/\\/192.168.100.31:5601\\/app\\/kibana\",\"http_method\":\"POST\",\"protocol\":\"HTTP\\/1.1\",\"length\":0},\"app_proto\":\"http\",\"fileinfo\":{\"filename\":\"\\/internal\\/search\\/es\",\"magic\":\"ASCII text, with no line terminators\",\"state\":\"CLOSED\",\"md5\":\"51b856867e8f4ec089d623b92c81f128\",\"stored\":false,\"size\":107,\"tx_id\":16}}\n","meta_sip4":"192.168.1.99","meta_oml":747,"deviceid":"860665216674","meta_cbname":"fireeye-7e0de1"} \ No newline at end of file +{"rawmsg":"{\"timestamp\":\"2020-09-23T05:03:28.209311+0000\",\"flow_id\":1312034511612776,\"iface\":\"pether3\",\"event_type\":\"fileinfo\",\"src_ip\":\"192.168.1.222\",\"src_port\":44191,\"dest_ip\":\"192.168.100.31\",\"dest_port\":5601,\"proto\":\"TCP\",\"http\":{\"hostname\":\"192.168.100.31\",\"url\":\"\\/internal\\/search\\/es\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/85.0.4183.102 Safari\\/537.36\",\"http_refer\":\"http:\\/\\/192.168.100.31:5601\\/app\\/kibana\",\"http_method\":\"POST\",\"protocol\":\"HTTP\\/1.1\",\"length\":0},\"app_proto\":\"http\",\"fileinfo\":{\"filename\":\"\\/internal\\/search\\/es\",\"magic\":\"ASCII text, with no line terminators\",\"state\":\"CLOSED\",\"md5\":\"51b856867e8f4ec089d623b92c81f128\",\"stored\":false,\"size\":107,\"tx_id\":16}}\n","meta_sip4":"192.168.1.99","meta_oml":747,"deviceid":"860665216674","meta_cbname":"fireeye-7e0de1"} diff --git a/packages/fireeye/changelog.yml b/packages/fireeye/changelog.yml index d597b8ca06e..ed0e6d63b36 100644 --- a/packages/fireeye/changelog.yml +++ b/packages/fireeye/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.22.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9402 - version: "1.21.2" changes: - description: Changed owners diff --git a/packages/fireeye/data_stream/nx/_dev/test/system/test-default-config.yml b/packages/fireeye/data_stream/nx/_dev/test/system/test-default-config.yml index 0953c2c225a..bbab37637d5 100644 --- a/packages/fireeye/data_stream/nx/_dev/test/system/test-default-config.yml +++ b/packages/fireeye/data_stream/nx/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ data_stream: vars: paths: - "{{SERVICE_LOGS_DIR}}/fireeye-nx.log" +assert: + hit_count: 15 diff --git a/packages/fireeye/data_stream/nx/_dev/test/system/test-tcp-config.yml b/packages/fireeye/data_stream/nx/_dev/test/system/test-tcp-config.yml index 866517ffa75..61612538c63 100644 --- a/packages/fireeye/data_stream/nx/_dev/test/system/test-tcp-config.yml +++ b/packages/fireeye/data_stream/nx/_dev/test/system/test-tcp-config.yml @@ -5,3 +5,5 @@ data_stream: vars: tcp_host: 0.0.0.0 tcp_port: 9523 +assert: + hit_count: 15 diff --git a/packages/fireeye/data_stream/nx/_dev/test/system/test-udp-config.yml b/packages/fireeye/data_stream/nx/_dev/test/system/test-udp-config.yml index 62c97968aeb..b1d72234da7 100644 --- a/packages/fireeye/data_stream/nx/_dev/test/system/test-udp-config.yml +++ b/packages/fireeye/data_stream/nx/_dev/test/system/test-udp-config.yml @@ -5,3 +5,5 @@ data_stream: vars: udp_host: 0.0.0.0 udp_port: 9523 +assert: + hit_count: 15 diff --git a/packages/fireeye/manifest.yml b/packages/fireeye/manifest.yml index caf481ff154..3c2e746df22 100644 --- a/packages/fireeye/manifest.yml +++ b/packages/fireeye/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: fireeye title: "FireEye Network Security" -version: "1.21.2" +version: "1.22.0" description: Collect logs from FireEye NX with Elastic Agent. type: integration categories: diff --git a/packages/infoblox_nios/changelog.yml b/packages/infoblox_nios/changelog.yml index ec6315d5258..d8ea99d8413 100644 --- a/packages/infoblox_nios/changelog.yml +++ b/packages/infoblox_nios/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9402 - version: "1.20.3" changes: - description: Remove incorrect `client.domain` mapping from dns logs. diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-logfile-config.yml b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-logfile-config.yml index bcf54b7dcc6..23b7d77d581 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-logfile-config.yml +++ b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-logfile-config.yml @@ -6,3 +6,5 @@ vars: data_stream: vars: preserve_original_event: true +assert: + hit_count: 105 diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-tcp-config.yml b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-tcp-config.yml index d4096d36a44..e2498f650dc 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-tcp-config.yml +++ b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-tcp-config.yml @@ -7,3 +7,5 @@ data_stream: vars: listen_port: 9027 preserve_original_event: true +assert: + hit_count: 105 diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-config.yml b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-config.yml index e2b73a79118..6772c3c0bd6 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-config.yml +++ b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-config.yml @@ -7,3 +7,5 @@ data_stream: vars: listen_port: 9028 preserve_original_event: true +assert: + hit_count: 105 diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-tz-config.yml b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-tz-config.yml index 1dd259ec57d..d83a8bcaba0 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-tz-config.yml +++ b/packages/infoblox_nios/data_stream/log/_dev/test/system/test-udp-tz-config.yml @@ -8,3 +8,5 @@ data_stream: listen_port: 9028 preserve_original_event: true tz_offset: "+0500" +assert: + hit_count: 105 diff --git a/packages/infoblox_nios/manifest.yml b/packages/infoblox_nios/manifest.yml index 479ae475d18..a9513b78fe6 100644 --- a/packages/infoblox_nios/manifest.yml +++ b/packages/infoblox_nios/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: infoblox_nios title: Infoblox NIOS -version: "1.20.3" +version: "1.21.0" description: Collect logs from Infoblox NIOS with Elastic Agent. type: integration categories: diff --git a/packages/jamf_compliance_reporter/changelog.yml b/packages/jamf_compliance_reporter/changelog.yml index 9560b3865ea..d79e16252a3 100644 --- a/packages/jamf_compliance_reporter/changelog.yml +++ b/packages/jamf_compliance_reporter/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.12.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9402 - version: "1.11.2" changes: - description: Clean up null handling, other checks and scripting diff --git a/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-http-endpoint-config.yml b/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-http-endpoint-config.yml index d47b336671b..e4e6ec5845f 100644 --- a/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-http-endpoint-config.yml +++ b/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-http-endpoint-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_address: 0.0.0.0 listen_port: 9551 +assert: + hit_count: 53 diff --git a/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-tcp-config.yml b/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-tcp-config.yml index 2c71dba8300..80660b1d971 100644 --- a/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-tcp-config.yml +++ b/packages/jamf_compliance_reporter/data_stream/log/_dev/test/system/test-tcp-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_address: 0.0.0.0 listen_port: 9552 +assert: + hit_count: 53 diff --git a/packages/jamf_compliance_reporter/manifest.yml b/packages/jamf_compliance_reporter/manifest.yml index a5c56545d0f..88305aaa722 100644 --- a/packages/jamf_compliance_reporter/manifest.yml +++ b/packages/jamf_compliance_reporter/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: jamf_compliance_reporter title: Jamf Compliance Reporter -version: "1.11.2" +version: "1.12.0" description: Collect logs from Jamf Compliance Reporter with Elastic Agent. type: integration categories: diff --git a/packages/keycloak/changelog.yml b/packages/keycloak/changelog.yml index 21d3ba0cca1..73d4d82daa8 100644 --- a/packages/keycloak/changelog.yml +++ b/packages/keycloak/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9402 - version: "1.20.1" changes: - description: Changed owners diff --git a/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-config.yml b/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-config.yml index 22170cc500e..e73bc1b0eb9 100644 --- a/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-config.yml +++ b/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-config.yml @@ -14,3 +14,5 @@ numeric_keyword_fields: - log.file.idxhi - log.file.idxlo - log.file.vol +assert: + hit_count: 6 diff --git a/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-non-utc-config.yml b/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-non-utc-config.yml index eb587fbc368..fd52deb1f15 100644 --- a/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-non-utc-config.yml +++ b/packages/keycloak/data_stream/log/_dev/test/system/test-logfile-non-utc-config.yml @@ -14,3 +14,5 @@ numeric_keyword_fields: - log.file.idxhi - log.file.idxlo - log.file.vol +assert: + hit_count: 6 diff --git a/packages/keycloak/manifest.yml b/packages/keycloak/manifest.yml index 6c2970e7dfb..4970508ce32 100644 --- a/packages/keycloak/manifest.yml +++ b/packages/keycloak/manifest.yml @@ -1,9 +1,9 @@ name: keycloak title: Keycloak -version: "1.20.1" +version: "1.21.0" description: Collect logs from Keycloak with Elastic Agent. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: [security, iam] conditions: kibana: From 674b25a21474ea74268f9ca3b9a10d7e9cee587f Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 07:39:48 +1030 Subject: [PATCH 27/33] mattermost,netskope,pulse_connect_secure,santa,symantec_endpoint: update manifest version format to v3.0.3 (#9403) --- packages/mattermost/_dev/deploy/docker/sample_logs/audit.log | 2 +- packages/mattermost/changelog.yml | 5 +++++ .../audit/_dev/test/system/test-default-config.yml | 2 ++ packages/mattermost/manifest.yml | 4 ++-- packages/netskope/_dev/deploy/docker/sample_logs/alerts.log | 2 +- packages/netskope/_dev/deploy/docker/sample_logs/events.log | 2 +- packages/netskope/changelog.yml | 5 +++++ .../alerts/_dev/test/system/test-default-config.yml | 2 ++ .../events/_dev/test/system/test-default-config.yml | 2 ++ packages/netskope/manifest.yml | 4 ++-- packages/pulse_connect_secure/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-tls-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-udp-config.yml | 2 ++ packages/pulse_connect_secure/manifest.yml | 4 ++-- packages/santa/_dev/deploy/docker/sample_logs/santa.log | 2 +- packages/santa/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-default-config.yml | 2 ++ packages/santa/manifest.yml | 4 ++-- .../_dev/deploy/docker/sample_logs/symantec_endpoint.log | 2 +- packages/symantec_endpoint/changelog.yml | 5 +++++ .../data_stream/log/_dev/test/system/test-logfile-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-tcp-config.yml | 2 ++ .../data_stream/log/_dev/test/system/test-udp-config.yml | 2 ++ packages/symantec_endpoint/manifest.yml | 4 ++-- 25 files changed, 60 insertions(+), 15 deletions(-) diff --git a/packages/mattermost/_dev/deploy/docker/sample_logs/audit.log b/packages/mattermost/_dev/deploy/docker/sample_logs/audit.log index 80e2d366a55..6c02a837cf8 100644 --- a/packages/mattermost/_dev/deploy/docker/sample_logs/audit.log +++ b/packages/mattermost/_dev/deploy/docker/sample_logs/audit.log @@ -2,4 +2,4 @@ {"timestamp":"2021-12-04 23:19:48.599 Z","event":"updateConfig","status":"success","user_id":"ag99yu4i1if63jrui63tsmq57y","session_id":"pjh4n69j3p883k7hhzippskcba","ip_address":"172.19.0.1","api_path":"/api/v4/config","cluster_id":"jq3utry71f8a7q9qgebmjccf4r","client":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"} {"timestamp":"2021-12-04 23:19:51.324 Z","event":"Logout","status":"success","user_id":"ag99yu4i1if63jrui63tsmq57y","session_id":"pjh4n69j3p883k7hhzippskcba","ip_address":"172.19.0.1","api_path":"/api/v4/users/logout","cluster_id":"jq3utry71f8a7q9qgebmjccf4r","client":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"} {"timestamp":"2021-12-04 23:19:58.729 Z","event":"login","status":"success","user_id":"","session_id":"","ip_address":"172.19.0.1","api_path":"/api/v4/users/login","device_id":"","login_id":"admin","user":{"id":"ag99yu4i1if63jrui63tsmq57y","name":"admin","roles":"system_admin system_user"},"cluster_id":"jq3utry71f8a7q9qgebmjccf4r","client":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"} -{"timestamp":"2021-12-04 23:20:33.027 Z","event":"patchUser","status":"success","user_id":"ag99yu4i1if63jrui63tsmq57y","session_id":"mbz8h4gkxp8g3yzanizcpg43dc","ip_address":"172.19.0.1","api_path":"/api/v4/users/me/patch","patch":{"id":"ag99yu4i1if63jrui63tsmq57y","name":"admin","roles":"system_admin system_user"},"user":{"id":"ag99yu4i1if63jrui63tsmq57y","name":"admin","roles":"system_admin system_user"},"cluster_id":"jq3utry71f8a7q9qgebmjccf4r","client":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"} \ No newline at end of file +{"timestamp":"2021-12-04 23:20:33.027 Z","event":"patchUser","status":"success","user_id":"ag99yu4i1if63jrui63tsmq57y","session_id":"mbz8h4gkxp8g3yzanizcpg43dc","ip_address":"172.19.0.1","api_path":"/api/v4/users/me/patch","patch":{"id":"ag99yu4i1if63jrui63tsmq57y","name":"admin","roles":"system_admin system_user"},"user":{"id":"ag99yu4i1if63jrui63tsmq57y","name":"admin","roles":"system_admin system_user"},"cluster_id":"jq3utry71f8a7q9qgebmjccf4r","client":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"} diff --git a/packages/mattermost/changelog.yml b/packages/mattermost/changelog.yml index da3171f8f0a..49508cac48a 100644 --- a/packages/mattermost/changelog.yml +++ b/packages/mattermost/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.18.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9403 - version: "1.17.3" changes: - description: Clean up null handling and Painless scripts diff --git a/packages/mattermost/data_stream/audit/_dev/test/system/test-default-config.yml b/packages/mattermost/data_stream/audit/_dev/test/system/test-default-config.yml index 4752c5f892f..6ad78fdf904 100644 --- a/packages/mattermost/data_stream/audit/_dev/test/system/test-default-config.yml +++ b/packages/mattermost/data_stream/audit/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ data_stream: paths: - "{{SERVICE_LOGS_DIR}}/*.log" preserve_original_event: true +assert: + hit_count: 5 diff --git a/packages/mattermost/manifest.yml b/packages/mattermost/manifest.yml index 450da6e09af..d2ba2cade86 100644 --- a/packages/mattermost/manifest.yml +++ b/packages/mattermost/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: mattermost title: "Mattermost" -version: "1.17.3" +version: "1.18.0" description: Collect logs from Mattermost with Elastic Agent. type: integration categories: diff --git a/packages/netskope/_dev/deploy/docker/sample_logs/alerts.log b/packages/netskope/_dev/deploy/docker/sample_logs/alerts.log index 97b7363cdfb..474ca74c0ed 100644 --- a/packages/netskope/_dev/deploy/docker/sample_logs/alerts.log +++ b/packages/netskope/_dev/deploy/docker/sample_logs/alerts.log @@ -5,4 +5,4 @@ {"event":{"id":"045b4a05e63667d3b25279e1"},"netskope":{"alerts":{"insertion_epoch_timestamp":1643398205,"access_method":"Client","acked":"false","is_alert":"yes","alert":{"name":"example.com/images/favicon.ico","type":"malsite"},"type":"malsite","app":{"session":{"id":"5227418687549615144"},"category":"Prohibited Sites"},"browser":{"session":{"id":"3264708578582859888"}},"category":{"name":"Prohibited Sites"},"cci":"0","ccl":"unknown","connection":{"id":"0"},"count":1,"device":{"name":"Windows Device","classification":"unmanaged"},"is_malicious":"yes","malsite":{"category":"['Malicious Site']","country":"IN","id":"c4634b403efff5e7ae84eb59","ip_host":"45.114.142.143","latitude":17.3752803802,"longitude":78.4744415283,"region":"Telangana","severity":{"level":"med"}},"managed":{"app":"no"},"netskope_pop":"US-SFO1","organization":{"unit":"null"},"other":{"categories":"['Prohibited Sites', 'All Categories', 'Security Risk - Compromised/malicious sites', 'Security Risk - Malware Distribution Point', 'Security Risk']"},"page":{"url":"example.com/images/favicon.ico","site":"example"},"severity":{"level":"unknown","level_id":1},"site":"example","source":{"time":"Fri Jan 28 11:24:00 2022"},"telemetry":{"app":"example"},"threat":{"match":{"field":"url","value":"example.com/images/favicon.ico"},"source":{"id":"1"}},"traffic":{"type":"Web"},"transaction":{"id":"4272771780484953037"},"url":"example.com/images/favicon.ico","user":{"group":"null","ip":"81.2.69.143"},"action":"block","ip":{"protocol":"TCP"},"notify":{"template":"1.html"},"policy":{"name":"[Access Control] Prohibited Sites"},"referer":"https://examplesecuritycheck.com/"}},"user_agent":{"name":"Chrome","os":{"name":"Windows 10","version":"Windows 10"}},"destination":{"geo":{"country_iso_code":"IN","location":{"lat":17.3752803802,"lon":78.4744415283},"city_name":"Hyderabad","region_name":"Telangana","timezone":"Asia/Kolkata","postal_code":"N/A"},"ip":"81.2.69.143","address":"81.2.69.143"},"host":{"hostname":"Surface"},"network":{"protocol":"HTTPS/1.1"},"source":{"geo":{"country_iso_code":"US","location":{"lat":32.7994,"lon":-117.1686},"city_name":"San Diego","region_name":"California","timezone":"America/Los_Angeles","postal_code":"92111"},"ip":"81.2.69.143","address":"81.2.69.143"},"@timestamp":"2022-01-28T19:25:02.000Z","user":{"email":{"1":"user@example.com","2":"user@example.com","3":"user@example.com"}}} {"event":{"id":"9c4f8947f6326ff0ad79f4a3"},"netskope":{"alerts":{"insertion_epoch_timestamp":1643398226,"access_method":"Client","acked":"false","action":"Detection","activity":{"name":"Download"},"is_alert":"yes","alert":{"name":"Document-PDF.Exploit.CVE-2018-49","type":"nspolicy"},"type":"Malware","app":{"name":"examplesecuritycheck","app_name":"examplesecuritycheck","session":{"id":"5227418687549615144"},"category":"Security"},"category":{"name":"Security"},"ccl":"unknown","connection":{"id":"0"},"count":1,"detection":{"engine":"example Threat Intelligence"},"file":{"id":"9fd78f86b33b566883ede8de9bc92a59"},"instance":{"name":"null"},"malware":{"id":"78e527c7a66ea6bf74d2ca7e335a5685","name":"Document-PDF.Exploit.CVE-2018-49","profile":"5","severity":"high","type":"Trojan"},"ml_detection":"false","object":{"name":"9","type":"File"},"organization":{"unit":"null"},"other":{"categories":"['All Categories', 'Security']"},"scanner_result":"malicious","severity":{"level":"High","id":"3"},"site":"examplesecuritycheck","title":"9","traffic":{"type":"Web"},"tss":{"mode":"inline"},"user":{"group":"null"},"browser":{"session":{"id":"3264708578582859888"}},"device":{"name":"Windows Device","classification":"unmanaged"},"destination":{"geoip_src":1},"flow_status":"closed","ip":{"protocol":"TCP"},"ns_device_uid":"F546DEC0-AFF8-F1D5-1759-6721396ED3F8","page":{"url":"examplesecuritycheck.com/tests/execute/9","site":"examplesecuritycheck"},"referer":"https://examplesecuritycheck.com/","source":{"geoip_src":2,"time":"Fri Jan 28 11:25:00 2022"},"transaction":{"id":"8479039290096064292"},"is_web_universal_connector":"yes"}},"file":{"name":"9","size":1521,"mime_type":{"1":"application\\\\/vnd.apps.document"}},"threat":{"indicator":{"file":{"hash":{"md5":"e525a5e5570041dcae34fc342d3712da","sha256":"7d9a763411c73a4c7f85eb1f3cf04d6693696588b3fb3c98e8982bbe4245920c"}}}},"@timestamp":"2022-01-28T19:25:20.000Z","user":{"email":{"1":"user@example.com","2":"user@example.com","3":"user@example.com","4":"user@example.com"}},"user_agent":{"name":"Chrome","version":"97.0.4692.99","os":{"name":"Windows 10","version":"Windows 10"}},"destination":{"geo":{"country_iso_code":"US","location":{"lat":37.405991,"lon":-122.078514},"city_name":"Mountain View","region_name":"California","timezone":"America/Los_Angeles","postal_code":"N/A"},"ip":"81.2.69.143","address":"81.2.69.143"},"host":{"hostname":"Jenga-Surface"},"source":{"geo":{"location":{"lat":32.7994,"lon":-117.1686},"city_name":"San Diego","region_name":"California","timezone":"America/Los_Angeles","postal_code":"92111","country_iso_code":"US"},"ip":"81.2.69.143","address":"81.2.69.143"}} {"event":{"id":"b999bebb17c193b3350f16b3"},"netskope":{"alerts":{"insertion_epoch_timestamp":1643512589,"access_method":"Reverse Proxy","acked":"false","action":"anomaly_detection","activity":{"name":"Delete"},"is_alert":"yes","alert":{"id":"e6326f36925eb2959f0938315dbd3503","name":"Bulk Delete","type":"nspolicy"},"app":{"name":"SomeApp","category":"Cloud Storage"},"category":{"name":"Cloud Storage"},"cci":"52","ccl":"low","count":1,"device":{"name":"Mac Device","classification":"managed"},"destination":{"geoip_src":2},"event":{"type":"sequence"},"event_source_channel":"application","from":{"storage":"kandji-prd-managed-library-items"},"managed":{"app":"no"},"management":{"id":"918C405E48DD5115862A39150E5C7E06"},"ns_device_uid":"740E2C56-31F5-190E-F76F-CEC7D82710FE","object":{"name":"TNVaXVdogPIwDHZL","type":"Folder"},"organization":{"unit":"example.local/example/Active Users"},"orig_ty":"nspolicy","other":{"categories":"null"},"page":{"url":"kandji-prd-managed-library-items.example.com","site":"Some App"},"policy":{"name":"Bulk Delete","actions":"['Delete']"},"profile":{"id":"Bulk Delete"},"severity":{"level":"medium"},"site":"F-Secure VPN+","source":{"geoip_src":1},"telemetry":{"app":"none"},"threshold":{"value":100,"time":3600},"traffic":{"type":"CloudApp"},"transaction":{"id":"2401226170271289300"},"type":"uba","url":"zCyaZZIAMFPHEibU","user":{"ip":"81.2.69.143"}}},"user_agent":{"name":"Native","os":{"name":"Mojave","version":"Mojave"}},"destination":{"geo":{"country_iso_code":"US","location":{"lat":45.8234,"lon":-119.7257},"city_name":"Boardman","region_name":"Oregon","postal_code":"97818"},"address":"81.2.69.143","ip":"81.2.69.143"},"file":{"size":133067189,"mime_type":{"1":"application\\\\/vnd.apps.document"}},"host":{"hostname":"C02ZL3MPLVDR"},"source":{"geo":{"country_iso_code":"FR","location":{"lat":48.883411,"lon":2.23894},"city_name":"Puteaux","region_name":"Ile-de-France"},"address":"81.2.69.143","ip":"81.2.69.143"},"@timestamp":"2022-01-30T00:58:52.000Z","user":{"email":{"1":"userdte471@test.example.com","2":"USERDTE471@test.example.com","3":"USERDTE471@test.example.com"},"group":{"name":"null"}}} -{"event":{"id":"47eccb9569fe50460ad1200f"},"netskope":{"alerts":{"insertion_epoch_timestamp":1642755526,"acked":"false","is_alert":"yes","alert":{"name":"cit0day - download1.mios.com","type":"breach"},"type":"Compromised Credential","breach":{"date":1601942400,"description":"In September 2020, a threat actor began sharing the millions of stolen credentials that were associated with a prominent Dark Web credentials service shut down by US federal authorites in August 2020. The stolen credentials represent hundreds of websites and hundreds of millions of users and their associated passwords affected by the illegal antics of the threat actor who managed the now defunct Dark Web forum. Users and companies from all over the world were affected by these various breaches. This file contains the download1.mios.com accounts dump.","id":"bc6952df4c61b469cf4a47f17d0ea384","media_references":"null","score":40,"target_references":"null"},"category":{"name":"null"},"cci":"0","ccl":"unknown","count":1,"email":{"source":"Active"},"external":{"email":1},"matched":{"username":"user@example.com"},"organization":{"unit":"null"},"other":{"categories":"null"},"user":{"group":"null"},"app":{"category":"null"}}},"@timestamp":"2022-01-19T21:39:15.000Z","user":{"email":{"1":"user@example.com","2":"user@example.com","3":"user@example.com"}}} \ No newline at end of file +{"event":{"id":"47eccb9569fe50460ad1200f"},"netskope":{"alerts":{"insertion_epoch_timestamp":1642755526,"acked":"false","is_alert":"yes","alert":{"name":"cit0day - download1.mios.com","type":"breach"},"type":"Compromised Credential","breach":{"date":1601942400,"description":"In September 2020, a threat actor began sharing the millions of stolen credentials that were associated with a prominent Dark Web credentials service shut down by US federal authorites in August 2020. The stolen credentials represent hundreds of websites and hundreds of millions of users and their associated passwords affected by the illegal antics of the threat actor who managed the now defunct Dark Web forum. Users and companies from all over the world were affected by these various breaches. This file contains the download1.mios.com accounts dump.","id":"bc6952df4c61b469cf4a47f17d0ea384","media_references":"null","score":40,"target_references":"null"},"category":{"name":"null"},"cci":"0","ccl":"unknown","count":1,"email":{"source":"Active"},"external":{"email":1},"matched":{"username":"user@example.com"},"organization":{"unit":"null"},"other":{"categories":"null"},"user":{"group":"null"},"app":{"category":"null"}}},"@timestamp":"2022-01-19T21:39:15.000Z","user":{"email":{"1":"user@example.com","2":"user@example.com","3":"user@example.com"}}} diff --git a/packages/netskope/_dev/deploy/docker/sample_logs/events.log b/packages/netskope/_dev/deploy/docker/sample_logs/events.log index c77e2a79d64..bb19abe4906 100644 --- a/packages/netskope/_dev/deploy/docker/sample_logs/events.log +++ b/packages/netskope/_dev/deploy/docker/sample_logs/events.log @@ -2,4 +2,4 @@ {"netskope":{"events":{"event_type":"network","destination":{"geoip":{"source":1}},"insertion":{"timestamp":1643512690},"access_method":"Client","app":{"name":"[app-name]","category":"null"},"category":{"name":"null"},"ccl":"unknown","count":1,"device":{"type":"Windows Device"},"ip":{"protocol":"TCP"},"numbytes":92653,"organization_unit":"null","policy":{"name":"hEfQoOPfTWYzbYfC"},"session":{"packets":71},"site":"[app-test]","total_packets":128,"traffic":{"type":"PrivateApp"},"tunnel":{"id":"1840937979","type":"NPA","up_time":71},"type":"network","source":{"geoip_src":2},"user":{"ip":"89.160.20.112"}}},"event":{"action":"allow","id":"8d61df5a9a8a2709c21e6dfb"},"destination":{"geo":{"country_iso_code":"FR","location":{"lat":48.883411,"lon":2.23894},"city_name":"Puteaux","region_name":"Ile-de-France"},"address":"81.2.69.143","ip":"81.2.69.143","port":80},"client":{"bytes":88028,"packets":70},"user_agent":{"os":{"name":"Windows","version":"10.0 (1809)"}},"network":{"protocol":"Http"},"server":{"bytes":4625,"packets":58},"source":{"address":"81.2.69.143","ip":"81.2.69.143","port":16,"geo":{"country_iso_code":"NL","location":{"lat":52.3759,"lon":4.8975},"city_name":"Amsterdam","region_name":"North Holland","postal_code":"1012"}},"@timestamp":"2022-01-30T00:58:52.000Z","user":{"email":{"1":"userdte471@example.com","2":"USERDTE471@example.com","3":"USERDTE471@example.com"},"group":{"name":"null"}}} {"netskope":{"events":{"event_type":"audit","insertion":{"timestamp":1643521800},"audit":{"log":{"event":"Login Successful"}},"ccl":"unknown","count":1,"organization_unit":"null","severity":{"level":"2"},"supporting_data":"{'data_type': 'user', 'data_values': ['71.198.199.251', 'user@example.com']}","type":"admin_audit_logs"}},"event":{"id":"c198aee5561d930a120e4fb4"},"@timestamp":"2022-01-30T05:44:59.000Z","user":{"email":{"1":"user@example.com","2":"user@example.com"}}} {"netskope":{"events":{"event_type":"page","insertion":{"timestamp":1643512735},"access_method":"Secure Forwarder","app":{"name":"SomeApp","category":"Cloud Storage"},"category":{"name":"Cloud Storage"},"cci":"72","ccl":"medium","connection":{"duration":41,"end_time":1601970462,"start_time":1601970421},"count":1,"device":{"type":"Windows Device"},"domain":"YFzrXohPeIcanEwg","destination":{"geoip":{"source":1}},"numbytes":217350,"organization_unit":"null","page":"www.example.com","request":{"count":14},"response":{"count":14,"content":{"length":174053,"type":"text/html"}},"severity":{"level":"unknown"},"site":"SomeSite","source":{"geoip_src":2},"traffic":{"type":"CloudApp"},"user":{"generated":"True","ip":"89.160.20.112"},"url":"ABwagJUWXsoBHcFJ","is_bypass_traffic":"no","http_transaction_count":12,"suppression":{"end_time":1601970439,"start_time":1601970424},"transaction":{"id":"0"}}},"event":{"id":"fd54bdb5916df42dc55712a4"},"user_agent":{"name":"Firefox","version":"85.0.4183.121","os":{"name":"Windows 10","version":"Windows 10"},"original":"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:95.0) Gecko/20100101 Firefox/95.0"},"client":{"bytes":26538},"destination":{"geo":{"country_iso_code":"FR","location":{"lat":48.883411,"lon":2.23894},"city_name":"Puteaux","region_name":"Ile-de-France","timezone":"Asia/Kolkata"},"address":"81.2.69.143","ip":"81.2.69.143","port":443},"server":{"bytes":190812},"source":{"geo":{"country_iso_code":"IN","location":{"lat":12.9634,"lon":77.5855},"city_name":"Bengaluru","region_name":"Karnataka","timezone":"Asia/Kolkata","postal_code":"560002"},"address":"81.2.69.143","ip":"81.2.69.143"},"@timestamp":"2022-01-30T00:58:52.000Z","user":{"email":{"1":"userdte471@example.com","2":"USERDTE471@example.com","3":"foo@bar.com"},"group":{"name":"null"}},"host":{"hostname":"DESKTOP-WORKGROUP"}} -{"@timestamp":"2021-12-24T00:29:56.000Z","event.id":"613ee55ec9d868fc47654a73","netskope":{"events":{"event_type":"infrastructure","severity":{"level":"high"},"alarm":{"name":"No_events_from_device","description":"Events from device not received in the last 24 hours"},"device":{"name":"device-1"},"metric_value":43831789,"serial":"FFFFFFFFFFFFFFFF","supporting_data":"abc"}}} \ No newline at end of file +{"@timestamp":"2021-12-24T00:29:56.000Z","event.id":"613ee55ec9d868fc47654a73","netskope":{"events":{"event_type":"infrastructure","severity":{"level":"high"},"alarm":{"name":"No_events_from_device","description":"Events from device not received in the last 24 hours"},"device":{"name":"device-1"},"metric_value":43831789,"serial":"FFFFFFFFFFFFFFFF","supporting_data":"abc"}}} diff --git a/packages/netskope/changelog.yml b/packages/netskope/changelog.yml index 397bf05c394..d56ab706e49 100644 --- a/packages/netskope/changelog.yml +++ b/packages/netskope/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9403 - version: "1.16.1" changes: - description: Changed owners diff --git a/packages/netskope/data_stream/alerts/_dev/test/system/test-default-config.yml b/packages/netskope/data_stream/alerts/_dev/test/system/test-default-config.yml index 551b76d32f4..bfb7a7a220c 100644 --- a/packages/netskope/data_stream/alerts/_dev/test/system/test-default-config.yml +++ b/packages/netskope/data_stream/alerts/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ vars: data_stream: vars: listen_port: 9020 +assert: + hit_count: 8 diff --git a/packages/netskope/data_stream/events/_dev/test/system/test-default-config.yml b/packages/netskope/data_stream/events/_dev/test/system/test-default-config.yml index 851bba8f4c6..38eaaef0e85 100644 --- a/packages/netskope/data_stream/events/_dev/test/system/test-default-config.yml +++ b/packages/netskope/data_stream/events/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ vars: data_stream: vars: listen_port: 9021 +assert: + hit_count: 5 diff --git a/packages/netskope/manifest.yml b/packages/netskope/manifest.yml index d29da8884c8..9406625b1e1 100644 --- a/packages/netskope/manifest.yml +++ b/packages/netskope/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: netskope title: "Netskope" -version: "1.16.1" +version: "1.17.0" description: Collect logs from Netskope with Elastic Agent. type: integration categories: diff --git a/packages/pulse_connect_secure/changelog.yml b/packages/pulse_connect_secure/changelog.yml index 7c5acd4eb44..69d15d1845a 100644 --- a/packages/pulse_connect_secure/changelog.yml +++ b/packages/pulse_connect_secure/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.19.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9403 - version: "1.18.3" changes: - description: Fix duplicate session field diff --git a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tcp-config.yml b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tcp-config.yml index 69185dd8402..68c1f03dd66 100644 --- a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tcp-config.yml +++ b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tcp-config.yml @@ -6,3 +6,5 @@ data_stream: syslog_host: 0.0.0.0 syslog_port: 9515 preserve_original_event: true +assert: + hit_count: 9 diff --git a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tls-config.yml b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tls-config.yml index 8e9ede384ce..012cae649ae 100644 --- a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tls-config.yml +++ b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-tls-config.yml @@ -57,3 +57,5 @@ data_stream: BdcwL671AnnDY3GUxcmX7n8/E4lFwQEf5G4IbKa+/fIm4y4wzkINHYnCeTvVPHUZ rcZR4kw7O4cWsLR4NHJBosUVoaeoCizBB6xLREqISxIZuHKuEcYsRA== -----END RSA PRIVATE KEY----- +assert: + hit_count: 9 diff --git a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-udp-config.yml b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-udp-config.yml index 0753740e71f..0a598538ec2 100644 --- a/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-udp-config.yml +++ b/packages/pulse_connect_secure/data_stream/log/_dev/test/system/test-udp-config.yml @@ -6,3 +6,5 @@ data_stream: syslog_host: 0.0.0.0 syslog_port: 9514 preserve_original_event: true +assert: + hit_count: 9 diff --git a/packages/pulse_connect_secure/manifest.yml b/packages/pulse_connect_secure/manifest.yml index 9a78375dba7..534cc516cfa 100644 --- a/packages/pulse_connect_secure/manifest.yml +++ b/packages/pulse_connect_secure/manifest.yml @@ -1,6 +1,6 @@ name: pulse_connect_secure title: Pulse Connect Secure -version: 1.18.3 +version: 1.19.0 description: Collect logs from Pulse Connect Secure with Elastic Agent. type: integration icons: @@ -8,7 +8,7 @@ icons: title: pulse_connect_secure size: 300x70 type: image/svg+xml -format_version: "3.0.0" +format_version: "3.0.3" categories: [vpn_security, security] conditions: kibana: diff --git a/packages/santa/_dev/deploy/docker/sample_logs/santa.log b/packages/santa/_dev/deploy/docker/sample_logs/santa.log index 359df8289bc..32380c45e0e 100644 --- a/packages/santa/_dev/deploy/docker/sample_logs/santa.log +++ b/packages/santa/_dev/deploy/docker/sample_logs/santa.log @@ -8,4 +8,4 @@ [2022-05-12T11:32:44.184Z] I santad: action=DISKAPPEAR|mount=/Volumes/GoogleDrive|volume=Google Drive|bsdname=|fs=smbfs|model=|serial=(null)|bus=|dmgpath=|appearance=2001-01-01T00:00:00.000Z [2022-05-12T11:33:57.166Z] I santad: action=DISKAPPEAR|mount=|volume=Install Google Drive|bsdname=disk4s2|fs=hfs|model=Apple Disk Image|serial=|bus=Virtual Interface|dmgpath=|appearance=2022-05-12T11:33:57.043Z [2022-05-12T11:33:57.235Z] I santad: action=DISKAPPEAR|mount=/Volumes/Install Google Drive|volume=Install Google Drive|bsdname=disk4s2|fs=hfs|model=Apple Disk Image|serial=|bus=Virtual Interface|dmgpath=|appearance=2022-05-12T11:33:57.043Z -[2022-05-12T11:35:31.436Z] I santad: action=DISKDISAPPEAR|mount=|volume=Install Google Drive|bsdname=disk4s2 \ No newline at end of file +[2022-05-12T11:35:31.436Z] I santad: action=DISKDISAPPEAR|mount=|volume=Install Google Drive|bsdname=disk4s2 diff --git a/packages/santa/changelog.yml b/packages/santa/changelog.yml index fa483336718..f70e6126a03 100644 --- a/packages/santa/changelog.yml +++ b/packages/santa/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "3.17.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9403 - version: "3.16.2" changes: - description: Changed owners diff --git a/packages/santa/data_stream/log/_dev/test/system/test-default-config.yml b/packages/santa/data_stream/log/_dev/test/system/test-default-config.yml index 25b18bc7ae8..177d8c1b1af 100644 --- a/packages/santa/data_stream/log/_dev/test/system/test-default-config.yml +++ b/packages/santa/data_stream/log/_dev/test/system/test-default-config.yml @@ -3,3 +3,5 @@ data_stream: vars: paths: - "{{SERVICE_LOGS_DIR}}/santa.log" +assert: + hit_count: 11 diff --git a/packages/santa/manifest.yml b/packages/santa/manifest.yml index d8a761aa449..242cda09914 100644 --- a/packages/santa/manifest.yml +++ b/packages/santa/manifest.yml @@ -1,13 +1,13 @@ name: santa title: Google Santa -version: "3.16.2" +version: "3.17.0" description: Collect logs from Google Santa with Elastic Agent. type: integration icons: - src: /img/icon.svg title: Google Santa type: image/svg+xml -format_version: "3.0.0" +format_version: "3.0.3" categories: - security conditions: diff --git a/packages/symantec_endpoint/_dev/deploy/docker/sample_logs/symantec_endpoint.log b/packages/symantec_endpoint/_dev/deploy/docker/sample_logs/symantec_endpoint.log index 6ea679866c9..754e554ac81 100644 --- a/packages/symantec_endpoint/_dev/deploy/docker/sample_logs/symantec_endpoint.log +++ b/packages/symantec_endpoint/_dev/deploy/docker/sample_logs/symantec_endpoint.log @@ -24,4 +24,4 @@ Site: SEPSite,Server: exampleHostname,Symantec Endpoint Protection Manager could Site: SEPSite,Server: exampleHostname,Number of old risk events swept: 130 Site: SEPSite,Server: exampleHostname,LiveUpdate started. Site: SEPSite,Server: exampleHostname,Database maintenance started. -2020-01-16 08:00:31,Critical,serverName,Event Description: [SID: 20521] Web Attack: SGI InfoSearch fname Exec CVE-2000-0207 attack blocked. Traffic has been blocked for this application: C:\WINDOWS\SYSTEM32\INETSRV\W3WP.EXE,Local Host IP: 127.0.0.1,Local Host MAC: 000000000000,Remote Host Name: ,Remote Host IP: 127.0.0.1,Remote Host MAC: 000000000000,Outbound,TCP,Intrusion ID: 0,Begin: 2021-12-14 14:56:01,End: 2021-12-14 14:56:01,Occurrences: 1,Application: C:/WINDOWS/SYSTEM32/INETSRV/W3WP.EXE,Location: Default,User: someuser,Domain: DOMAIN,Local Port: 54301,Remote Port: 5112,CIDS Signature ID: 20521,CIDS Signature string: Web Attack: SGI InfoSearch fname Exec CVE-2000-0207,CIDS Signature SubID: 75437,Intrusion URL: www.example.com/cgi-bin/infosrch.cgi?cmd=getdoc&db=man&fname=|/bin/id,Intrusion Payload URL: ,SHA-256: ABCDEC4B72DB91F168C36C500C1BE9AE391C1FF09CD65295BB24267D35373FD9,MD-5: \ No newline at end of file +2020-01-16 08:00:31,Critical,serverName,Event Description: [SID: 20521] Web Attack: SGI InfoSearch fname Exec CVE-2000-0207 attack blocked. Traffic has been blocked for this application: C:\WINDOWS\SYSTEM32\INETSRV\W3WP.EXE,Local Host IP: 127.0.0.1,Local Host MAC: 000000000000,Remote Host Name: ,Remote Host IP: 127.0.0.1,Remote Host MAC: 000000000000,Outbound,TCP,Intrusion ID: 0,Begin: 2021-12-14 14:56:01,End: 2021-12-14 14:56:01,Occurrences: 1,Application: C:/WINDOWS/SYSTEM32/INETSRV/W3WP.EXE,Location: Default,User: someuser,Domain: DOMAIN,Local Port: 54301,Remote Port: 5112,CIDS Signature ID: 20521,CIDS Signature string: Web Attack: SGI InfoSearch fname Exec CVE-2000-0207,CIDS Signature SubID: 75437,Intrusion URL: www.example.com/cgi-bin/infosrch.cgi?cmd=getdoc&db=man&fname=|/bin/id,Intrusion Payload URL: ,SHA-256: ABCDEC4B72DB91F168C36C500C1BE9AE391C1FF09CD65295BB24267D35373FD9,MD-5: diff --git a/packages/symantec_endpoint/changelog.yml b/packages/symantec_endpoint/changelog.yml index 21f798e0bfc..459db0dc3f5 100644 --- a/packages/symantec_endpoint/changelog.yml +++ b/packages/symantec_endpoint/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.15.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9403 - version: "2.14.2" changes: - description: Changed owners diff --git a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-logfile-config.yml b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-logfile-config.yml index 0855ccf57fa..c06b2524491 100644 --- a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-logfile-config.yml +++ b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-logfile-config.yml @@ -5,3 +5,5 @@ data_stream: paths: - "{{SERVICE_LOGS_DIR}}/symantec_endpoint*.log" preserve_original_event: true +assert: + hit_count: 27 diff --git a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-tcp-config.yml b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-tcp-config.yml index 720efab0045..caeb3ab401f 100644 --- a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-tcp-config.yml +++ b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-tcp-config.yml @@ -6,3 +6,5 @@ data_stream: listen_address: 0.0.0.0 listen_port: 9514 preserve_original_event: true +assert: + hit_count: 27 diff --git a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-udp-config.yml b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-udp-config.yml index bac96ec5b80..3be18610c0b 100644 --- a/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-udp-config.yml +++ b/packages/symantec_endpoint/data_stream/log/_dev/test/system/test-udp-config.yml @@ -6,3 +6,5 @@ data_stream: listen_address: 0.0.0.0 listen_port: 9514 preserve_original_event: true +assert: + hit_count: 27 diff --git a/packages/symantec_endpoint/manifest.yml b/packages/symantec_endpoint/manifest.yml index 5f093d7b691..0955664c4c3 100644 --- a/packages/symantec_endpoint/manifest.yml +++ b/packages/symantec_endpoint/manifest.yml @@ -1,9 +1,9 @@ name: symantec_endpoint title: Symantec Endpoint Protection -version: "2.14.2" +version: "2.15.0" description: Collect logs from Symantec Endpoint Protection with Elastic Agent. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: ["security", "edr_xdr"] conditions: kibana: From 6805e4daec4bab0c3bff57d1464ba35695cfa450 Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 07:40:00 +1030 Subject: [PATCH 28/33] thycotic_ss,ti_abusech,ti_util,tines,zscaler_zpa: update manifest version format to v3.0.3 (#9404) --- packages/thycotic_ss/changelog.yml | 5 +++++ .../logs/_dev/test/system/test-logfile-config.yml | 2 ++ .../logs/_dev/test/system/test-tcp-config.yml | 2 ++ .../logs/_dev/test/system/test-udp-config.yml | 2 ++ packages/thycotic_ss/manifest.yml | 4 ++-- packages/ti_abusech/changelog.yml | 5 +++++ .../malware/_dev/test/system/test-default-config.yml | 2 ++ .../_dev/test/system/test-default-config.yml | 2 ++ .../_dev/test/system/test-default-config.yml | 2 ++ .../url/_dev/test/system/test-default-config.yml | 2 ++ packages/ti_abusech/manifest.yml | 4 ++-- packages/ti_util/changelog.yml | 5 +++++ packages/ti_util/manifest.yml | 4 ++-- packages/tines/changelog.yml | 5 +++++ .../_dev/test/system/test-default-config.yml | 2 ++ .../tines/data_stream/audit_logs/fields/fields.yml | 12 ++++++++++++ .../_dev/test/system/test-default-config.yml | 2 ++ packages/tines/docs/README.md | 4 ++++ packages/tines/manifest.yml | 4 ++-- packages/zscaler_zpa/changelog.yml | 5 +++++ .../_dev/test/system/test-default-config.yml | 2 ++ .../audit/_dev/test/system/test-default-config.yml | 2 ++ .../_dev/test/system/test-default-config.yml | 2 ++ .../_dev/test/system/test-default-config.yml | 2 ++ .../_dev/test/system/test-default-config.yml | 2 ++ packages/zscaler_zpa/manifest.yml | 4 ++-- 26 files changed, 79 insertions(+), 10 deletions(-) diff --git a/packages/thycotic_ss/changelog.yml b/packages/thycotic_ss/changelog.yml index 3d9e7692082..62c79def1ad 100644 --- a/packages/thycotic_ss/changelog.yml +++ b/packages/thycotic_ss/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.7.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9404 - version: "1.6.2" changes: - description: Changed owners diff --git a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-logfile-config.yml b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-logfile-config.yml index 9f1ca6a8b5c..73646ab20c6 100644 --- a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-logfile-config.yml +++ b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-logfile-config.yml @@ -4,3 +4,5 @@ data_stream: vars: paths: - "{{SERVICE_LOGS_DIR}}/thycotic-ss-*.log" +assert: + hit_count: 1 diff --git a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-tcp-config.yml b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-tcp-config.yml index e6486d4c3a9..07efb8f1d0b 100644 --- a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-tcp-config.yml +++ b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-tcp-config.yml @@ -5,3 +5,5 @@ data_stream: vars: tcp_host: 0.0.0.0 tcp_port: 9571 +assert: + hit_count: 1 diff --git a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-udp-config.yml b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-udp-config.yml index 2fa92d630c9..9692279a844 100644 --- a/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-udp-config.yml +++ b/packages/thycotic_ss/data_stream/logs/_dev/test/system/test-udp-config.yml @@ -5,3 +5,5 @@ data_stream: vars: udp_host: 0.0.0.0 udp_port: 9571 +assert: + hit_count: 1 diff --git a/packages/thycotic_ss/manifest.yml b/packages/thycotic_ss/manifest.yml index 4bab0672a3f..e28026f8f65 100644 --- a/packages/thycotic_ss/manifest.yml +++ b/packages/thycotic_ss/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: thycotic_ss title: "Thycotic Secret Server" -version: "1.6.2" +version: "1.7.0" source: license: "Elastic-2.0" description: "Thycotic Secret Server logs" diff --git a/packages/ti_abusech/changelog.yml b/packages/ti_abusech/changelog.yml index cca06edaeff..d629341c34c 100644 --- a/packages/ti_abusech/changelog.yml +++ b/packages/ti_abusech/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.25.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9404 - version: "1.24.1" changes: - description: Changed owners diff --git a/packages/ti_abusech/data_stream/malware/_dev/test/system/test-default-config.yml b/packages/ti_abusech/data_stream/malware/_dev/test/system/test-default-config.yml index 91dd3c58da1..03a73c985d5 100644 --- a/packages/ti_abusech/data_stream/malware/_dev/test/system/test-default-config.yml +++ b/packages/ti_abusech/data_stream/malware/_dev/test/system/test-default-config.yml @@ -8,3 +8,5 @@ data_stream: url: http://{{Hostname}}:{{Port}}/v1/payloads/recent/ preserve_original_event: true enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/ti_abusech/data_stream/malwarebazaar/_dev/test/system/test-default-config.yml b/packages/ti_abusech/data_stream/malwarebazaar/_dev/test/system/test-default-config.yml index 1fc9c05fe2c..f829c29833f 100644 --- a/packages/ti_abusech/data_stream/malwarebazaar/_dev/test/system/test-default-config.yml +++ b/packages/ti_abusech/data_stream/malwarebazaar/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ data_stream: url: http://{{Hostname}}:{{Port}}/api/v1/ preserve_original_event: true enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/ti_abusech/data_stream/threatfox/_dev/test/system/test-default-config.yml b/packages/ti_abusech/data_stream/threatfox/_dev/test/system/test-default-config.yml index bd34fcf8287..028b4eed20d 100644 --- a/packages/ti_abusech/data_stream/threatfox/_dev/test/system/test-default-config.yml +++ b/packages/ti_abusech/data_stream/threatfox/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ data_stream: url: http://{{Hostname}}:{{Port}}/api/v1/ preserve_original_event: true enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/ti_abusech/data_stream/url/_dev/test/system/test-default-config.yml b/packages/ti_abusech/data_stream/url/_dev/test/system/test-default-config.yml index e180c3addda..22f51ba3a62 100644 --- a/packages/ti_abusech/data_stream/url/_dev/test/system/test-default-config.yml +++ b/packages/ti_abusech/data_stream/url/_dev/test/system/test-default-config.yml @@ -5,3 +5,5 @@ data_stream: url: http://{{Hostname}}:{{Port}}/v1/urls/recent/ preserve_original_event: true enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/ti_abusech/manifest.yml b/packages/ti_abusech/manifest.yml index b29ea1a87d4..3e665fe480f 100644 --- a/packages/ti_abusech/manifest.yml +++ b/packages/ti_abusech/manifest.yml @@ -1,9 +1,9 @@ name: ti_abusech title: AbuseCH -version: "1.24.1" +version: "1.25.0" description: Ingest threat intelligence indicators from URL Haus, Malware Bazaar, and Threat Fox feeds with Elastic Agent. type: integration -format_version: "3.0.0" +format_version: "3.0.3" categories: ["security", "threat_intel"] conditions: kibana: diff --git a/packages/ti_util/changelog.yml b/packages/ti_util/changelog.yml index bd9fe401abb..57eee3b7de4 100644 --- a/packages/ti_util/changelog.yml +++ b/packages/ti_util/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9404 - version: "1.4.1" changes: - description: Changed owners diff --git a/packages/ti_util/manifest.yml b/packages/ti_util/manifest.yml index 28646172e7f..b6c9189f2d9 100644 --- a/packages/ti_util/manifest.yml +++ b/packages/ti_util/manifest.yml @@ -1,6 +1,6 @@ name: ti_util title: "Threat Intelligence Utilities" -version: "1.4.1" +version: "1.5.0" description: Prebuilt Threat Intelligence dashboard for Elastic Security categories: - security @@ -8,7 +8,7 @@ categories: conditions: kibana: version: ^8.5.0 -format_version: "3.0.0" +format_version: "3.0.3" type: integration screenshots: - src: /img/threat-intel-overview.png diff --git a/packages/tines/changelog.yml b/packages/tines/changelog.yml index 364fca23327..65628977b24 100644 --- a/packages/tines/changelog.yml +++ b/packages/tines/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.11.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9404 - version: "1.10.0" changes: - description: Set sensitive values as secret. diff --git a/packages/tines/data_stream/audit_logs/_dev/test/system/test-default-config.yml b/packages/tines/data_stream/audit_logs/_dev/test/system/test-default-config.yml index b143494b77c..0883271b0f5 100644 --- a/packages/tines/data_stream/audit_logs/_dev/test/system/test-default-config.yml +++ b/packages/tines/data_stream/audit_logs/_dev/test/system/test-default-config.yml @@ -9,3 +9,5 @@ data_stream: vars: preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 20 diff --git a/packages/tines/data_stream/audit_logs/fields/fields.yml b/packages/tines/data_stream/audit_logs/fields/fields.yml index 11a49b0ffbe..d4be3b75721 100644 --- a/packages/tines/data_stream/audit_logs/fields/fields.yml +++ b/packages/tines/data_stream/audit_logs/fields/fields.yml @@ -45,6 +45,18 @@ type: long - name: actions type: group + fields: + - name: actionId + type: long + - name: options + type: keyword + - name: schedule + type: group + fields: + - name: cron + type: keyword + - name: timezone + type: keyword - name: agents type: flattened - name: allowedHosts diff --git a/packages/tines/data_stream/time_saved/_dev/test/system/test-default-config.yml b/packages/tines/data_stream/time_saved/_dev/test/system/test-default-config.yml index b143494b77c..b81559e4bce 100644 --- a/packages/tines/data_stream/time_saved/_dev/test/system/test-default-config.yml +++ b/packages/tines/data_stream/time_saved/_dev/test/system/test-default-config.yml @@ -9,3 +9,5 @@ data_stream: vars: preserve_original_event: true preserve_duplicate_custom_fields: true +assert: + hit_count: 241 diff --git a/packages/tines/docs/README.md b/packages/tines/docs/README.md index 3c68008314b..7a0c08aca50 100644 --- a/packages/tines/docs/README.md +++ b/packages/tines/docs/README.md @@ -111,6 +111,10 @@ All fields ingested to this data stream are stored under `tines.audit_log` as ea | tines.audit_log.inputs.diagramNoteIds | | long | | tines.audit_log.inputs.inputs.actionId | | long | | tines.audit_log.inputs.inputs.actionIds | | long | +| tines.audit_log.inputs.inputs.actions.actionId | | long | +| tines.audit_log.inputs.inputs.actions.options | | keyword | +| tines.audit_log.inputs.inputs.actions.schedule.cron | | keyword | +| tines.audit_log.inputs.inputs.actions.schedule.timezone | | keyword | | tines.audit_log.inputs.inputs.agents | | flattened | | tines.audit_log.inputs.inputs.allowedHosts | | keyword | | tines.audit_log.inputs.inputs.authenticationTokenId | | long | diff --git a/packages/tines/manifest.yml b/packages/tines/manifest.yml index 7b67b91b908..f16eef73735 100644 --- a/packages/tines/manifest.yml +++ b/packages/tines/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: tines title: "Tines" -version: "1.10.0" +version: "1.11.0" description: "Tines Logs & Time Saved Reports" type: integration categories: diff --git a/packages/zscaler_zpa/changelog.yml b/packages/zscaler_zpa/changelog.yml index 4ab7a1566c5..f982a44377d 100644 --- a/packages/zscaler_zpa/changelog.yml +++ b/packages/zscaler_zpa/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9404 - version: "1.16.1" changes: - description: Changed owners diff --git a/packages/zscaler_zpa/data_stream/app_connector_status/_dev/test/system/test-default-config.yml b/packages/zscaler_zpa/data_stream/app_connector_status/_dev/test/system/test-default-config.yml index 4b7f186fad1..349c5b1b59b 100644 --- a/packages/zscaler_zpa/data_stream/app_connector_status/_dev/test/system/test-default-config.yml +++ b/packages/zscaler_zpa/data_stream/app_connector_status/_dev/test/system/test-default-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_port: 9015 preserve_original_event: true +assert: + hit_count: 1 diff --git a/packages/zscaler_zpa/data_stream/audit/_dev/test/system/test-default-config.yml b/packages/zscaler_zpa/data_stream/audit/_dev/test/system/test-default-config.yml index 9b04e983ed0..d1c93dca3e9 100644 --- a/packages/zscaler_zpa/data_stream/audit/_dev/test/system/test-default-config.yml +++ b/packages/zscaler_zpa/data_stream/audit/_dev/test/system/test-default-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_port: 9016 preserve_original_event: true +assert: + hit_count: 1 diff --git a/packages/zscaler_zpa/data_stream/browser_access/_dev/test/system/test-default-config.yml b/packages/zscaler_zpa/data_stream/browser_access/_dev/test/system/test-default-config.yml index 5f5f934c260..4b84ce8515c 100644 --- a/packages/zscaler_zpa/data_stream/browser_access/_dev/test/system/test-default-config.yml +++ b/packages/zscaler_zpa/data_stream/browser_access/_dev/test/system/test-default-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_port: 9017 preserve_original_event: true +assert: + hit_count: 1 diff --git a/packages/zscaler_zpa/data_stream/user_activity/_dev/test/system/test-default-config.yml b/packages/zscaler_zpa/data_stream/user_activity/_dev/test/system/test-default-config.yml index 1ea21cb02b5..e1895b635b3 100644 --- a/packages/zscaler_zpa/data_stream/user_activity/_dev/test/system/test-default-config.yml +++ b/packages/zscaler_zpa/data_stream/user_activity/_dev/test/system/test-default-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_port: 9018 preserve_original_event: true +assert: + hit_count: 1 diff --git a/packages/zscaler_zpa/data_stream/user_status/_dev/test/system/test-default-config.yml b/packages/zscaler_zpa/data_stream/user_status/_dev/test/system/test-default-config.yml index d3d22bb6383..d04bcf8ef68 100644 --- a/packages/zscaler_zpa/data_stream/user_status/_dev/test/system/test-default-config.yml +++ b/packages/zscaler_zpa/data_stream/user_status/_dev/test/system/test-default-config.yml @@ -6,3 +6,5 @@ data_stream: vars: listen_port: 9019 preserve_original_event: true +assert: + hit_count: 1 diff --git a/packages/zscaler_zpa/manifest.yml b/packages/zscaler_zpa/manifest.yml index 018d397fd7a..e8334d439a1 100644 --- a/packages/zscaler_zpa/manifest.yml +++ b/packages/zscaler_zpa/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: zscaler_zpa title: Zscaler Private Access -version: "1.16.1" +version: "1.17.0" source: license: Elastic-2.0 description: Collect logs from Zscaler Private Access (ZPA) with Elastic Agent. From 59b0e40a8b3a928cae55331a8a9d7a26699d2f54 Mon Sep 17 00:00:00 2001 From: Alessandro Stoltenberg Date: Fri, 22 Mar 2024 06:18:16 +0100 Subject: [PATCH 29/33] packages/vsphere/docs: Improve logs collection documentation (#8869) * vSphere-integration-docs: Clarified log collection method * Revert "vSphere-integration-docs: Clarified log collection method" This reverts commit d5b155934301529b84f02af8a5e0e83be4af3dd5. * vSphere-docs: Detailed setup instructions * Resolve merge conflict with main. * vSphere: Added doc improvement to manifest and changelog * Run elastic-package build to fix CI failure * Update packages/vsphere/changelog.yml Co-authored-by: subham sarkar --------- Co-authored-by: subham sarkar Co-authored-by: Ishleen Kaur <102962586+ishleenk17@users.noreply.github.com> Co-authored-by: subham sarkar --- packages/vsphere/_dev/build/docs/README.md | 2 +- packages/vsphere/changelog.yml | 5 +++++ packages/vsphere/docs/README.md | 2 +- packages/vsphere/manifest.yml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/vsphere/_dev/build/docs/README.md b/packages/vsphere/_dev/build/docs/README.md index 3876f9c846e..850f6c08982 100644 --- a/packages/vsphere/_dev/build/docs/README.md +++ b/packages/vsphere/_dev/build/docs/README.md @@ -35,7 +35,7 @@ Datastores are logical containers, analogous to file systems, that hide specific ## Logs -To access the logs, from the Kibana UI, you have to specify the network-accessible IP address of the host where the Elastic Agent will be deployed. +To collect logs, a syslog daemon is used. First, you must configure the listening host/IP address (default: localhost) and host port (default: 9525) in the integration. Then, configure vSphere to send logs to a remote syslog host and provide the configured hostname/IP and port of the Elastic Agent host. ### vSphere Logs diff --git a/packages/vsphere/changelog.yml b/packages/vsphere/changelog.yml index 601f0f5a517..f2215beb46b 100644 --- a/packages/vsphere/changelog.yml +++ b/packages/vsphere/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.11.1" + changes: + - description: Add more specific details to vSphere logs configuration documentation. + type: enhancement + link: https://github.com/elastic/integrations/pull/8869 - version: "1.11.0" changes: - description: Enable 'secret' for the sensitive fields. diff --git a/packages/vsphere/docs/README.md b/packages/vsphere/docs/README.md index 22f7f2db24f..2a52cce654b 100644 --- a/packages/vsphere/docs/README.md +++ b/packages/vsphere/docs/README.md @@ -441,7 +441,7 @@ An example event for `datastore` looks as following: ## Logs -To access the logs, from the Kibana UI, you have to specify the network-accessible IP address of the host where the Elastic Agent will be deployed. +To collect logs, a syslog daemon is used. First, you must configure the listening host/IP address (default: localhost) and host port (default: 9525) in the integration. Then, configure vSphere to send logs to a remote syslog host and provide the configured hostname/IP and port of the Elastic Agent host. ### vSphere Logs diff --git a/packages/vsphere/manifest.yml b/packages/vsphere/manifest.yml index dde0b2e800c..c9bcf9b849f 100644 --- a/packages/vsphere/manifest.yml +++ b/packages/vsphere/manifest.yml @@ -1,7 +1,7 @@ title: VMware vSphere format_version: "3.0.2" name: vsphere -version: "1.11.0" +version: "1.11.1" description: This Elastic integration collects metrics and logs from vSphere/vCenter servers type: integration categories: From 1878c20117051b27d6ae9a133da41a4b20881fb2 Mon Sep 17 00:00:00 2001 From: Luca Belluccini Date: Fri, 22 Mar 2024 09:08:59 +0100 Subject: [PATCH 30/33] Update description of Custom Logs input (#9386) Update description of Custom Logs input to provide details to which settings can be used. * Update changelog.yml * Update packages/log/manifest.yml Co-authored-by: Tiago Queiroz --- packages/log/changelog.yml | 5 +++++ packages/log/manifest.yml | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/log/changelog.yml b/packages/log/changelog.yml index 6d2f2ce1c1e..7823b3d4d20 100644 --- a/packages/log/changelog.yml +++ b/packages/log/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.3.1" + changes: + - description: Enhance description of custom option + type: enhancement + link: https://github.com/elastic/integrations/pull/9386 - version: "2.3.0" changes: - description: Expose exclude_files option diff --git a/packages/log/manifest.yml b/packages/log/manifest.yml index 5af383a9661..c44f2b6ce44 100644 --- a/packages/log/manifest.yml +++ b/packages/log/manifest.yml @@ -4,7 +4,7 @@ title: Custom Logs description: >- Collect custom logs with Elastic Agent. type: input -version: 2.3.0 +version: 2.3.1 categories: - custom - custom_logs @@ -63,7 +63,7 @@ policy_templates: - name: custom title: Custom configurations description: > - Here YAML configuration options can be used to be added to your configuration. Be careful using this as it might break your configuration file. + Additional settings to be added to the configuration. Be careful using this as it might break the input as those settings are not validated and can override the settings specified above. See [`log` input settings docs](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html) for details. type: yaml default: "" From cd0bc83ef32bbc24d6b534de287df6ebc8e27864 Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Fri, 22 Mar 2024 20:43:55 +1030 Subject: [PATCH 31/33] box_events: update manifest version format to v3.0.3 (#9389) --- packages/box_events/changelog.yml | 5 +++++ .../test-suspicious-locations.log-expected.json | 3 +-- .../test-suspicious-sessions.log-expected.json | 3 +-- .../_dev/test/system/test-httpjson-config.yml | 2 ++ .../elasticsearch/ingest_pipeline/default.yml | 17 +++++++++++++++++ .../data_stream/events/fields/ecs.yml | 6 ++++++ .../data_stream/events/fields/fields.yml | 6 ++++++ packages/box_events/docs/README.md | 6 ++++++ packages/box_events/manifest.yml | 4 ++-- 9 files changed, 46 insertions(+), 6 deletions(-) diff --git a/packages/box_events/changelog.yml b/packages/box_events/changelog.yml index ca77d2cd737..dffa639f365 100644 --- a/packages/box_events/changelog.yml +++ b/packages/box_events/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.7.0" + changes: + - description: Update manifest format version to v3.0.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/9389 - version: "2.6.0" changes: - description: Set sensitive values as secret. diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json index 1e01fec0525..06a324ea755 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json @@ -78,12 +78,12 @@ "indicator": { "description": "IP 81.2.69.144 was observed to Download file ABC/DEF/xyz.txt by Box Excel Online Previewer", "geo": { - "ip": "81.2.69.144", "location": { "lat": "37.5555", "lon": "-120.6789" } }, + "ip": "81.2.69.144", "provider": "Box Excel Online Previewer", "type": "ipv4-addr" } @@ -159,7 +159,6 @@ "indicator": { "description": "IP Unknown IP was observed to Download file ABC/DEF/xyz.txt by Box Excel Online Previewer", "geo": { - "ip": "Unknown IP", "location": { "lat": "37.5555", "lon": "-120.6789" diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json index 3aaaba416e1..cfc438754b4 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json @@ -77,12 +77,12 @@ "indicator": { "description": "IP 81.2.69.142 was observed to Set shared link expiration file ABC/DEF/xyz.txt by ServiceName", "geo": { - "ip": "81.2.69.142", "location": { "lat": "37.5555", "lon": "-120.6789" } }, + "ip": "81.2.69.142", "provider": "ServiceName", "type": "user-account" } @@ -161,7 +161,6 @@ "indicator": { "description": "IP Unknown IP was observed to Set shared link expiration file ABC/DEF/xyz.txt by ServiceName", "geo": { - "ip": "Unknown IP", "location": { "lat": "37.5555", "lon": "-120.6789" diff --git a/packages/box_events/data_stream/events/_dev/test/system/test-httpjson-config.yml b/packages/box_events/data_stream/events/_dev/test/system/test-httpjson-config.yml index 0db0a69e22d..074f117a3e3 100644 --- a/packages/box_events/data_stream/events/_dev/test/system/test-httpjson-config.yml +++ b/packages/box_events/data_stream/events/_dev/test/system/test-httpjson-config.yml @@ -11,3 +11,5 @@ data_stream: vars: stream_type: 'all' enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml b/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml index 55d1ce8b368..de1988aa453 100644 --- a/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml +++ b/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml @@ -1181,6 +1181,23 @@ processors: field: "_ingest._value.indicator.as.organization_name" target_field: "_ingest._value.indicator.as.organization.name" ignore_missing: true +# Move geo.ip out of geo and check for IP validity. + - foreach: + field: threat.enrichments + ignore_missing: true + processor: + convert: + field: "_ingest._value.indicator.geo.ip" + target_field: "_ingest._value.indicator.ip" + type: ip + ignore_failure: true + - foreach: + field: threat.enrichments + ignore_missing: true + processor: + remove: + field: "_ingest._value.indicator.geo.ip" + ignore_missing: true # AS lookup for stand-alone indicator - geoip: database_file: GeoLite2-ASN.mmdb diff --git a/packages/box_events/data_stream/events/fields/ecs.yml b/packages/box_events/data_stream/events/fields/ecs.yml index 8ed61a7c0a4..f0aaa28f258 100644 --- a/packages/box_events/data_stream/events/fields/ecs.yml +++ b/packages/box_events/data_stream/events/fields/ecs.yml @@ -72,6 +72,10 @@ name: threat.indicator.description - external: ecs name: threat.enrichments +- external: ecs + name: threat.enrichments.indicator.as.number +- external: ecs + name: threat.enrichments.indicator.as.organization.name - external: ecs name: threat.enrichments.indicator.description - external: ecs @@ -94,6 +98,8 @@ name: threat.enrichments.indicator.ip - external: ecs name: threat.enrichments.indicator.last_seen +- external: ecs + name: threat.enrichments.indicator.provider - external: ecs name: threat.enrichments.indicator.reference - external: ecs diff --git a/packages/box_events/data_stream/events/fields/fields.yml b/packages/box_events/data_stream/events/fields/fields.yml index 63c22514c5c..c7ab48b266b 100644 --- a/packages/box_events/data_stream/events/fields/fields.yml +++ b/packages/box_events/data_stream/events/fields/fields.yml @@ -373,6 +373,12 @@ - name: entries type: group fields: + - name: etag + description: The HTTP etag of this folder + type: keyword + - name: sequence_id + description: A numeric identifier that represents the most recent user event that has been applied to this item + type: keyword - name: type description: Value is always `folder`. This field is an array type: keyword diff --git a/packages/box_events/docs/README.md b/packages/box_events/docs/README.md index e512db11d6b..320dcfb9268 100644 --- a/packages/box_events/docs/README.md +++ b/packages/box_events/docs/README.md @@ -236,8 +236,10 @@ Preserves a raw copy of the original event, added to the field `event.original`. | box.source.parent.name | The name of the folder | keyword | | box.source.parent.sequence_id | A numeric identifier that represents the most recent user event that has been applied to this item (parent) | keyword | | box.source.parent.type | Value is always `folder` | keyword | +| box.source.path_collection.entries.etag | The HTTP etag of this folder | keyword | | box.source.path_collection.entries.id | The unique identifier that represent a folder. This field is an array | keyword | | box.source.path_collection.entries.name | The name of the parent folder. This field is an array | keyword | +| box.source.path_collection.entries.sequence_id | A numeric identifier that represents the most recent user event that has been applied to this item | keyword | | box.source.path_collection.entries.type | Value is always `folder`. This field is an array | keyword | | box.source.path_collection.total_count | The number of folders in this list | long | | box.source.phone | Phone number | boolean | @@ -330,6 +332,9 @@ Preserves a raw copy of the original event, added to the field `event.original`. | rule.uuid | A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event. | keyword | | tags | List of keywords used to tag each event. | keyword | | threat.enrichments | A list of associated indicators objects enriching the event, and the context of that association/enrichment. | nested | +| threat.enrichments.indicator.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| threat.enrichments.indicator.as.organization.name | Organization name. | keyword | +| threat.enrichments.indicator.as.organization.name.text | Multi-field of `threat.enrichments.indicator.as.organization.name`. | match_only_text | | threat.enrichments.indicator.description | Describes the type of action conducted by the threat. | keyword | | threat.enrichments.indicator.first_seen | The date and time when intelligence source first reported sighting this indicator. | date | | threat.enrichments.indicator.geo.city_name | City name. | keyword | @@ -341,6 +346,7 @@ Preserves a raw copy of the original event, added to the field `event.original`. | threat.enrichments.indicator.geo.region_name | Region name. | keyword | | threat.enrichments.indicator.ip | Identifies a threat indicator as an IP address (irrespective of direction). | ip | | threat.enrichments.indicator.last_seen | The date and time when intelligence source last reported sighting this indicator. | date | +| threat.enrichments.indicator.provider | The name of the indicator's provider. | keyword | | threat.enrichments.indicator.reference | Reference URL linking to additional information about this indicator. | keyword | | threat.enrichments.indicator.type | Type of indicator as represented by Cyber Observable in STIX 2.0. | keyword | | threat.indicator.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | diff --git a/packages/box_events/manifest.yml b/packages/box_events/manifest.yml index 828e3254e24..1eaa3b170ac 100644 --- a/packages/box_events/manifest.yml +++ b/packages/box_events/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.0" +format_version: "3.0.3" name: box_events title: Box Events -version: "2.6.0" +version: "2.7.0" description: "Collect logs from Box with Elastic Agent" type: integration categories: From 8fa31fd8d75a021fa620526cb629df5c2e3ed95e Mon Sep 17 00:00:00 2001 From: Nick Alayil Date: Fri, 22 Mar 2024 12:46:04 -0700 Subject: [PATCH 32/33] [D4C] Update subscription tier in manifest.yml (#9416) * Update D4C subscription tier in manifest.yml * Update changelog.yml * Fix the version update in manifest.yml --- packages/cloud_defend/changelog.yml | 5 +++++ packages/cloud_defend/manifest.yml | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/cloud_defend/changelog.yml b/packages/cloud_defend/changelog.yml index c3efcccded3..9c68c09e1b7 100644 --- a/packages/cloud_defend/changelog.yml +++ b/packages/cloud_defend/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.2.4" + changes: + - description: Fix integration subscription tier + type: enhancement + link: https://github.com/elastic/integrations/pull/9416 - version: "1.2.3" changes: - description: Changed owners diff --git a/packages/cloud_defend/manifest.yml b/packages/cloud_defend/manifest.yml index 0c80a97b427..0c6ef5fb890 100644 --- a/packages/cloud_defend/manifest.yml +++ b/packages/cloud_defend/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: cloud_defend title: "Defend for Containers" -version: 1.2.3 +version: 1.2.4 source: license: "Elastic-2.0" description: "Elastic Defend for Containers (BETA) provides cloud-native runtime protections for containerized environments." @@ -14,6 +14,7 @@ conditions: kibana: version: ^8.11.0 elastic: + subscription: enterprise capabilities: - security screenshots: From 01a436ff14d03ca9bd0bb8918f1e71c4731adbc7 Mon Sep 17 00:00:00 2001 From: Aliabbas Attarwala <124054599+aliabbas-elastic@users.noreply.github.com> Date: Mon, 25 Mar 2024 10:38:49 +0530 Subject: [PATCH 33/33] [O11y][System] Rally benchmark `system.memory` (#9296) --- .../_dev/benchmark/rally/memory-benchmark.yml | 14 +++ .../rally/memory-benchmark/config.yml | 35 +++++++ .../rally/memory-benchmark/fields.yml | 18 ++++ .../rally/memory-benchmark/template.ndjson | 94 +++++++++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 packages/system/_dev/benchmark/rally/memory-benchmark.yml create mode 100644 packages/system/_dev/benchmark/rally/memory-benchmark/config.yml create mode 100644 packages/system/_dev/benchmark/rally/memory-benchmark/fields.yml create mode 100644 packages/system/_dev/benchmark/rally/memory-benchmark/template.ndjson diff --git a/packages/system/_dev/benchmark/rally/memory-benchmark.yml b/packages/system/_dev/benchmark/rally/memory-benchmark.yml new file mode 100644 index 00000000000..436e1679ace --- /dev/null +++ b/packages/system/_dev/benchmark/rally/memory-benchmark.yml @@ -0,0 +1,14 @@ +--- +description: Benchmark 20000 system.memory events ingested +data_stream: + name: memory +corpora: + generator: + total_events: 20000 + template: + type: gotext + path: ./memory-benchmark/template.ndjson + config: + path: ./memory-benchmark/config.yml + fields: + path: ./memory-benchmark/fields.yml diff --git a/packages/system/_dev/benchmark/rally/memory-benchmark/config.yml b/packages/system/_dev/benchmark/rally/memory-benchmark/config.yml new file mode 100644 index 00000000000..c7b780eec7a --- /dev/null +++ b/packages/system/_dev/benchmark/rally/memory-benchmark/config.yml @@ -0,0 +1,35 @@ +fields: + - name: timestamp + period: -60m + - name: event_duration + range: + min: 0 + max: 100000 + - name: system_memory_used_bytes + range: + min: 8000000000 + max: 9000000000 + - name: system_memory_cached + range: + min: 1000000000 + max: 2000000000 + - name: system_memory_free + range: + min: 2000000000 + max: 3000000000 + - name: system_memory_actual_used_bytes + range: + min: 5000000000 + max: 7000000000 + - name: system_memory_actual_free + range: + min: 3000000000 + max: 5000000000 + - name: system_memory_swap_used_bytes + range: + min: 300000000 + max: 500000000 + - name: system_memory_swap_free + range: + min: 3000000000 + max: 4000000000 diff --git a/packages/system/_dev/benchmark/rally/memory-benchmark/fields.yml b/packages/system/_dev/benchmark/rally/memory-benchmark/fields.yml new file mode 100644 index 00000000000..709f320544a --- /dev/null +++ b/packages/system/_dev/benchmark/rally/memory-benchmark/fields.yml @@ -0,0 +1,18 @@ +- name: timestamp + type: date +- name: event_duration + type: long +- name: system_memory_used_bytes + type: long +- name: system_memory_free + type: long +- name: system_memory_cached + type: long +- name: system_memory_actual_used_bytes + type: long +- name: system_memory_actual_free + type: long +- name: system_memory_swap_used_bytes + type: long +- name: system_memory_swap_free + type: long diff --git a/packages/system/_dev/benchmark/rally/memory-benchmark/template.ndjson b/packages/system/_dev/benchmark/rally/memory-benchmark/template.ndjson new file mode 100644 index 00000000000..3292d96d6a3 --- /dev/null +++ b/packages/system/_dev/benchmark/rally/memory-benchmark/template.ndjson @@ -0,0 +1,94 @@ +{{- $event_duration := generate "event_duration" }} +{{- $timestamp := generate "timestamp" }} +{{- $system_memory_used_bytes := generate "system_memory_used_bytes" }} +{{- $system_memory_free := generate "system_memory_free" }} +{{- $system_memory_cached := generate "system_memory_cached" }} +{{- $system_memory_actual_used_bytes := generate "system_memory_actual_used_bytes" }} +{{- $system_memory_actual_free := generate "system_memory_actual_free" }} +{{- $system_memory_actual_sum := add $system_memory_actual_used_bytes $system_memory_actual_free }} +{{- $system_memory_swap_used_bytes := generate "system_memory_swap_used_bytes" }} +{{- $system_memory_swap_free := generate "system_memory_swap_free" }} +{{- $system_memory_swap_total := add $system_memory_swap_free $system_memory_swap_used_bytes }} +{{- $system_memory_swap_used_pct := divf $system_memory_swap_used_bytes $system_memory_swap_total }} +{{- $system_memory_total := add $system_memory_used_bytes $system_memory_free }} +{{- $system_memory_used_pct := divf $system_memory_used_bytes $system_memory_total }} +{ + "@timestamp": "{{ $timestamp.Format "2006-01-02T15:04:05.000Z07:00" }}", + "agent": { + "ephemeral_id": "22ed892c-43bd-408a-9121-65e2f5b6a56e", + "id": "de42127b-4db8-4471-824e-a7b14f478663", + "name": "system-scale-123456", + "type": "metricbeat", + "version": "8.8.0" + }, + "data_stream": { + "dataset": "system.memory", + "namespace": "ep", + "type": "metrics" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "404fc805-04b8-420a-9fcf-12d54b89d4fd", + "snapshot": false, + "version": "8.12.1" + }, + "event": { + "agent_id_status": "verified", + "dataset": "system.memory", + "duration": {{ $event_duration }}, + "module": "system" + }, + "host": { + "architecture": "x86_64", + "containerized": true, + "hostname": "docker-fleet-agent", + "id": "96bd755dd266474fb86bd80a98cbaad5", + "ip": "192.168.241.7", + "mac": "02-42-C0-A8-F1-07", + "name": "docker-fleet-agent", + "os": { + "codename": "focal", + "family": "debian", + "kernel": "3.10.0-1160.105.1.el7.x86_64", + "name": "Ubuntu", + "platform": "ubuntu", + "type": "linux", + "version": "20.04.6 LTS (Focal Fossa)" + } + }, + "metricset": { + "name": "memory", + "period": 10000 + }, + "service": { + "type": "system" + }, + "system": { + "memory": { + "actual": { + "free": {{ $system_memory_actual_free }}, + "used": { + "bytes": {{ $system_memory_actual_used_bytes }}, + "pct": {{ divf $system_memory_actual_used_bytes $system_memory_actual_sum }} + } + }, + "cached": {{ $system_memory_cached }}, + "free": {{ $system_memory_free }}, + "swap": { + "free": {{ $system_memory_swap_free }}, + "total": {{ $system_memory_swap_total }}, + "used": { + "bytes": {{ $system_memory_swap_used_bytes }}, + "pct": {{ $system_memory_swap_used_pct }} + } + }, + "total": {{ $system_memory_total }}, + "used": { + "bytes": {{ $system_memory_used_bytes }}, + "pct": {{ $system_memory_used_pct }} + } + } + } +} \ No newline at end of file

    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 literal 0 HcmV?d00001 diff --git a/packages/azure/kibana/dashboard/azure-2b2e94c8-aff5-401d-b9a5-aae2d051a92c.json b/packages/azure/kibana/dashboard/azure-2b2e94c8-aff5-401d-b9a5-aae2d051a92c.json new file mode 100644 index 00000000000..5e135497757 --- /dev/null +++ b/packages/azure/kibana/dashboard/azure-2b2e94c8-aff5-401d-b9a5-aae2d051a92c.json @@ -0,0 +1,1638 @@ +{ + "attributes": { + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"d1ebc51c-cb49-49f6-840a-2da6d8a6be5b\":{\"type\":\"optionsListControl\",\"order\":1,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"d1ebc51c-cb49-49f6-840a-2da6d8a6be5b\",\"fieldName\":\"azure.tenant_id\",\"title\":\"Azure Tenant ID\",\"grow\":true,\"width\":\"medium\",\"enhancements\":{}}},\"d8d6db3e-83cb-40af-8f04-34f83ee80c6e\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"d8d6db3e-83cb-40af-8f04-34f83ee80c6e\",\"fieldName\":\"cloud.region\",\"title\":\"Azure Cloud Region\",\"grow\":true,\"width\":\"medium\",\"exclude\":false,\"enhancements\":{}}},\"411c7a87-3506-4e60-949e-4d3694f18141\":{\"type\":\"optionsListControl\",\"order\":3,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"411c7a87-3506-4e60-949e-4d3694f18141\",\"fieldName\":\"http.request.method\",\"title\":\"HTTP Request Method\",\"grow\":true,\"width\":\"medium\",\"enhancements\":{}}},\"ba723455-7325-4205-95f4-6e52fa4e6e46\":{\"type\":\"rangeSliderControl\",\"order\":2,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"ba723455-7325-4205-95f4-6e52fa4e6e46\",\"fieldName\":\"http.response.status_code\",\"title\":\"HTTP Status Code\",\"grow\":true,\"width\":\"medium\",\"value\":[\"100\",\"599\"],\"enhancements\":{}}}}" + }, + "description": "Provide an overview and statistics of the audit trail of all HTTP requests that the Microsoft Graph service received and processed.", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "azure.graphactivitylogs" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "azure.graphactivitylogs" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "enhancements": {}, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "**Navigation**\n\n[Integrations Page](/app/integrations/detail/azure/overview?integration=graphactivitylogs) \n\n**Overview**\n\nThis dashboard provides an overall view of Microsoft Graph Activity Logs. It provides insights into total requests made by applications and API clients in your tenant, while also breaking down the activity by Cloud Region, Users, and HTTP Methods.", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 12, + "i": "f3f94a78-c1cd-479d-bce4-80086ce16207", + "w": 12, + "x": 0, + "y": 0 + }, + "panelIndex": "f3f94a78-c1cd-479d-bce4-80086ce16207", + "type": "visualization" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Total HTTP Requests", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#6092C0", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "0d7a9e98-05e4-48cc-b602-fbf6441fb5eb", + "w": 10, + "x": 12, + "y": 0 + }, + "panelIndex": "0d7a9e98-05e4-48cc-b602-fbf6441fb5eb", + "title": "Total HTTP Requests", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "logs-*", + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "HTTP Responses 1xx", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "indexPatternId": "logs-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "http.response.status_code", + "index": "627dbdde-7bd2-4113-9422-d50e58c2efdd", + "key": "http.response.status_code", + "negate": false, + "params": { + "gte": "100", + "lt": "199" + }, + "type": "range", + "value": { + "gte": "100", + "lt": "199" + } + }, + "query": { + "range": { + "http.response.status_code": { + "gte": "100", + "lt": "199" + } + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#6092C0", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "2d47eead-9f8b-4540-8e61-45290eda210a", + "w": 8, + "x": 22, + "y": 0 + }, + "panelIndex": "2d47eead-9f8b-4540-8e61-45290eda210a", + "title": "HTTP Responses 1xx", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f873ce81-d2b9-4d27-951b-ea42fe7b6629", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "HTTP Response 2xx", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "http.response.status_code", + "index": "f873ce81-d2b9-4d27-951b-ea42fe7b6629", + "key": "http.response.status_code", + "negate": false, + "params": { + "gte": "200", + "lt": "299" + }, + "type": "range", + "value": { + "gte": "200", + "lt": "299" + } + }, + "query": { + "range": { + "http.response.status_code": { + "gte": "200", + "lt": "299" + } + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#54B399", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "e0d5b2a4-14b1-4652-81f5-8989c48cb427", + "w": 18, + "x": 30, + "y": 0 + }, + "panelIndex": "e0d5b2a4-14b1-4652-81f5-8989c48cb427", + "title": "HTTP Response 2xx", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "64260958-62e3-45e9-accd-9a2f49bc86a2", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "HTTP Response 3xx", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "http.response.status_code", + "index": "64260958-62e3-45e9-accd-9a2f49bc86a2", + "key": "http.response.status_code", + "negate": false, + "params": { + "gte": "300", + "lt": "399" + }, + "type": "range", + "value": { + "gte": "300", + "lt": "399" + } + }, + "query": { + "range": { + "http.response.status_code": { + "gte": "300", + "lt": "399" + } + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#6092C0", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "faac9860-e512-4adf-a34a-0a89690fef99", + "w": 8, + "x": 22, + "y": 6 + }, + "panelIndex": "faac9860-e512-4adf-a34a-0a89690fef99", + "title": "HTTP Response 3xx", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "7cde628c-4f1d-44e1-8a34-169e4bb5e0b7", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "HTTP Response 4xx", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "http.response.status_code", + "index": "7cde628c-4f1d-44e1-8a34-169e4bb5e0b7", + "key": "http.response.status_code", + "negate": false, + "params": { + "gte": "400", + "lt": "499" + }, + "type": "range", + "value": { + "gte": "400", + "lt": "499" + } + }, + "query": { + "range": { + "http.response.status_code": { + "gte": "400", + "lt": "499" + } + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#E7664C", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "f81b2567-5721-4dca-9ebf-243a69b06fe2", + "w": 10, + "x": 30, + "y": 6 + }, + "panelIndex": "f81b2567-5721-4dca-9ebf-243a69b06fe2", + "title": "HTTP Response 4xx", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "3027aa07-12ed-48a1-a760-745ed4a9ea26", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "13f1a07a-9635-4918-816a-6aa9e9cf4510": { + "columnOrder": [ + "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + ], + "columns": { + "9a97a672-989d-43d6-8c37-f3f0bb26fa95": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "HTTP Response 5xx", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "http.response.status_code", + "index": "3027aa07-12ed-48a1-a760-745ed4a9ea26", + "key": "http.response.status_code", + "negate": false, + "params": { + "gte": "500", + "lt": "599" + }, + "type": "range", + "value": { + "gte": "500", + "lt": "599" + } + }, + "query": { + "range": { + "http.response.status_code": { + "gte": "500", + "lt": "599" + } + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "color": "#E7664C", + "layerId": "13f1a07a-9635-4918-816a-6aa9e9cf4510", + "layerType": "data", + "metricAccessor": "9a97a672-989d-43d6-8c37-f3f0bb26fa95" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "8edfaa9c-8f05-4059-862f-a105de3304d6", + "w": 8, + "x": 40, + "y": 6 + }, + "panelIndex": "8edfaa9c-8f05-4059-862f-a105de3304d6", + "title": "Total HTTP Requests (copy 5)", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Cloud Region", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "cloud.region" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "legendDisplay": "show", + "legendSize": "auto", + "metrics": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061" + ] + } + ], + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "1d970b9f-148c-40e7-9723-76ae8d6de9ef", + "w": 17, + "x": 0, + "y": 12 + }, + "panelIndex": "1d970b9f-148c-40e7-9723-76ae8d6de9ef", + "title": "% of Graph Activity by Cloud Region", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Requests", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Cloud Region", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "cloud.region" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "seriesType": "bar_horizontal", + "xAccessor": "bb6d8913-2437-461c-a5cb-95f745f2e061" + } + ], + "legend": { + "isVisible": true, + "position": "right", + "showSingleSeries": false + }, + "preferredSeriesType": "bar_horizontal", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "23c1cc59-ff4c-48ef-bfc7-ee8a705a45f3", + "w": 31, + "x": 17, + "y": 12 + }, + "panelIndex": "23c1cc59-ff4c-48ef-bfc7-ee8a705a45f3", + "title": "Graph Activity by Cloud Region", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "logs-*", + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "User ID", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "user.id" + } + }, + "incompleteColumns": {}, + "indexPatternId": "logs-*" + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "legendDisplay": "show", + "legendSize": "auto", + "metrics": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061" + ] + } + ], + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "ecb78f06-c2e8-4da8-9c05-091ae47cabab", + "w": 17, + "x": 0, + "y": 24 + }, + "panelIndex": "ecb78f06-c2e8-4da8-9c05-091ae47cabab", + "title": "% of Graph Activity by User", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "df2b5869-05ef-48e4-8113-b369950b832e", + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Requests", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "df2b5869-05ef-48e4-8113-b369950b832e": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of user.id", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "user.id" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "df2b5869-05ef-48e4-8113-b369950b832e", + "xAccessor": "bb6d8913-2437-461c-a5cb-95f745f2e061" + } + ], + "legend": { + "isVisible": true, + "position": "right" + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "6fce6c97-be76-41b5-b4eb-2e67b2dd060b", + "w": 31, + "x": 17, + "y": 24 + }, + "panelIndex": "6fce6c97-be76-41b5-b4eb-2e67b2dd060b", + "title": "Graph Activity by User Timeline", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "logs-*", + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "User ID", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "http.request.method" + } + }, + "incompleteColumns": {}, + "indexPatternId": "logs-*" + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "legendDisplay": "show", + "legendSize": "auto", + "metrics": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061" + ] + } + ], + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "32635ea5-aef9-490a-9851-252f66a4180d", + "w": 17, + "x": 0, + "y": 36 + }, + "panelIndex": "32635ea5-aef9-490a-9851-252f66a4180d", + "title": "% of Graph Activity by HTTP Method", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Requests", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "HTTP Method", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "http.request.method" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data", + "seriesType": "bar", + "xAccessor": "bb6d8913-2437-461c-a5cb-95f745f2e061" + } + ], + "legend": { + "isVisible": true, + "position": "right" + }, + "preferredSeriesType": "bar", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "12619b1e-73a1-474b-89eb-8ee01df017de", + "w": 15, + "x": 17, + "y": 36 + }, + "panelIndex": "12619b1e-73a1-474b-89eb-8ee01df017de", + "title": "Graph Activity by HTTP Method", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "2ac1988b-9f69-439c-8898-0a385bb56434": { + "columnOrder": [ + "bb6d8913-2437-461c-a5cb-95f745f2e061", + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + ], + "columns": { + "37aa3be8-a77c-4241-92a7-4d1b58bc0d47": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Requests", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "bb6d8913-2437-461c-a5cb-95f745f2e061": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "HTTP Method", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "http.request.method" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset : \"azure.graphactivitylogs\" " + }, + "visualization": { + "columns": [ + { + "columnId": "bb6d8913-2437-461c-a5cb-95f745f2e061" + }, + { + "columnId": "37aa3be8-a77c-4241-92a7-4d1b58bc0d47" + } + ], + "layerId": "2ac1988b-9f69-439c-8898-0a385bb56434", + "layerType": "data" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 12, + "i": "3b43fe5b-e12b-408e-bc24-72dabfcfbc78", + "w": 16, + "x": 32, + "y": 36 + }, + "panelIndex": "3b43fe5b-e12b-408e-bc24-72dabfcfbc78", + "title": "Graph Activity by HTTP Method - Table", + "type": "lens" + } + ], + "timeRestore": false, + "title": "[Logs Azure] Microsoft Graph Activity Logs", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-08T13:50:59.523Z", + "id": "azure-2b2e94c8-aff5-401d-b9a5-aae2d051a92c", + "managed": false, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "0d7a9e98-05e4-48cc-b602-fbf6441fb5eb:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "2d47eead-9f8b-4540-8e61-45290eda210a:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e0d5b2a4-14b1-4652-81f5-8989c48cb427:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e0d5b2a4-14b1-4652-81f5-8989c48cb427:f873ce81-d2b9-4d27-951b-ea42fe7b6629", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "faac9860-e512-4adf-a34a-0a89690fef99:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "faac9860-e512-4adf-a34a-0a89690fef99:64260958-62e3-45e9-accd-9a2f49bc86a2", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f81b2567-5721-4dca-9ebf-243a69b06fe2:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f81b2567-5721-4dca-9ebf-243a69b06fe2:7cde628c-4f1d-44e1-8a34-169e4bb5e0b7", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8edfaa9c-8f05-4059-862f-a105de3304d6:indexpattern-datasource-layer-13f1a07a-9635-4918-816a-6aa9e9cf4510", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8edfaa9c-8f05-4059-862f-a105de3304d6:3027aa07-12ed-48a1-a760-745ed4a9ea26", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "1d970b9f-148c-40e7-9723-76ae8d6de9ef:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "23c1cc59-ff4c-48ef-bfc7-ee8a705a45f3:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ecb78f06-c2e8-4da8-9c05-091ae47cabab:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6fce6c97-be76-41b5-b4eb-2e67b2dd060b:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "32635ea5-aef9-490a-9851-252f66a4180d:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "12619b1e-73a1-474b-89eb-8ee01df017de:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "3b43fe5b-e12b-408e-bc24-72dabfcfbc78:indexpattern-datasource-layer-2ac1988b-9f69-439c-8898-0a385bb56434", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_d1ebc51c-cb49-49f6-840a-2da6d8a6be5b:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_d8d6db3e-83cb-40af-8f04-34f83ee80c6e:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_411c7a87-3506-4e60-949e-4d3694f18141:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_ba723455-7325-4205-95f4-6e52fa4e6e46:rangeSliderDataView", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/packages/azure/manifest.yml b/packages/azure/manifest.yml index b6fbc2cc091..cd07cd7a588 100644 --- a/packages/azure/manifest.yml +++ b/packages/azure/manifest.yml @@ -1,6 +1,6 @@ name: azure title: Azure Logs -version: 1.9.2 +version: 1.10.0 description: This Elastic integration collects logs from Azure type: integration icons: @@ -158,6 +158,28 @@ policy_templates: title: filebeat azure overview size: 5002x2666 type: image/png + - name: graphactivitylogs + title: Microsoft Graph Activity Logs + description: Microsoft Graph Activity Logs integration + data_streams: + - graphactivitylogs + categories: + - security + inputs: + - type: "azure-eventhub" + title: "Collect Microsoft Graph Activity Logs from Event Hub" + description: "Collecting graph activity logs from Azure instances (input: azure-eventhub)" + input_group: logs + icons: + - src: /img/graph_activity.png + title: logo graphactivity + size: 32x32 + type: image/svg+xml + screenshots: + - src: /img/graph_activity_logs.png + title: microsoft graph activity overview + size: 5002x2666 + type: image/png - name: springcloudlogs title: Azure Spring Apps logs description: Azure Spring Apps logs integration From 7b8302f140a5d6ad9cbe192dc3717aa3529dbb30 Mon Sep 17 00:00:00 2001 From: Ethan Houston Date: Fri, 15 Mar 2024 03:42:24 -0500 Subject: [PATCH 06/33] lumos: new package for lumos activity logs (#9276) --- .github/CODEOWNERS | 1 + packages/lumos/_dev/build/build.yml | 3 + packages/lumos/_dev/build/docs/README.md | 31 ++++ .../_dev/deploy/docker/docker-compose.yml | 15 ++ .../lumos/_dev/deploy/docker/files/config.yml | 42 ++++++ packages/lumos/changelog.yml | 6 + .../_dev/test/pipeline/test-activity-logs.log | 2 + .../test-activity-logs.log-expected.json | 60 ++++++++ .../_dev/test/system/test-default-config.yml | 9 ++ .../agent/stream/httpjson.yml.hbs | 31 ++++ .../elasticsearch/ingest_pipeline/default.yml | 68 +++++++++ .../activity_logs/fields/base-fields.yml | 16 +++ .../data_stream/activity_logs/fields/ecs.yml | 4 + .../activity_logs/fields/fields.yml | 39 +++++ .../data_stream/activity_logs/manifest.yml | 39 +++++ .../activity_logs/sample_event.json | 78 ++++++++++ packages/lumos/docs/README.md | 136 ++++++++++++++++++ .../lumos/img/activity-log-screenshot.png | Bin 0 -> 91428 bytes packages/lumos/img/lumos-logo.svg | 16 +++ packages/lumos/img/lumos-screenshot.png | Bin 0 -> 412352 bytes packages/lumos/manifest.yml | 55 +++++++ 21 files changed, 651 insertions(+) create mode 100644 packages/lumos/_dev/build/build.yml create mode 100644 packages/lumos/_dev/build/docs/README.md create mode 100644 packages/lumos/_dev/deploy/docker/docker-compose.yml create mode 100644 packages/lumos/_dev/deploy/docker/files/config.yml create mode 100644 packages/lumos/changelog.yml create mode 100644 packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log create mode 100644 packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log-expected.json create mode 100644 packages/lumos/data_stream/activity_logs/_dev/test/system/test-default-config.yml create mode 100644 packages/lumos/data_stream/activity_logs/agent/stream/httpjson.yml.hbs create mode 100644 packages/lumos/data_stream/activity_logs/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/lumos/data_stream/activity_logs/fields/base-fields.yml create mode 100644 packages/lumos/data_stream/activity_logs/fields/ecs.yml create mode 100644 packages/lumos/data_stream/activity_logs/fields/fields.yml create mode 100644 packages/lumos/data_stream/activity_logs/manifest.yml create mode 100644 packages/lumos/data_stream/activity_logs/sample_event.json create mode 100644 packages/lumos/docs/README.md create mode 100644 packages/lumos/img/activity-log-screenshot.png create mode 100644 packages/lumos/img/lumos-logo.svg create mode 100644 packages/lumos/img/lumos-screenshot.png create mode 100644 packages/lumos/manifest.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4d88f0ac5cc..86c1ba69f88 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -222,6 +222,7 @@ /packages/lmd @elastic/ml-ui @elastic/sec-applied-ml /packages/log @elastic/elastic-agent-data-plane /packages/logstash @elastic/stack-monitoring +/packages/lumos @elastic/security-service-integrations /packages/lyve_cloud @elastic/security-service-integrations /packages/m365_defender @elastic/security-service-integrations /packages/mattermost @elastic/security-service-integrations diff --git a/packages/lumos/_dev/build/build.yml b/packages/lumos/_dev/build/build.yml new file mode 100644 index 00000000000..2bfcfc223b0 --- /dev/null +++ b/packages/lumos/_dev/build/build.yml @@ -0,0 +1,3 @@ +dependencies: + ecs: + reference: "git@v8.11.0" diff --git a/packages/lumos/_dev/build/docs/README.md b/packages/lumos/_dev/build/docs/README.md new file mode 100644 index 00000000000..97a3fe4bead --- /dev/null +++ b/packages/lumos/_dev/build/docs/README.md @@ -0,0 +1,31 @@ +# Lumos Integration + +The Lumos integration uses [Lumos' API](https://api.lumos.com/) to retrieve Activity Logs and ingest them into Elasticsearch. This allows you to search, observe, and visualize the Activity Logs through Elasticsearch. + +The Elastic agent running this integration interacts with Lumos' infrastructure using their APIs to retrieve [Activity Logs](https://api.lumos.com/activity_logs) for a Lumos tenant. + +## Configuration + +### Enabling the integration in Elastic + +1. In Kibana go to **Management > Integrations** +2. In the "Search for integrations" search bar type **Lumos**. +3. Click on "Lumos" integration from the search results. +4. Click on **Add Lumos** button to add Lumos integration. + +### Configure Lumos Activity Logs data stream + +1. In Lumos go to **Settings > API Tokens** +2. Click on "Add API Token", enter a name and description +3. Copy the key starting with `lsk_` +4. While adding Lumos integration in Elastic, paste your key into the `API Token` field + +## Logs + +### Activity Logs + +Activity Logs summarize the history of changes and events occurring within Lumos. + +{{fields "activity_logs"}} + +{{event "activity_logs"}} \ No newline at end of file diff --git a/packages/lumos/_dev/deploy/docker/docker-compose.yml b/packages/lumos/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 00000000000..a55e2478878 --- /dev/null +++ b/packages/lumos/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.0' +services: + lumos: + image: docker.elastic.co/observability/stream:v0.11.0 + hostname: lumos + ports: + - 8080 + volumes: + - ./files:/files:ro + environment: + PORT: 8080 + command: + - http-server + - --addr=:8080 + - --config=/files/config.yml diff --git a/packages/lumos/_dev/deploy/docker/files/config.yml b/packages/lumos/_dev/deploy/docker/files/config.yml new file mode 100644 index 00000000000..ce71d6fe4a6 --- /dev/null +++ b/packages/lumos/_dev/deploy/docker/files/config.yml @@ -0,0 +1,42 @@ +rules: + - path: /activity_logs + methods: ["GET"] + request_headers: + authorization: Bearer xoxp-1234567890 + responses: + - status_code: 200 + body: |- + { + "items": [ + { + "actor": { + "actor_type": "Lumos user", + "email": "wile.e.coyote@lumos.com", + "family_name": "Wile", + "given_name": "Coyote" + }, + "event_began_at": "2024-03-12T16:09:14", + "event_hash": "630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7", + "event_metadata": {}, + "event_type": "SOD_POLICY_DELETED", + "event_type_user_friendly": "A user deleted a SOD Policy", + "outcome": "Succeeded", + "targets": [ + { + "name": "Untitled Rule", + "target_type": "SOD Policy" + } + ] + } + ], + "limit": 50, + "links": { + "first": "/activity_logs?offset=0", + "last": "/activity_logs?offset=1", + "next": null, + "prev": null, + "self": "/activity_logs" + }, + "offset": 0, + "total": 1 + } diff --git a/packages/lumos/changelog.yml b/packages/lumos/changelog.yml new file mode 100644 index 00000000000..e39cfe34645 --- /dev/null +++ b/packages/lumos/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.1.0" + changes: + - description: Initial draft of the package + type: enhancement + link: https://github.com/elastic/integrations/pull/9276 diff --git a/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log b/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log new file mode 100644 index 00000000000..6fdea9e9798 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log @@ -0,0 +1,2 @@ +{"actor":{"actor_type":"Lumos user","email":"wile.e.coyote@lumos.com","family_name":"Wile","given_name":"Coyote"},"event_began_at":"2024-03-12T16:09:14","event_hash":"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7","event_metadata":{},"event_type":"SOD_POLICY_DELETED","event_type_user_friendly":"A user deleted a SOD Policy","outcome":"Succeeded","targets":[{"name":"Untitled Rule","target_type":"SOD Policy"}]} +{"actor":{"actor_type":"Lumos user","email":"wile.e.coyote@lumos.com","family_name":"Wile","given_name":"Coyote"},"event_began_at":"2024-03-12T16:09:14","event_hash":"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7","event_metadata":{},"event_type":"SOD_POLICY_DELETED","event_type_user_friendly":"A user deleted a SOD Policy","outcome":"Succeeded","targets":[]} diff --git a/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log-expected.json b/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log-expected.json new file mode 100644 index 00000000000..a4caf105880 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/_dev/test/pipeline/test-activity-logs.log-expected.json @@ -0,0 +1,60 @@ +{ + "expected": [ + { + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "SOD_POLICY_DELETED", + "id": "630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7", + "outcome": "success", + "type": "info", + "kind": "event" + }, + "lumos": { + "activity_logs": { + "actor": { + "actor_type": "Lumos user", + "email": "wile.e.coyote@lumos.com", + "family_name": "Wile", + "given_name": "Coyote" + }, + "event_began_at": "2024-03-12T16:09:14", + "event_type_user_friendly": "A user deleted a SOD Policy", + "targets": [ + { + "name": "Untitled Rule", + "target_type": "SOD Policy" + } + ] + } + }, + "message": "{\"actor\":{\"actor_type\":\"Lumos user\",\"email\":\"wile.e.coyote@lumos.com\",\"family_name\":\"Wile\",\"given_name\":\"Coyote\"},\"event_began_at\":\"2024-03-12T16:09:14\",\"event_hash\":\"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7\",\"event_metadata\":{},\"event_type\":\"SOD_POLICY_DELETED\",\"event_type_user_friendly\":\"A user deleted a SOD Policy\",\"outcome\":\"Succeeded\",\"targets\":[{\"name\":\"Untitled Rule\",\"target_type\":\"SOD Policy\"}]}" + }, + { + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "SOD_POLICY_DELETED", + "id": "630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7", + "outcome": "success", + "type": "info", + "kind": "event" + }, + "lumos": { + "activity_logs": { + "actor": { + "actor_type": "Lumos user", + "email": "wile.e.coyote@lumos.com", + "family_name": "Wile", + "given_name": "Coyote" + }, + "event_began_at": "2024-03-12T16:09:14", + "event_type_user_friendly": "A user deleted a SOD Policy" + } + }, + "message": "{\"actor\":{\"actor_type\":\"Lumos user\",\"email\":\"wile.e.coyote@lumos.com\",\"family_name\":\"Wile\",\"given_name\":\"Coyote\"},\"event_began_at\":\"2024-03-12T16:09:14\",\"event_hash\":\"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7\",\"event_metadata\":{},\"event_type\":\"SOD_POLICY_DELETED\",\"event_type_user_friendly\":\"A user deleted a SOD Policy\",\"outcome\":\"Succeeded\",\"targets\":[]}" + } + ] +} \ No newline at end of file diff --git a/packages/lumos/data_stream/activity_logs/_dev/test/system/test-default-config.yml b/packages/lumos/data_stream/activity_logs/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..38880e3f5aa --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +input: httpjson +service: lumos +vars: + api_url: http://{{Hostname}}:{{Port}} +data_stream: + vars: + api_token: xoxp-1234567890 +assert: + hit_count: 1 diff --git a/packages/lumos/data_stream/activity_logs/agent/stream/httpjson.yml.hbs b/packages/lumos/data_stream/activity_logs/agent/stream/httpjson.yml.hbs new file mode 100644 index 00000000000..57fffa6cfed --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/agent/stream/httpjson.yml.hbs @@ -0,0 +1,31 @@ +config_version: "2" +interval: {{interval}} +request.method: "GET" +request.url: {{api_url}}/activity_logs + +{{#if http_client_timeout}} +request.timeout: {{http_client_timeout}} +{{/if}} + +request.transforms: + - set: + target: header.Authorization + value: "Bearer {{api_token}}" + +response.pagination: + - set: + target: url.value + value: '{{api_url}}[[.last_response.body.links.next]]' + fail_on_template_error: true + +response.split: + target: body.items + +cursor: + since: + value: '[[.last_event.created]]' + +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/lumos/data_stream/activity_logs/elasticsearch/ingest_pipeline/default.yml b/packages/lumos/data_stream/activity_logs/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..648d7b43563 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,68 @@ +--- +description: Pipeline for processing Lumos Activity Logs +processors: + - set: + field: ecs.version + value: 8.11.0 + - json: + field: message + target_field: lumos.activity_logs + - rename: + field: lumos.activity_logs.event_hash + target_field: event.id + ignore_missing: true + - rename: + field: lumos.activity_logs.event_type + target_field: event.action + ignore_missing: true + - rename: + field: lumos.activity_logs.outcome + target_field: event.outcome + ignore_missing: true + - set: + field: event.outcome + value: unknown + if: (ctx.event.outcome != "Failed") && (ctx.event.outcome != "Succeeded") + - set: + field: event.outcome + value: failure + if: ctx.event.outcome == "Failed" + - set: + field: event.outcome + value: success + if: ctx.event.outcome == "Succeeded" + - set: + field: event.kind + value: event + - set: + field: event.type + value: info + - script: + description: Drops null/empty values recursively + lang: painless + ignore_failure: true + source: | + boolean drop(Object o) { + if (o == null || o == "") { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); +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: event.kind + value: pipeline_error diff --git a/packages/lumos/data_stream/activity_logs/fields/base-fields.yml b/packages/lumos/data_stream/activity_logs/fields/base-fields.yml new file mode 100644 index 00000000000..d1d44fd3da9 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/fields/base-fields.yml @@ -0,0 +1,16 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: lumos +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/packages/lumos/data_stream/activity_logs/fields/ecs.yml b/packages/lumos/data_stream/activity_logs/fields/ecs.yml new file mode 100644 index 00000000000..553d3da3148 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/fields/ecs.yml @@ -0,0 +1,4 @@ +- external: ecs + name: ecs.version +- external: ecs + name: message diff --git a/packages/lumos/data_stream/activity_logs/fields/fields.yml b/packages/lumos/data_stream/activity_logs/fields/fields.yml new file mode 100644 index 00000000000..763d709168a --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/fields/fields.yml @@ -0,0 +1,39 @@ +- name: input.type + type: keyword + description: Input type +- name: event.id + type: keyword + description: The event hash +- name: event.created + type: date + description: The time the event began +- name: event.action + type: keyword + description: The activity that occurred +- name: event.outcome + type: keyword + description: The outcome of the event, whether it succeeded or failed +- name: lumos.activity_logs.actor.actor_type + type: keyword + description: The type of actor +- name: lumos.activity_logs.actor.email + type: keyword + description: The email of the actor +- name: lumos.activity_logs.actor.family_name + type: keyword + description: The family name of the actor +- name: lumos.activity_logs.actor.given_name + type: keyword + description: The given name of the actor +- name: lumos.activity_logs.event_type_user_friendly + type: keyword + description: The user friendly type of the event +- name: lumos.activity_logs.event_began_at + type: keyword + description: The time the event began +- name: lumos.activity_logs.targets + type: group +- name: lumos.activity_logs.targets.target_type + type: keyword +- name: lumos.activity_logs.targets.name + type: keyword diff --git a/packages/lumos/data_stream/activity_logs/manifest.yml b/packages/lumos/data_stream/activity_logs/manifest.yml new file mode 100644 index 00000000000..8cf49ac76dd --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/manifest.yml @@ -0,0 +1,39 @@ +type: logs +title: Lumos Activity Logs +streams: + - input: httpjson + vars: + - name: api_token + type: password + title: API Token + description: The API Token used to authenticate with the Lumos API + multi: false + required: true + show_user: true + secret: true + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + description: Interval at which the logs will be pulled. The value must be between 2m and 1h. Supported units for this parameter are h/m/s. + default: 1h + - name: initial_interval + type: text + title: Initial Interval + multi: false + required: true + show_user: false + description: Initial interval at which the logs will be pulled. Defaults to 24 hours. Supported units for this parameter are h/m/s. + default: 24h + - 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. \nThis executes in the agent before the logs are parsed. \nSee [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details.\n" + template_path: httpjson.yml.hbs + title: Lumos Activity Logs + description: Collect Lumos Activity Logs via the API diff --git a/packages/lumos/data_stream/activity_logs/sample_event.json b/packages/lumos/data_stream/activity_logs/sample_event.json new file mode 100644 index 00000000000..3ee0174f430 --- /dev/null +++ b/packages/lumos/data_stream/activity_logs/sample_event.json @@ -0,0 +1,78 @@ +{ + "@timestamp": "2024-03-14T17:53:58.869Z", + "agent": { + "ephemeral_id": "9d0d6b51-1c05-4ab1-ab5c-c16e485d734f", + "id": "f57bb12d-cf67-4ec4-9ed0-52eeb865959e", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.1" + }, + "data_stream": { + "dataset": "lumos.activity_logs", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "f57bb12d-cf67-4ec4-9ed0-52eeb865959e", + "snapshot": false, + "version": "8.12.1" + }, + "event": { + "action": "SOD_POLICY_DELETED", + "agent_id_status": "verified", + "created": "2024-03-14T17:53:58.869Z", + "dataset": "lumos.activity_logs", + "id": "630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7", + "ingested": "2024-03-14T17:54:10Z", + "kind": "event", + "outcome": "success", + "type": "info" + }, + "host": { + "architecture": "aarch64", + "containerized": false, + "hostname": "docker-fleet-agent", + "id": "fb3be8e9409740ebb6621b777f0c397d", + "ip": [ + "192.168.144.7" + ], + "mac": [ + "02-42-C0-A8-90-07" + ], + "name": "docker-fleet-agent", + "os": { + "codename": "focal", + "family": "debian", + "kernel": "6.6.12-linuxkit", + "name": "Ubuntu", + "platform": "ubuntu", + "type": "linux", + "version": "20.04.6 LTS (Focal Fossa)" + } + }, + "input": { + "type": "httpjson" + }, + "lumos": { + "activity_logs": { + "actor": { + "actor_type": "Lumos user", + "email": "wile.e.coyote@lumos.com", + "family_name": "Wile", + "given_name": "Coyote" + }, + "event_began_at": "2024-03-12T16:09:14", + "event_type_user_friendly": "A user deleted a SOD Policy", + "targets": [ + { + "name": "Untitled Rule", + "target_type": "SOD Policy" + } + ] + } + }, + "message": "{\"actor\":{\"actor_type\":\"Lumos user\",\"email\":\"wile.e.coyote@lumos.com\",\"family_name\":\"Wile\",\"given_name\":\"Coyote\"},\"event_began_at\":\"2024-03-12T16:09:14\",\"event_hash\":\"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7\",\"event_metadata\":{},\"event_type\":\"SOD_POLICY_DELETED\",\"event_type_user_friendly\":\"A user deleted a SOD Policy\",\"outcome\":\"Succeeded\",\"targets\":[{\"name\":\"Untitled Rule\",\"target_type\":\"SOD Policy\"}]}" +} \ No newline at end of file diff --git a/packages/lumos/docs/README.md b/packages/lumos/docs/README.md new file mode 100644 index 00000000000..71a04477a00 --- /dev/null +++ b/packages/lumos/docs/README.md @@ -0,0 +1,136 @@ +# Lumos Integration + +The Lumos integration uses [Lumos' API](https://api.lumos.com/) to retrieve Activity Logs and ingest them into Elasticsearch. This allows you to search, observe, and visualize the Activity Logs through Elasticsearch. + +The Elastic agent running this integration interacts with Lumos' infrastructure using their APIs to retrieve [Activity Logs](https://api.lumos.com/activity_logs) for a Lumos tenant. + +## Configuration + +### Enabling the integration in Elastic + +1. In Kibana go to **Management > Integrations** +2. In the "Search for integrations" search bar type **Lumos**. +3. Click on "Lumos" integration from the search results. +4. Click on **Add Lumos** button to add Lumos integration. + +### Configure Lumos Activity Logs data stream + +1. In Lumos go to **Settings > API Tokens** +2. Click on "Add API Token", enter a name and description +3. Copy the key starting with `lsk_` +4. While adding Lumos integration in Elastic, paste your key into the `API Token` field + +## Logs + +### Activity Logs + +Activity Logs summarize the history of changes and events occurring within Lumos. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.action | The activity that occurred | keyword | +| event.created | The time the event began | date | +| event.id | The event hash | keyword | +| event.module | Event module | constant_keyword | +| event.outcome | The outcome of the event, whether it succeeded or failed | keyword | +| input.type | Input type | keyword | +| lumos.activity_logs.actor.actor_type | The type of actor | keyword | +| lumos.activity_logs.actor.email | The email of the actor | keyword | +| lumos.activity_logs.actor.family_name | The family name of the actor | keyword | +| lumos.activity_logs.actor.given_name | The given name of the actor | keyword | +| lumos.activity_logs.event_began_at | The time the event began | keyword | +| lumos.activity_logs.event_type_user_friendly | The user friendly type of the event | keyword | +| lumos.activity_logs.targets.name | | keyword | +| lumos.activity_logs.targets.target_type | | keyword | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | + + +An example event for `activity` looks as following: + +```json +{ + "@timestamp": "2024-03-14T17:53:58.869Z", + "agent": { + "ephemeral_id": "9d0d6b51-1c05-4ab1-ab5c-c16e485d734f", + "id": "f57bb12d-cf67-4ec4-9ed0-52eeb865959e", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.1" + }, + "data_stream": { + "dataset": "lumos.activity_logs", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "f57bb12d-cf67-4ec4-9ed0-52eeb865959e", + "snapshot": false, + "version": "8.12.1" + }, + "event": { + "action": "SOD_POLICY_DELETED", + "agent_id_status": "verified", + "created": "2024-03-14T17:53:58.869Z", + "dataset": "lumos.activity_logs", + "id": "630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7", + "ingested": "2024-03-14T17:54:10Z", + "kind": "event", + "outcome": "success", + "type": "info" + }, + "host": { + "architecture": "aarch64", + "containerized": false, + "hostname": "docker-fleet-agent", + "id": "fb3be8e9409740ebb6621b777f0c397d", + "ip": [ + "192.168.144.7" + ], + "mac": [ + "02-42-C0-A8-90-07" + ], + "name": "docker-fleet-agent", + "os": { + "codename": "focal", + "family": "debian", + "kernel": "6.6.12-linuxkit", + "name": "Ubuntu", + "platform": "ubuntu", + "type": "linux", + "version": "20.04.6 LTS (Focal Fossa)" + } + }, + "input": { + "type": "httpjson" + }, + "lumos": { + "activity_logs": { + "actor": { + "actor_type": "Lumos user", + "email": "wile.e.coyote@lumos.com", + "family_name": "Wile", + "given_name": "Coyote" + }, + "event_began_at": "2024-03-12T16:09:14", + "event_type_user_friendly": "A user deleted a SOD Policy", + "targets": [ + { + "name": "Untitled Rule", + "target_type": "SOD Policy" + } + ] + } + }, + "message": "{\"actor\":{\"actor_type\":\"Lumos user\",\"email\":\"wile.e.coyote@lumos.com\",\"family_name\":\"Wile\",\"given_name\":\"Coyote\"},\"event_began_at\":\"2024-03-12T16:09:14\",\"event_hash\":\"630b90cedc35a8a5f43361534099bee51e032f42dd442085fc76ef094d228f543c78fbe59c132df992cf71a6b8496504e8ebbc6020fbae1f34206676985412e7\",\"event_metadata\":{},\"event_type\":\"SOD_POLICY_DELETED\",\"event_type_user_friendly\":\"A user deleted a SOD Policy\",\"outcome\":\"Succeeded\",\"targets\":[{\"name\":\"Untitled Rule\",\"target_type\":\"SOD Policy\"}]}" +} +``` \ No newline at end of file diff --git a/packages/lumos/img/activity-log-screenshot.png b/packages/lumos/img/activity-log-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bc266a997f9a08503fb16bf9ae85da48ba6b3a03 GIT binary patch literal 91428 zcmagG1z42b)<290QYs)yN(+dTgdjOch)9Pt4BZ3LIgBVNCEXw*-QC^YozghK07DHi z^B>Q7pY!;g_j`Qjy62jG-}_!W)?V>jYwv4~;Zx#cU|`&neIuocfq^}XfpM!0 z_YV4r!_{Ok`bO7EQc_t~Qj$*D(caw3)(ivVX(Z@NlU#@L!!9LI)ijqB7FnAF3wKeJ zxkKSAsh>nYH6O*FR9X4+fu9hw*1p``*#Oerw^MYPTzW%)2{lQ?h)>j*_lBRSlh|o3@;}( zLINz9vK|0Q2rE9OG5IjW@qj#=!$P+1U)8_T1AM8_h_{Lu4P^{_(V1a*=UEi4WTp@D zob6uA=LawQOUuGU@Zaw$eSCPIL~u=7%P{B_Lmcb700vLw5>Sq}`swA}!;xw}I7V&# zt$_QwI^XgA{OlZ;rXf0~Q<&kz@yUz8TlEp5CH42QSbQ%(Z8vF(l=!?wM6{ailN8pP zV7-0KmV)NChMAVExq<@5Gjtgj<5r**1{S(>3;m@;e=#s_M+IQupno5rzfxZ@|Ek5F z{d)Va@~yI8FTPTfl$AyQs+l;Nnb|p6+B;W8!Ku(q%~+{xIcq7%3z^u1IE_s0jm_uzupi+mw!FxVxariE6z5e3|b1xbdvUtW_0|V z&pDqnh~d-G(TO;knhU8)z5X9^^qnY!rL*&UAucXAH#bf3^n$o*>t+8ZK_m=Uo438%-+m>#2~kmAjd(wv-hJ%^q|gVtl;3BL8~-f7Sfm z<8PE&e^YYv3G)9=`dih1lfH8@bCk3Pq5E_e`+I5rhxqr({~;9N`Ze|6Sn+Q@|LZB5 z(PH=_T>n`#G5lM&!Dz)4$B>nJrS5)fFBRtl^*coK$Z}J1+86O1x?8*N>T%zwNQo0+ zVSNvF{>~co^=a<)XiJcDtbvrc%J(4k-EmfKboFKHa-DAAQfCtfe78kqTlS5y