Detection rules › Splunk
Splunk rules: 11
ASL AWS Detect Users creating keys with encrypt policy without MFA
#The following analytic detects the creation of AWS KMS keys with an encryption policy accessible to everyone, including external entities. It leverages AWS CloudTrail logs from Amazon Security Lake to identify CreateKey or PutKeyPolicy events where the kms:Encrypt action is granted to all principals. This activity is significant as it may indicate a compromised account, allowing an attacker to misuse the encryption key to target other organizations. If confirmed malicious, this could lead to unauthorized data encryption, potentially disrupting operations and compromising sensitive information across multiple entities.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Impact |
Telemetry Coverage
Rules Detecting the Same Action
These rules filter on the same operation.
Rule Body
name: ASL AWS Detect Users creating keys with encrypt policy without MFA
id: 16ae9076-d1d5-411c-8fdd-457504b33dac
version: 8
creation_date: '2020-10-27'
modification_date: '2026-05-13'
author: Patrick Bareiss, Splunk
status: production
type: TTP
description: The following analytic detects the creation of AWS KMS keys with an encryption policy accessible to everyone, including external entities. It leverages AWS CloudTrail logs from Amazon Security Lake to identify `CreateKey` or `PutKeyPolicy` events where the `kms:Encrypt` action is granted to all principals. This activity is significant as it may indicate a compromised account, allowing an attacker to misuse the encryption key to target other organizations. If confirmed malicious, this could lead to unauthorized data encryption, potentially disrupting operations and compromising sensitive information across multiple entities.
data_source:
- ASL AWS CloudTrail
search: |-
`amazon_security_lake` api.operation=PutKeyPolicy OR api.operation=CreateKey
| spath input=api.request.data path=policy output=policy
| spath input=policy
| rename Statement{}.Action as Action, Statement{}.Principal as Principal
| eval Statement=mvzip(Action,Principal,"
| ")
| mvexpand Statement
| eval action=mvindex(split(Statement, "
| "), 0)
| eval principal=mvindex(split(Statement, "
| "), 1)
| search action=kms*
| regex principal="\*"
| fillnull
| stats count min(_time) as firstTime max(_time) as lastTime
BY actor.user.uid api.operation api.service.name
http_request.user_agent src_endpoint.ip actor.user.account.uid
cloud.provider cloud.region api.request.data
| rename actor.user.uid as user api.operation as action api.service.name as dest http_request.user_agent as user_agent src_endpoint.ip as src actor.user.account.uid as vendor_account cloud.provider as vendor_product cloud.region as vendor_region
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `asl_aws_detect_users_creating_keys_with_encrypt_policy_without_mfa_filter`
how_to_implement: The detection is based on Cloudtrail events from Amazon Security Lake events from Amazon Web Services (AWS), which is a centralized data lake that provides security-related data from AWS services. To use this detection, you must ingest CloudTrail logs from Amazon Security Lake into Splunk. To run this search, ensure that you ingest events using the latest version of Splunk Add-on for Amazon Web Services (https://splunkbase.splunk.com/app/1876) or the Federated Analytics App.
known_false_positives: No false positives have been identified at this time.
references:
- https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/
- https://github.com/d1vious/git-wild-hunt
- https://www.youtube.com/watch?v=PgzNib37g0M
finding:
title: AWS account is potentially compromised and user $user$ is trying to compromise other accounts
entity:
field: user
type: user
score: 50
analytic_story:
- Ransomware Cloud
asset_type: AWS Account
mitre_attack_id:
- T1486
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: threat
Stages and Predicates
Stage 1: search
`amazon_security_lake` api.operation=PutKeyPolicy OR api.operation=CreateKey
Stage 2: spath
| spath input=api.request.data path=policy output=policy
Stage 3: spath
| spath input=policy
Stage 4: rename
| rename Statement{}.Action as Action, Statement{}.Principal as Principal
Stage 5: eval
| eval Statement=mvzip(Action,Principal,"
| ")
Stage 6: mvexpand
| mvexpand Statement
Stage 7: eval
| eval action=mvindex(split(Statement, "
| "), 0)
Stage 8: eval
| eval principal=mvindex(split(Statement, "
| "), 1)
Stage 9: search
| search action=kms*
Stage 10: regex
| regex principal="\*"
Stage 11: fillnull
| fillnull
Stage 12: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY actor.user.uid api.operation api.service.name
http_request.user_agent src_endpoint.ip actor.user.account.uid
cloud.provider cloud.region api.request.data
Stage 13: rename
| rename actor.user.uid as user api.operation as action api.service.name as dest
http_request.user_agent as user_agent src_endpoint.ip as src
actor.user.account.uid as vendor_account cloud.provider as vendor_product
cloud.region as vendor_region
Stage 14: search
| `security_content_ctime(firstTime)`
Stage 15: search
| `security_content_ctime(lastTime)`
Stage 16: search
| `asl_aws_detect_users_creating_keys_with_encrypt_policy_without_mfa_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
action | eq |
| field:"action" kind:eq value:"kms*" |
api.operation | eq |
| field:"aws::eventName" kind:eq |
principal | regex_match |
| field:"principal" kind:regex_match value:"*" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"aws:asl" |
AWS Lambda UpdateFunctionCode
#The following analytic identifies IAM users attempting to update or modify AWS Lambda code via the AWS CLI. It leverages CloudTrail logs to detect successful UpdateFunctionCode events initiated by IAM users. This activity is significant as it may indicate an attempt to gain persistence, further access, or plant backdoors within your AWS environment. If confirmed malicious, an attacker could upload and execute malicious code automatically when the Lambda function is triggered, potentially compromising the integrity and security of your AWS infrastructure.
Known False Positives
- While this search has no known false positives, it is possible that an AWS admin or an autorized IAM user has updated the lambda fuction code legitimately.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| AWS | CloudTrail event UpdateFunctionCode: Updates a Lambda function's code. |
Rule Body
name: AWS Lambda UpdateFunctionCode
id: 211b80d3-6340-4345-11ad-212bf3d0d111
version: 9
creation_date: '2022-02-28'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: Hunting
description: The following analytic identifies IAM users attempting to update or modify AWS Lambda code via the AWS CLI. It leverages CloudTrail logs to detect successful `UpdateFunctionCode` events initiated by IAM users. This activity is significant as it may indicate an attempt to gain persistence, further access, or plant backdoors within your AWS environment. If confirmed malicious, an attacker could upload and execute malicious code automatically when the Lambda function is triggered, potentially compromising the integrity and security of your AWS infrastructure.
data_source:
- AWS CloudTrail
search: |-
`cloudtrail` eventSource=lambda.amazonaws.com eventName=UpdateFunctionCode* errorCode = success user_type=IAMUser
| rename user_name as user
| stats count min(_time) as firstTime max(_time) as lastTime
BY signature dest user
user_agent src vendor_account
vendor_region vendor_product
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `aws_lambda_updatefunctioncode_filter`
how_to_implement: You must install Splunk AWS Add on and enable Cloudtrail logs in your AWS Environment.
known_false_positives: While this search has no known false positives, it is possible that an AWS admin or an autorized IAM user has updated the lambda fuction code legitimately.
references:
- http://detectioninthe.cloud/execution/modify_lambda_function_code/
- https://sysdig.com/blog/exploit-mitigate-aws-lambdas-mitre/
analytic_story:
- Suspicious Cloud User Activities
asset_type: AWS Account
mitre_attack_id:
- T1204
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: threat
Stages and Predicates
Stage 1: search
`cloudtrail` eventSource=lambda.amazonaws.com eventName=UpdateFunctionCode* errorCode = success
user_type=IAMUser
Stage 2: rename
| rename user_name as user
Stage 3: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY signature dest user
user_agent src vendor_account
vendor_region vendor_product
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `aws_lambda_updatefunctioncode_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
errorCode | eq |
| field:"aws::errorCode" kind:eq value:"success" |
eventName | eq |
| field:"aws::eventName" kind:eq value:"UpdateFunctionCode*" |
eventSource | eq |
| field:"aws::eventSource" kind:eq value:"lambda.amazonaws.com" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"aws:cloudtrail" |
user_type | eq |
| field:"user_type" kind:eq value:"IAMUser" |
Cisco SD-WAN - Uncommon User-Agent Multi-URI Activity
#This hunting search is designed to surface source IP activity using uncommon HTTP user-agents across multiple URI paths in Cisco SD-WAN Manager serviceproxy access logs. It looks for source and user-agent combinations that access more than one distinct URI, then keeps only low-volume behavior (requests<=50) to reduce noise from normal high-volume traffic. Use this hunt to pivot on http_user_agent and src and identify possible automation, scripted reconnaissance, or exploitation attempts.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Reconnaissance |
Rule Body
name: Cisco SD-WAN - Uncommon User-Agent Multi-URI Activity
id: 201022d7-a35c-470a-93ff-ae335c42e69d
version: 2
creation_date: '2026-03-12'
modification_date: '2026-05-13'
author: Nasreddine Bencherchali, Splunk
status: production
type: Hunting
description: |
This hunting search is designed to surface source IP activity using uncommon HTTP user-agents across multiple URI paths in Cisco SD-WAN Manager serviceproxy access logs.
It looks for source and user-agent combinations that access more than one distinct URI, then keeps only low-volume behavior (`requests<=50`) to reduce noise from normal high-volume traffic.
Use this hunt to pivot on `http_user_agent` and `src` and identify possible automation, scripted reconnaissance, or exploitation attempts.
data_source:
- Cisco SD-WAN Service Proxy Access Logs
search: |-
`cisco_sd_wan_service_proxy_access`
| rex field=_raw "^\[.*?\]\s+\"(?<http_method>\S+)\s+(?<uri>\S+)\s+(?<http_protocol>[^\"]+)\"\s+(?<http_response_code>\S+)\s+(?<response_flags>\S+)\s+(?<bytes_in>\S+)\s+(?<bytes_out>\S+)\s+(?<duration>\S+)\s+(?<upstream_service_time>\S+)\s+\"(?<src>[^\"]+)\"\s+\"(?<http_user_agent>[^\"]+)\"\s+\"(?<x_request_id>[^\"]+)\"\s+\"(?<dest>[^\"]+)\"\s+\"(?<upstream_host>[^\"]+)\""
| rex field=uri "(?<uri_path>[^\?]+)(?<uri_query>\?.*)?"
| bin _time span=5m
| stats count as requests
min(_time) as firstTime
max(_time) as lastTime
values(uri) as uri
dc(uri) as uri_count
by src http_user_agent
| where requests<=50 AND uri_count>1
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| sort 0 +requests
| `cisco_sd_wan___uncommon_user_agent_multi_uri_activity_filter`
how_to_implement: |
This detection requires Cisco SD-WAN Manager Envoy access logs to be ingested into Splunk.
These logs are located in "/var/log/nms/containers/service-proxy/serviceproxy-access.log".
known_false_positives: |
No false positives have been identified at this time.
references:
- https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sdwan-authbp-qwCX8D4v
- https://github.com/zerozenxlabs/CVE-2026-20127---Cisco-SD-WAN-Preauth-RCE
analytic_story:
- Cisco Catalyst SD-WAN Analytics
asset_type: Network
mitre_attack_id:
- T1595
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: network
security_domain: network
Stages and Predicates
Stage 1: search
`cisco_sd_wan_service_proxy_access`
Stage 2: rex
| rex field=_raw
"^\[.*?\]\s+\"(?<http_method>\S+)\s+(?<uri>\S+)\s+(?<http_protocol>[^\"]+)\"\s+(?<http_response_code>\S+)\s+(?<response_flags>\S+)\s+(?<bytes_in>\S+)\s+(?<bytes_out>\S+)\s+(?<duration>\S+)\s+(?<upstream_service_time>\S+)\s+\"(?<src>[^\"]+)\"\s+\"(?<http_user_agent>[^\"]+)\"\s+\"(?<x_request_id>[^\"]+)\"\s+\"(?<dest>[^\"]+)\"\s+\"(?<upstream_host>[^\"]+)\""
Stage 3: rex
| rex field=uri "(?<uri_path>[^\?]+)(?<uri_query>\?.*)?"
Stage 4: bucket
| bin _time span=5m
Stage 5: stats
| stats count as requests
min(_time) as firstTime
max(_time) as lastTime
values(uri) as uri
dc(uri) as uri_count
by src http_user_agent
Stage 6: where
| where requests<=50 AND uri_count>1
Stage 7: search
| `security_content_ctime(firstTime)`
Stage 8: search
| `security_content_ctime(lastTime)`
Stage 9: sort
| sort 0 +requests
Stage 10: search
| `cisco_sd_wan___uncommon_user_agent_multi_uri_activity_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
requests | le |
| field:"requests" kind:le value:"50" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"cisco:sdwan:access" |
uri_count | gt |
| field:"uri_count" kind:gt value:"1" |
Cisco Secure Firewall - Remote Access Software Usage Traffic
#The following analytic detects network traffic associated with known remote access software applications that are covered by Cisco Secure Firewall Application Detectors, such as AnyDesk, GoToMyPC, LogMeIn, and TeamViewer. It leverages Cisco Secure Firewall Threat Defense Connection Event. This activity is significant because adversaries often use remote access tools to maintain unauthorized access to compromised environments. If confirmed malicious, this activity could allow attackers to control systems remotely, exfiltrate data, or deploy additional malware, posing a severe threat to the organization's security.
Known False Positives
- It is possible that legitimate remote access software is used within the environment. Known false positives can be added to the remote_access_software_usage_exception.csv lookup to globally suppress these situations across all remote access content
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
Rule Body
name: Cisco Secure Firewall - Remote Access Software Usage Traffic
id: ac54d39e-a75d-4f42-971d-006db3a0423a
version: 9
creation_date: '2025-05-28'
modification_date: '2026-05-13'
author: Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
The following analytic detects network traffic associated with known remote access software applications
that are covered by Cisco Secure Firewall Application Detectors, such as AnyDesk, GoToMyPC, LogMeIn, and TeamViewer.
It leverages Cisco Secure Firewall Threat Defense Connection Event.
This activity is significant because adversaries often use remote access tools to maintain unauthorized access to compromised environments.
If confirmed malicious, this activity could allow attackers to control systems remotely, exfiltrate
data, or deploy additional malware, posing a severe threat to the organization's security.
data_source:
- Cisco Secure Firewall Threat Defense Connection Event
search: |
`cisco_secure_firewall` EventType=ConnectionEvent
| stats min(_time) as firstTime max(_time) as lastTime
values(dest_port) as dest_port
values(dest) as dest
values(transport) as transport
values(url) as url
values(rule) as rule
count by src ClientApplication action
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| lookup cisco_secure_firewall_appid_remote_mgmt_and_desktop_tools appName AS ClientApplication OUTPUT category, appDescription as Description
| search category IN ("remote administration", "remote desktop control")
| `remote_access_software_usage_exceptions`
| `cisco_secure_firewall___remote_access_software_usage_traffic_filter`
how_to_implement: |
This search requires Cisco Secure Firewall Threat Defense Logs, which
includes the ConnectionEvent EventType. This search uses an input macro named `cisco_secure_firewall`.
We strongly recommend that you specify your environment-specific configurations
(index, source, sourcetype, etc.) for Cisco Secure Firewall Threat Defense logs. Replace the macro definition
with configurations for your Splunk environment. The search also uses a post-filter
macro designed to filter out known false positives.
The logs are to be ingested using the Splunk Add-on for Cisco Security Cloud (https://splunkbase.splunk.com/app/7404).
The access policy must also enable logging.
The "exceptions" macro leverages both an Assets and Identities lookup, as well as a KVStore collection called "remote_software_exceptions"
that lets you track and maintain device- based exceptions for this set of detections.
known_false_positives: |
It is possible that legitimate remote access software is used within the environment. Known false positives can be added to the remote_access_software_usage_exception.csv lookup to globally suppress these situations across all remote access content
references:
- https://attack.mitre.org/techniques/T1219/
- https://thedfirreport.com/2022/08/08/bumblebee-roasts-its-way-to-domain-admin/
- https://thedfirreport.com/2022/11/28/emotet-strikes-again-lnk-file-leads-to-domain-wide-ransomware/
intermediate_findings:
entities:
- field: src
type: system
score: 20
message: Traffic to known remote access software [$ClientApplication$] was detected from $src$.
threat_objects:
- field: ClientApplication
type: signature
analytic_story:
- Insider Threat
- Command And Control
- Ransomware
- Remote Monitoring and Management Software
- Cisco Secure Firewall Threat Defense Analytics
- Scattered Spider
- Interlock Ransomware
- Scattered Lapsus$ Hunters
asset_type: Network
mitre_attack_id:
- T1219
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: network
security_domain: network
Stages and Predicates
Stage 1: search
`cisco_secure_firewall` EventType=ConnectionEvent
Stage 2: stats
| stats min(_time) as firstTime max(_time) as lastTime
values(dest_port) as dest_port
values(dest) as dest
values(transport) as transport
values(url) as url
values(rule) as rule
count by src ClientApplication action
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: lookup
| lookup cisco_secure_firewall_appid_remote_mgmt_and_desktop_tools appName AS ClientApplication
OUTPUT category, appDescription as Description
Stage 6: search
| search category IN ("remote administration", "remote desktop control")
Stage 7: search
| `remote_access_software_usage_exceptions`
Stage 8: search
| `cisco_secure_firewall___remote_access_software_usage_traffic_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventType | eq |
| field:"EventType" kind:eq value:"ConnectionEvent" |
category | in |
| field:"category" kind:in |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"cisco:sfw:estreamer" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
rmm_exception | eq | TRUE | excludes:rmm_exception field:"rmm_exception" value:"TRUE" |
rmm_exception_end | in | FALSE, UNLIMITED | excludes:rmm_exception_end field:"rmm_exception_end" value:"FALSE" field:"rmm_exception_end" value:"UNLIMITED" |
Citrix ADC and Gateway CitrixBleed 2 Memory Disclosure
#This detection identifies potential exploitation attempts of CVE-2025-5777 (CitrixBleed 2), a memory disclosure vulnerability in Citrix NetScaler ADC and Gateway. The vulnerability is triggered by sending POST requests with incomplete form data to the /p/u/doAuthentication.do endpoint, causing the device to leak memory contents including session tokens and authentication materials. This search looks for POST requests to the vulnerable endpoint that may indicate scanning or exploitation attempts.
Known False Positives
- Legitimate authentication flows will trigger this detection as they access the doAuthentication.do endpoint. However, repeated automated requests, especially from HeadlessChrome user agents or with incomplete form data, should be investigated. Focus on unusual patterns like multiple rapid requests or non-standard user agents.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: Citrix ADC and Gateway CitrixBleed 2 Memory Disclosure
id: bef92f3f-7dc8-413a-8989-50581039e250
version: 5
creation_date: '2025-07-02'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: |
This detection identifies potential exploitation attempts of CVE-2025-5777 (CitrixBleed 2), a memory disclosure vulnerability in Citrix NetScaler ADC and Gateway.
The vulnerability is triggered by sending POST requests with incomplete form data to the /p/u/doAuthentication.do endpoint, causing the device to leak memory contents including session tokens and authentication materials.
This search looks for POST requests to the vulnerable endpoint that may indicate scanning or exploitation attempts.
data_source:
- Suricata
search: |
| tstats count min(_time) as firstTime max(_time) as lastTime from datamodel=Web where
Web.url IN ("*/p/u/doAuthentication.do*")
Web.http_method="POST"
Web.status=200
by Web.http_user_agent, Web.status, Web.http_method,
Web.url, Web.url_length, Web.src, Web.dest, sourcetype
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `citrix_adc_and_gateway_citrixbleed_2_memory_disclosure_filter`
how_to_implement: |
To implement this search, ensure that web traffic logs from Citrix NetScaler ADC and Gateway devices are being ingested into Splunk and mapped to the Web data model.
The logs should include URL paths, HTTP methods, status codes, source and destination IPs, and user agents.
Look specifically for POST requests to /p/u/doAuthentication.do endpoint which is the primary attack vector for CVE-2025-5777.
known_false_positives: |
Legitimate authentication flows will trigger this detection as they access the doAuthentication.do endpoint. However, repeated automated requests, especially from HeadlessChrome user agents or with incomplete form data, should be investigated.
Focus on unusual patterns like multiple rapid requests or non-standard user agents.
references:
- https://support.citrix.com/support-home/kbsearch/article?articleNumber=CTX693420
- https://www.netscaler.com/blog/news/critical-security-updates-for-netscaler-netscaler-gateway-and-netscaler-console/
- https://github.com/mingshenhk/CitrixBleed-2-CVE-2025-5777-PoC-
- https://horizon3.ai/attack-research/attack-blogs/cve-2025-5777-citrixbleed-2-write-up-maybe/
- https://labs.watchtowr.com/how-much-more-must-we-bleed-citrix-netscaler-memory-disclosure-citrixbleed-2-cve-2025-5777/
- https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2025/CVE-2025-5777.yaml
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Potential CitrixBleed 2 (CVE-2025-5777) exploitation from $src$ to $dest$ detected. POST requests to /p/u/doAuthentication.do may indicate memory disclosure vulnerability exploitation.
threat_objects:
- field: src
type: system
analytic_story:
- Citrix NetScaler ADC and NetScaler Gateway CVE-2025-5777
asset_type: Web Application
cve:
- CVE-2025-5777
mitre_attack_id:
- T1190
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats count min(_time) as firstTime max(_time) as lastTime from datamodel=Web where
Web.url IN ("*/p/u/doAuthentication.do*")
Web.http_method="POST"
Web.status=200
by Web.http_user_agent, Web.status, Web.http_method,
Web.url, Web.url_length, Web.src, Web.dest, sourcetype
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `citrix_adc_and_gateway_citrixbleed_2_memory_disclosure_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.http_method | eq |
| field:"cs-method" kind:eq value:"POST" |
Web.status | eq |
| field:"Web.status" kind:eq value:"200" |
Web.url | in |
| field:"c-uri" kind:in value:"*/p/u/doAuthentication.do*" |
Confluence Pre-Auth RCE via OGNL Injection CVE-2023-22527
#The following analytic identifies attempts to exploit a critical template injection vulnerability (CVE-2023-22527) in outdated Confluence Data Center and Server versions. It detects POST requests to the "/template/aui/text-inline.vm" endpoint with HTTP status codes 200 or 202, indicating potential OGNL injection attacks. This activity is significant as it allows unauthenticated attackers to execute arbitrary code remotely. If confirmed malicious, attackers could gain full control over the affected Confluence instance, leading to data breaches, system compromise, and further network infiltration. Immediate patching is essential to mitigate this threat.
Known False Positives
- False positives may be present with legitimate applications. Attempt to filter by dest IP or use Asset groups to restrict to confluence servers.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: Confluence Pre-Auth RCE via OGNL Injection CVE-2023-22527
id: f56936c0-ae6f-4eeb-91ff-ecc1448c6105
version: 9
creation_date: '2024-01-24'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies attempts to exploit a critical template injection vulnerability (CVE-2023-22527) in outdated Confluence Data Center and Server versions. It detects POST requests to the "/template/aui/text-inline.vm" endpoint with HTTP status codes 200 or 202, indicating potential OGNL injection attacks. This activity is significant as it allows unauthenticated attackers to execute arbitrary code remotely. If confirmed malicious, attackers could gain full control over the affected Confluence instance, leading to data breaches, system compromise, and further network infiltration. Immediate patching is essential to mitigate this threat.
data_source:
- Suricata
search: |-
| tstats count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Web
WHERE Web.url="*/template/aui/text-inline.vm*" Web.http_method=POST Web.status IN (200, 202)
BY Web.src, Web.dest, Web.http_user_agent,
Web.url, Web.status
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `confluence_pre_auth_rce_via_ognl_injection_cve_2023_22527_filter`
how_to_implement: To successfully implement this search you need to be ingesting information on Web traffic that include fields relavent for traffic into the `Web` datamodel.
known_false_positives: False positives may be present with legitimate applications. Attempt to filter by dest IP or use Asset groups to restrict to confluence servers.
references:
- https://github.com/cleverg0d/CVE-2023-22527
- https://confluence.atlassian.com/security/cve-2023-22527-rce-remote-code-execution-vulnerability-in-confluence-data-center-and-confluence-server-1333990257.html
finding:
title: Exploitation attempts on a known vulnerability in Atlassian Confluence detected. The source IP is $src$ and the destination hostname is $dest$.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: src
type: ip_address
analytic_story:
- Confluence Data Center and Confluence Server Vulnerabilities
asset_type: Web Application
cve:
- CVE-2023-22527
mitre_attack_id:
- T1190
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Web
WHERE Web.url="*/template/aui/text-inline.vm*" Web.http_method=POST Web.status IN (200, 202)
BY Web.src, Web.dest, Web.http_user_agent,
Web.url, Web.status
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `confluence_pre_auth_rce_via_ognl_injection_cve_2023_22527_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.http_method | eq |
| field:"cs-method" kind:eq value:"POST" |
Web.status | in |
| field:"Web.status" kind:in |
Web.url | eq |
| field:"c-uri" kind:eq value:"*/template/aui/text-inline.vm*" |
Detect AzureHound File Modifications
#The following analytic detects the creation of specific AzureHound-related files, such as *-azurecollection.zip and various .json files, on disk. It leverages data from the Endpoint.Filesystem datamodel, focusing on file creation events with specific filenames. This activity is significant because AzureHound is a tool used to gather information about Azure environments, similar to SharpHound for on-premises Active Directory. If confirmed malicious, this activity could indicate an attacker is collecting sensitive Azure environment data, potentially leading to further exploitation or privilege escalation within the cloud infrastructure.
Known False Positives
- False positives should be limited as the analytic is specific to a filename with extension .zip. Filter as needed.
MITRE ATT&CK Coverage
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule Body
name: Detect AzureHound File Modifications
id: 1c34549e-c31b-11eb-996b-acde48001122
version: 12
creation_date: '2021-06-03'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the creation of specific AzureHound-related files, such as `*-azurecollection.zip` and various `.json` files, on disk. It leverages data from the Endpoint.Filesystem datamodel, focusing on file creation events with specific filenames. This activity is significant because AzureHound is a tool used to gather information about Azure environments, similar to SharpHound for on-premises Active Directory. If confirmed malicious, this activity could indicate an attacker is collecting sensitive Azure environment data, potentially leading to further exploitation or privilege escalation within the cloud infrastructure.
data_source:
- Sysmon EventID 11
search: |-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
WHERE Filesystem.file_name IN ("*-azurecollection.zip", "*-azprivroleadminrights.json", "*-azglobaladminrights.json", "*-azcloudappadmins.json", "*-azapplicationadmins.json")
BY Filesystem.action Filesystem.dest Filesystem.file_access_time
Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
Filesystem.file_name Filesystem.file_path Filesystem.file_acl
Filesystem.file_size Filesystem.process_guid Filesystem.process_id
Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `detect_azurehound_file_modifications_filter`
how_to_implement: To successfully implement this search you need to be ingesting information on file modifications that include the name of the process, and file, responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Filesystem` node.
known_false_positives: False positives should be limited as the analytic is specific to a filename with extension .zip. Filter as needed.
references:
- https://posts.specterops.io/introducing-bloodhound-4-0-the-azure-update-9b2b26c5e350
- https://github.com/BloodHoundAD/Legacy-AzureHound.ps1/blob/master/AzureHound.ps1
finding:
title: A file - $file_name$ was written to disk that is related to AzureHound, a AzureAD enumeration utility, has occurred on endpoint $dest$ by user $user$.
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: A file - $file_name$ was written to disk that is related to AzureHound, a AzureAD enumeration utility, has occurred on endpoint $dest$ by user $user$.
threat_objects:
- field: file_name
type: file_name
analytic_story:
- Windows Discovery Techniques
asset_type: Endpoint
mitre_attack_id:
- T1069.001
- T1069.002
- T1087.001
- T1087.002
- T1482
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Filesystem
WHERE Filesystem.file_name IN (
"*-azurecollection.zip",
"*-azprivroleadminrights.json",
"*-azglobaladminrights.json",
"*-azcloudappadmins.json",
"*-azapplicationadmins.json"
)
BY
Filesystem.action
Filesystem.dest
Filesystem.file_access_time
Filesystem.file_create_time
Filesystem.file_hash
Filesystem.file_modify_time
Filesystem.file_name
Filesystem.file_path
Filesystem.file_acl
Filesystem.file_size
Filesystem.process_guid
Filesystem.process_id
Filesystem.user
Filesystem.vendor_product
Stage 2: search
| `drop_dm_object_name(Filesystem)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `detect_azurehound_file_modifications_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.file_name | in |
| field:"file_name" kind:in |
Email files written outside of the Outlook directory
#The following analytic detects email files (.pst or .ost) being created outside the standard Outlook directories. It leverages the Endpoint.Filesystem data model to identify file creation events and filters for email files not located in "C:\Users*\My Documents\Outlook Files*" or "C:\Users*\AppData\Local\Microsoft\Outlook*". This activity is significant as it may indicate data exfiltration or unauthorized access to email data. If confirmed malicious, an attacker could potentially access sensitive email content, leading to data breaches or further exploitation within the network.
Known False Positives
- Administrators and users sometimes prefer backing up their email data by moving the email files into a different folder. These attempts will be detected by the search. You should confirm that the activity is legitimate and modify the search to add exclusions, as necessary.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Collection |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule Body
name: Email files written outside of the Outlook directory
id: 8d52cf03-ba25-4101-aa78-07994aed4f74
version: 13
creation_date: '2020-04-29'
modification_date: '2026-07-02'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
description: |-
The following analytic detects email files (.pst or .ost) being created outside the standard Outlook directories.
It leverages the Endpoint.Filesystem data model to identify file creation events and filters for email files not located in "C:\Users\*\My Documents\Outlook Files\*" or "C:\Users\*\AppData\Local\Microsoft\Outlook*".
This activity is significant as it may indicate data exfiltration or unauthorized access to email data.
If confirmed malicious, an attacker could potentially access sensitive email content, leading to data breaches or further exploitation within the network.
data_source:
- Sysmon EventID 11
search: |-
| tstats `security_content_summariesonly`
count values(Filesystem.file_path) as file_path
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Filesystem WHERE
Filesystem.action IN (
"created",
"modified"
)
Filesystem.file_name IN (
"*.pst",
"*.ost"
)
NOT Filesystem.file_path IN (
"C:\\Users\\*\\My Documents\\Outlook Files\\*",
"C:\\Users\\*\\AppData\\Local\\Microsoft\\Outlook*"
)
BY Filesystem.action Filesystem.dest Filesystem.file_access_time
Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
Filesystem.file_name Filesystem.file_path Filesystem.file_acl
Filesystem.file_size Filesystem.process_guid Filesystem.process_id
Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name("Filesystem")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `email_files_written_outside_of_the_outlook_directory_filter`
how_to_implement: To successfully implement this search, you must be ingesting data that records the file-system activity from your hosts to populate the Endpoint.Filesystem data model node. This is typically populated via endpoint detection-and-response product, such as Carbon Black, or by other endpoint data sources, such as Sysmon. The data used for this search is typically generated via logs that report file-system reads and writes.
known_false_positives: |-
Administrators and users sometimes prefer backing up their email data by moving the email files into a different folder. These attempts will be detected by the search.
You should confirm that the activity is legitimate and modify the search to add exclusions, as necessary.
references: []
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: A new email file [$file_name$] was written to [$file_path$] on endpoint $dest$ by user $user$.
analytic_story:
- Collection and Staging
asset_type: Endpoint
mitre_attack_id:
- T1114.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count values(Filesystem.file_path) as file_path
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Filesystem WHERE
Filesystem.action IN (
"created",
"modified"
)
Filesystem.file_name IN (
"*.pst",
"*.ost"
)
NOT Filesystem.file_path IN (
"C:\\Users\\*\\My Documents\\Outlook Files\\*",
"C:\\Users\\*\\AppData\\Local\\Microsoft\\Outlook*"
)
BY Filesystem.action Filesystem.dest Filesystem.file_access_time
Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
Filesystem.file_name Filesystem.file_path Filesystem.file_acl
Filesystem.file_size Filesystem.process_guid Filesystem.process_id
Filesystem.user Filesystem.vendor_product
Stage 2: search
| `drop_dm_object_name("Filesystem")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `email_files_written_outside_of_the_outlook_directory_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.action | in |
| field:"event_action" kind:in |
Filesystem.file_name | in |
| field:"file_name" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Filesystem.file_path | in | C:\Users\*\AppData\Local\Microsoft\Outlook*, C:\Users\*\My Documents\Outlook Files\* | excludes:Filesystem.file_path field:"Filesystem.file_path" value:"C:\Users\*\AppData\Local\Microsoft\Outlook*" field:"Filesystem.file_path" value:"C:\Users\*\My Documents\Outlook Files\*" |
Executable File Written to Disk (Windows Event Log)
#Detects when a potentially malicious file is written to the disk
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4656: A handle to an object was requested. |
Rule Body
id: '1040.1061'
title: Executable File Written to Disk
description: 'Detects when a potentially malicious file is written to the disk. -
Threat Actor Association: Alloy Taurus/Gallium, Andariel, APT28 (aka.Fancy Bear,
Fighting Ursa, Forest Blizzard, Pawn Storm, TA422, STRONTIUM), APT29/Nobelium/Cozy
Bear, APT34/OilRig, APT37, APT41, Arid Viper/APT C-23, Babuk, Carbanak, Evilnum,
FIN6, FIN7, FIN8, Gamaredon (aka. Armageddon, UAC-0010), Kimsuky, Lazarus, MalKamak,
Memento Team, Mustang Panda, Night Spider, TA2541, TA,505, TA551, Prophet Spider,
Phosphorus/Magic Hound/APT35, SaintBear (aka UAC-0056, UNC2589, TA471), Scatter
Swine, TA576, Wizard Spider -- Software Association: BadHatch, Bazar, Black Basta,
BlackByte, Clop, Conti, Cring, Emotet, GhostShell, Hancitor, Harvester, IcedID,
Lapsus$, MirrorBlast, PYSA/Mespinoza, QakBot, Ransom Cartel, Remcos, Ryuk, SquirrelWaffle,
TargetCompany, Trickbot, Vidar Stealer, WhisperGate, XingLocker, Yanluowang, Zloader'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR
"<EventID>4656<") (Accesses="*write*" OR Accesses="*add*" OR AccessList="*%%4417*"
OR AccessList="*%%4418*") (TERM("bat") OR TERM("bin") OR TERM("cmd") OR TERM("com")
OR TERM("e_e") OR TERM("ex_") OR TERM("exe") OR TERM("hta") OR TERM("jar") OR TERM("js")
OR TERM("out") OR TERM("plx") OR TERM("ps1") OR TERM("py") OR TERM("pyc") OR TERM("rgs")
OR TERM("script") OR TERM("sct") OR TERM("server") OR TERM("vb") OR TERM("ws") OR
TERM("docm") OR TERM("dotm") OR TERM("xlm") OR TERM("xlsm") OR TERM("xltm") OR TERM("xla")
OR TERM("xlam") OR TERM("xll") OR TERM("otm") OR TERM("pptm") OR TERM("potm") OR
TERM("ppsm") OR TERM("sldm")) | rename Object_Name as file_path | regex file_path="\.(bat|bin|cmd|com|e_e|ex_|exe|hta|jar|js|out|plx|ps1|py|pyc|rgs|script|sct|server|vb|ws|docm|dotm|xlm|xlsm|xltm|xla|xlam|xll|otm|pptm|potm|ppsm|sldm)$"
| table _time, host, user, event_id, file_path, process_name, process_path, signature_id,
tag | bin span=1s | stats values(*) as * by _time, host, file_path '
techniques:
- command-and-control:ingress tool transfer
technique_id:
- T1105
data_category:
- Windows event logs
references:
- https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4656
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR "<EventID>4656<") (Accesses="*write*" OR Accesses="*add*" OR AccessList="*%%4417*" OR AccessList="*%%4418*") (TERM("bat") OR TERM("bin") OR TERM("cmd") OR TERM("com") OR TERM("e_e") OR TERM("ex_") OR TERM("exe") OR TERM("hta") OR TERM("jar") OR TERM("js") OR TERM("out") OR TERM("plx") OR TERM("ps1") OR TERM("py") OR TERM("pyc") OR TERM("rgs") OR TERM("script") OR TERM("sct") OR TERM("server") OR TERM("vb") OR TERM("ws") OR TERM("docm") OR TERM("dotm") OR TERM("xlm") OR TERM("xlsm") OR TERM("xltm") OR TERM("xla") OR TERM("xlam") OR TERM("xll") OR TERM("otm") OR TERM("pptm") OR TERM("potm") OR TERM("ppsm") OR TERM("sldm"))
Stage 2: rename
| rename Object_Name as file_path
Stage 3: regex
| regex
file_path="\.(bat|bin|cmd|com|e_e|ex_|exe|hta|jar|js|out|plx|ps1|py|pyc|rgs|script|sct|server|vb|ws|docm|dotm|xlm|xlsm|xltm|xla|xlam|xll|otm|pptm|potm|ppsm|sldm)$"
Stage 4: table
| table _time, host, user, event_id, file_path, process_name, process_path, signature_id, tag
Stage 5: bucket
| bin span=1s
Stage 6: stats
| stats values(*) as * by _time, host, file_path
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
AccessList | eq |
| field:"AccessList" kind:eq |
Accesses | eq |
| field:"Accesses" kind:eq |
EventCode | eq |
| field:"EventID" kind:eq value:"4656" |
file_path | regex_match |
| field:"TargetFilename" kind:regex_match value:".(bat|bin|cmd|com|e_e|ex_|exe|hta|jar|js|out|plx|ps1|py|pyc|rgs|script|sct|server|vb|ws|docm|dotm|xlm|xlsm|xltm|xla|xlam|xll|otm|pptm|potm|ppsm|sldm)$" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4656<" |
| 1 | "\"bat\"" |
| 1 | "\"bin\"" |
| 1 | "\"cmd\"" |
| 1 | "\"com\"" |
| 1 | "\"e_e\"" |
| 1 | "\"ex_\"" |
| 1 | "\"exe\"" |
| 1 | "\"hta\"" |
| 1 | "\"jar\"" |
| 1 | "\"js\"" |
| 1 | "\"out\"" |
| 1 | "\"plx\"" |
| 1 | "\"ps1\"" |
| 1 | "\"py\"" |
| 1 | "\"pyc\"" |
| 1 | "\"rgs\"" |
| 1 | "\"script\"" |
| 1 | "\"sct\"" |
| 1 | "\"server\"" |
| 1 | "\"vb\"" |
| 1 | "\"ws\"" |
| 1 | "\"docm\"" |
| 1 | "\"dotm\"" |
| 1 | "\"xlm\"" |
| 1 | "\"xlsm\"" |
| 1 | "\"xltm\"" |
| 1 | "\"xla\"" |
| 1 | "\"xlam\"" |
| 1 | "\"xll\"" |
| 1 | "\"otm\"" |
| 1 | "\"pptm\"" |
| 1 | "\"potm\"" |
| 1 | "\"ppsm\"" |
| 1 | "\"sldm\"" |
Impacket atexec.py Temp File Creation (Sysmon)
#Impacket's atexec.py is a tool designed for executing commands on a target system via the Windows Task Scheduler to run arbitrary commands with the privileges of the account under which the scheduler is running, often providing a method for remote command execution which can be used by attackers during post-exploitation activities. This use case detects the file creation events matching characteristics of those created by Impacket atexec.py.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule Body
id: '29738.53741'
title: Impacket atexec.py Temp File Creation
description: Impacket's atexec.py is a tool designed for executing commands on a target
system via the Windows Task Scheduler to run arbitrary commands with the privileges
of the account under which the scheduler is running, often providing a method for
remote command execution which can be used by attackers during post-exploitation
activities. This use case detects the file creation events matching characteristics
of those created by Impacket atexec.py.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=11) OR "<EventID>11<")
("\\Windows\\System32\\Tasks\\" "svchost.exe") OR ("\\Windows\\Temp\\" ".tmp" "cmd.exe")
| regex file_name="^([a-zA-Z]){8}(\.tmp)?$" | table _time, host, user, file_name,
file_path, process_name | bin span=1s | stats values(*) as * by _time, host '
techniques:
- execution:scheduled task/job
- execution:command and scripting interpreter
- execution:scheduled task/job:scheduled task
- persistence:scheduled task/job:scheduled task
- privilege-escalation:scheduled task/job:scheduled task
- execution:command and scripting interpreter:windows command shell
- defense-evasion:obfuscated files or information
technique_id:
- T1053
- T1059
- T1053.005
- T1059.003
- T1027
data_category:
- Windows Sysmon
references:
- https://u0041.co/blog/post/1
- https://github.com/fortra/impacket/blob/master/examples/atexec.py
- https://labs.withsecure.com/content/dam/labs/docs/WithSecure-Lazarus-No-Pineapple-Threat-Intelligence-Report-2023.pdf
- https://thedfirreport.com/2023/10/30/netsupport-intrusion-results-in-domain-compromise/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=11) OR "<EventID>11<") ("\\Windows\\System32\\Tasks\\" "svchost.exe") OR ("\\Windows\\Temp\\" ".tmp" "cmd.exe")
Stage 2: regex
| regex file_name="^([a-zA-Z]){8}(\.tmp)?$"
Stage 3: table
| table _time, host, user, file_name, file_path, process_name
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"11" |
file_name | regex_match |
| field:"file_name" kind:regex_match value:"^([a-zA-Z]){8}(.tmp)?$" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>11<" |
| 1 | "\\Windows\\System32\\Tasks\\" |
| 1 | "svchost.exe" |
| 1 | "\\Windows\\Temp\\" |
| 1 | ".tmp" |
| 1 | "cmd.exe" |
Jscript Execution Using Cscript App
#The following analytic detects the execution of JScript using the cscript.exe process. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and command-line telemetry. This behavior is significant because JScript files are typically executed by wscript.exe, making cscript.exe execution unusual and potentially indicative of malicious activity, such as the FIN7 group's tactics. If confirmed malicious, this activity could allow attackers to execute arbitrary scripts, leading to code execution, data exfiltration, or further system compromise.
Known False Positives
- Symantec Host Integrity check uses Jscript through cscript.exe
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
name: Jscript Execution Using Cscript App
id: 002f1e24-146e-11ec-a470-acde48001122
version: 14
creation_date: '2021-09-14'
modification_date: '2026-08-31'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
The following analytic detects the execution of JScript using the cscript.exe process.
It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and command-line telemetry.
This behavior is significant because JScript files are typically executed by wscript.exe, making cscript.exe execution unusual and potentially indicative of malicious activity, such as the FIN7 group's tactics.
If confirmed malicious, this activity could allow attackers to execute arbitrary scripts, leading to code execution, data exfiltration, or further system compromise.
data_source:
- Sysmon EventID 1
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
(
(
Processes.parent_process_name = "cscript.exe"
Processes.parent_process = "*//e:jscript*"
)
OR
(
Processes.process_name = "cscript.exe"
Processes.process = "*//e:jscript*"
)
)
NOT Processes.process="*/Job:AgentHIScript*"
NOT Processes.parent_process="*/Job:AgentHIScript*"
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `jscript_execution_using_cscript_app_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
Symantec Host Integrity check uses Jscript through cscript.exe
references:
- https://www.mandiant.com/resources/fin7-pursuing-an-enigmatic-and-evasive-global-criminal-operation
- https://attack.mitre.org/groups/G0046/
- https://nasbench.medium.com/symantec-endpoint-protection-meets-com-using-symantec-sshelper-as-a-lolbin-40d515a121ce
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: The process [$parent_process_name$] with commandline [$parent_process$] launched [$process_name$] with commandline [$process$] on [$dest$]
threat_objects:
- field: parent_process
type: process
- field: process
type: process
analytic_story:
- FIN7
- Remcos
asset_type: Endpoint
mitre_attack_id:
- T1059.007
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
(
(
Processes.parent_process_name = "cscript.exe"
Processes.parent_process = "*//e:jscript*"
)
OR
(
Processes.process_name = "cscript.exe"
Processes.process = "*//e:jscript*"
)
)
NOT Processes.process="*/Job:AgentHIScript*"
NOT Processes.parent_process="*/Job:AgentHIScript*"
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `jscript_execution_using_cscript_app_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.parent_process | eq |
| field:"ParentCommandLine" kind:eq value:"*//e:jscript*" |
Processes.parent_process_name | eq |
| field:"parent_process_basename" kind:eq value:"cscript.exe" |
Processes.process | eq |
| field:"CommandLine" kind:eq value:"*//e:jscript*" |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"cscript.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Processes.parent_process | eq | */Job:AgentHIScript* | excludes:Processes.parent_process field:"Processes.parent_process" value:"*/Job:AgentHIScript*" |
Processes.process | eq | */Job:AgentHIScript* | excludes:Processes.process field:"Processes.process" value:"*/Job:AgentHIScript*" |
Microsoft Intune DeviceManagementConfigurationPolicies
#Microsoft Intune device management configuration policies are a tool administrators can use to remotely manage policies and settings on intune managed devices. This functionality can also be abused to disable defences & evade detection. This detection identifies when a new device management configuration policy has been created.
Known False Positives
- Legitimate adminstrative usage of this functionality will trigger this detection.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Privilege Escalation | |
| Defense Impairment | |
| Lateral Movement |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Intune | Create DeviceManagementConfigurationPolicy |
| Intune | Delete DeviceManagementConfigurationPolicy |
Rule Body
name: Microsoft Intune DeviceManagementConfigurationPolicies
id: 3c49e5ed-625c-408c-a2c7-8e2b524efb2c
version: 5
creation_date: '2025-01-06'
modification_date: '2026-05-13'
author: Dean Luxton
status: production
type: Hunting
description: >-
Microsoft Intune device management configuration policies are a tool
administrators can use to remotely manage policies and settings on intune
managed devices. This functionality can also be abused to disable defences &
evade detection. This detection identifies when a new device management
configuration policy has been created.
data_source:
- Azure Monitor Activity
search: >-
`azure_monitor_activity` operationName="*
DeviceManagementConfigurationPolicy*" | rename identity as user,
properties.TargetObjectIds{} as TargetObjectId,
properties.TargetDisplayNames{} as TargetDisplayName,
properties.Actor.IsDelegatedAdmin as user_isDelegatedAdmin | eval
details=mvzip('properties.Targets{}.ModifiedProperties{}.Name','properties.Targets{}.ModifiedProperties{}.New',":
") | rex field="operationName" "^(?P<action>\w+)\s" | replace "Patch" with
"updated", "Create" with "created", "Delete", with "deleted", "assign", with
"assigned" IN action | eval action=if(match(operationName
,"Assignment$"),"assigned",'action') | table _time operationName action user
user_type user_isDelegatedAdmin TargetDisplayName TargetObjectId details
status tenantId correlationId |
`microsoft_intune_devicemanagementconfigurationpolicies_filter`
how_to_implement: >-
The Splunk Add-on for Microsoft Cloud Services add-on is required to ingest
In-Tune audit logs via Azure EventHub. To configure this logging, visit Intune
> Tenant administration > Diagnostic settings > Add diagnostic settings & send
events to the activity audit event hub. Deploy as a risk based alerting rule
for quick deployment or perform baselining & tune accordingly.
known_false_positives: Legitimate adminstrative usage of this functionality will trigger this detection.
references:
- https://posts.specterops.io/death-from-above-lateral-movement-from-azure-to-on-prem-ad-d18cb3959d4d
- https://securityintelligence.com/x-force/detecting-intune-lateral-movement/
- https://posts.specterops.io/maestro-9ed71d38d546
analytic_story:
- Azure Active Directory Account Takeover
asset_type: Azure Tenant
mitre_attack_id:
- T1072
- T1484
- T1021.007
- T1685
- T1686
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: audit
Stages and Predicates
Stage 1: search
`azure_monitor_activity` operationName="* DeviceManagementConfigurationPolicy*"
Stage 2: rename
| rename identity as user, properties.TargetObjectIds{} as TargetObjectId,
properties.TargetDisplayNames{} as TargetDisplayName,
properties.Actor.IsDelegatedAdmin as user_isDelegatedAdmin
Stage 3: eval
| eval
details=mvzip(
'properties.Targets{}.ModifiedProperties{}.Name',
'properties.Targets{}.ModifiedProperties{}.New',
": "
)
Stage 4: rex
| rex field="operationName" "^(?P<action>\w+)\s"
Stage 5: macro (not parsed)
| replace "Patch" with "updated", "Create" with "created", "Delete", with "deleted", "assign", with "assigned" IN action
Stage 6: eval
| eval action=if(match(operationName ,"Assignment$"),"assigned",'action')
action =match(operationName, "Assignment$")"assigned"'action'Stage 7: table
| table _time operationName action user user_type user_isDelegatedAdmin TargetDisplayName
TargetObjectId details status tenantId correlationId
Stage 8: search
| `microsoft_intune_devicemanagementconfigurationpolicies_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
operationName | eq |
| field:"operationName" kind:eq value:"* DeviceManagementConfigurationPolicy*" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"azure:monitor:activity" |
O365 Multiple AppIDs and UserAgents Authentication Spike
#The following analytic identifies unusual authentication activity in an O365 environment, where a single user account experiences more than 8 authentication attempts using 3 or more unique application IDs and over 5 unique user agents within a short timeframe. It leverages O365 audit logs, focusing on authentication events and applying statistical thresholds. This behavior is significant as it may indicate an adversary probing for multi-factor authentication weaknesses. If confirmed malicious, it suggests a compromised account, potentially leading to unauthorized access, privilege escalation, and data exfiltration. Early detection is crucial to prevent further exploitation.
Known False Positives
- Rapid authentication from the same user using more than 5 different user agents and 3 application IDs is highly unlikely under normal circumstances. However, there are potential scenarios that could lead to false positives.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Microsoft 365 | UserLoggedIn |
| Microsoft 365 | UserLoginFailed |
Rules Detecting the Same Action
These rules filter on the same operation.
- High Number of Login Failures from a single source (Splunk)
- M365 Identity Login from Atypical Region (Elastic)
- M365 Identity Login from Impossible Travel Location (Elastic)
- M365 Identity User Account Lockouts (Elastic)
- M365 Identity User Brute Force Attempted (Elastic)
- O365 Concurrent Sessions From Different Ips (Splunk)
- O365 Excessive SSO logon errors (Splunk)
- O365 High Number Of Failed Authentications for User (Splunk)
Rule Body
name: O365 Multiple AppIDs and UserAgents Authentication Spike
id: 66adc486-224d-45c1-8e4d-9e7eeaba988f
version: 11
creation_date: '2023-12-06'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: Anomaly
description: The following analytic identifies unusual authentication activity in an O365 environment, where a single user account experiences more than 8 authentication attempts using 3 or more unique application IDs and over 5 unique user agents within a short timeframe. It leverages O365 audit logs, focusing on authentication events and applying statistical thresholds. This behavior is significant as it may indicate an adversary probing for multi-factor authentication weaknesses. If confirmed malicious, it suggests a compromised account, potentially leading to unauthorized access, privilege escalation, and data exfiltration. Early detection is crucial to prevent further exploitation.
data_source:
- O365 UserLoggedIn
- O365 UserLoginFailed
search: |-
`o365_management_activity` Workload=AzureActiveDirectory (Operation=UserLoggedIn OR Operation=UserLoginFailed)
| bucket span=5m _time
| stats dc(_raw) as failed_attempts dc(ApplicationId) as unique_app_ids dc(UserAgent) as unique_user_agents values(ApplicationId) values(OS) values(signature) as signature
BY _time user src
vendor_account vendor_product dest
| where failed_attempts > 5 and unique_user_agents > 5 and unique_app_ids > 2
| `o365_multiple_appids_and_useragents_authentication_spike_filter`
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: Rapid authentication from the same user using more than 5 different user agents and 3 application IDs is highly unlikely under normal circumstances. However, there are potential scenarios that could lead to false positives.
references:
- https://attack.mitre.org/techniques/T1078/
- https://www.blackhillsinfosec.com/exploiting-mfa-inconsistencies-on-microsoft-services/
- https://github.com/dafthack/MFASweep
- https://www.youtube.com/watch?v=SK1zgqaAZ2E
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: $user$ authenticated in a short period of time with more than 5 different user agents across 3 or more unique application ids.
threat_objects:
- field: src
type: ip_address
analytic_story:
- Office 365 Account Takeover
asset_type: O365 Tenant
mitre_attack_id:
- T1078
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: identity
Stages and Predicates
Stage 1: search
`o365_management_activity` Workload=AzureActiveDirectory (Operation=UserLoggedIn OR Operation=UserLoginFailed)
Stage 2: bucket
| bucket span=5m _time
Stage 3: stats
| stats
dc(_raw) as failed_attempts
dc(ApplicationId) as unique_app_ids
dc(UserAgent) as unique_user_agents
values(ApplicationId)
values(OS)
values(signature) as signature
BY _time user src
vendor_account vendor_product dest
Stage 4: where
| where failed_attempts > 5 and unique_user_agents > 5 and unique_app_ids > 2
Stage 5: search
| `o365_multiple_appids_and_useragents_authentication_spike_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Operation | eq |
| field:"Operation" kind:eq |
Workload | eq |
| field:"Workload" kind:eq value:"AzureActiveDirectory" |
failed_attempts | gt |
| field:"failed_attempts" kind:gt value:"5" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"o365:management:activity" |
unique_app_ids | gt |
| field:"unique_app_ids" kind:gt value:"2" |
unique_user_agents | gt |
| field:"unique_user_agents" kind:gt value:"5" |
PowerShell CreateDecryptor (Sysmon)
#Threat actors may abuse the CreateDecryptor() method within PowerShell scripts to dynamically decrypt embedded payloads, configuration files, or sensitive data at runtime. CreateDecryptor() is part of legitimate .NET cryptographic operations, but its presence in PowerShell ScriptBlock or CommandLine activity — especially outside normal application behavior — often signals malware unpacking, fileless attacks, or ransomware staging. This use case detects references to CreateDecryptor in PowerShell activity, potentially indicating obfuscated payload execution or preparation for in-memory attacks.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '45003.90189'
title: PowerShell CreateDecryptor
description: Threat actors may abuse the CreateDecryptor() method within PowerShell
scripts to dynamically decrypt embedded payloads, configuration files, or sensitive
data at runtime. CreateDecryptor() is part of legitimate .NET cryptographic operations,
but its presence in PowerShell ScriptBlock or CommandLine activity — especially
outside normal application behavior — often signals malware unpacking, fileless
attacks, or ransomware staging. This use case detects references to CreateDecryptor
in PowerShell activity, potentially indicating obfuscated payload execution or preparation
for in-memory attacks.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
(TERM(powershell) OR TERM(pwsh)) "CreateDecryptor" | regex process="(?i)CreateDecryptor"
| table _time, host, user process, process_*, signature_id | bin span=1s | stats
values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:powershell
- defense-evasion:obfuscated files or information
technique_id:
- T1059.001
- T1027
data_category:
- Windows Sysmon
references:
- https://www.cybereason.com/blog/threat-analysis-lummastealer-2.0
- https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.symmetricalgorithm.createdecryptor?view=net-9.0
- https://www.virustotal.com/gui/file/034694376c291c82789e7dc2c8771a4dff47c1c447f2ea7427edb968f480fa71
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (TERM(powershell) OR TERM(pwsh)) "CreateDecryptor"
Stage 2: regex
| regex process="(?i)CreateDecryptor"
Stage 3: table
| table _time, host, user process, process_*, signature_id
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"1" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)CreateDecryptor" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>1<" |
| 1 | powershell |
| 1 | pwsh |
| 1 | "CreateDecryptor" |
PuTTY Secure Copy Client Execution (Windows Event Log)
#pscp.exe is a tool in the PuTTY suite used for secure copy and has been used by threat actors including BlackCat and Agrius to exfiltrate data. This use case detects executions of pscp.exe.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Exfiltration |
References
Telemetry Coverage
Rule Body
id: '24501.45205'
title: PuTTY Secure Copy Client Execution
description: pscp.exe is a tool in the PuTTY suite used for secure copy and has been
used by threat actors including BlackCat and Agrius to exfiltrate data. This use
case detects executions of pscp.exe.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) OR (TERM(EventCode=5156) OR "<EventID>5156<"))
"pscp.exe" | table _time, host, user process, process_*, signature_id, parent_*
| bin span=60s | stats values(*) as * by _time, host '
techniques:
- exfiltration:exfiltration over alternative protocol
technique_id:
- T1048
data_category:
- Windows event logs
references:
- https://unit42.paloaltonetworks.com/agonizing-serpens-targets-israeli-tech-higher-ed-sectors/
- https://www.trendmicro.com/en_us/research/23/f/malvertising-used-as-entry-vector-for-blackcat-actors-also-lever.html
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) OR (TERM(EventCode=5156) OR "<EventID>5156<")) "pscp.exe"
Stage 2: table
| table _time, host, user process, process_*, signature_id, parent_*
Stage 3: bucket
| bin span=60s
Stage 4: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | "<EventID>5156<" |
| 1 | "pscp.exe" |
RDP File Executed from Outlook Temp Directory (Windows Event Log)
#Remote desktop is a common feature in operating systems. It allows a user to log into an interactive session with a system desktop graphical user interface on a remote system. Targeted spear-phishing campaigns attributed to Russia’s APT29 have been observed distributing .rdp files to victims to initiate a remote connection. This use case detects the execution of .rdp files in the temporary directory that Outlook uses when opening attachments.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Lateral Movement |
References
- https://x.com/cyb3rops/status/1851880158640099675?s=46
- https://www.microsoft.com/en-us/security/blog/2024/10/29/midnight-blizzard-conducts-large-scale-spear-phishing-campaign-using-rdp-files/
- https://cert.gov.ua/article/6281076
- https://aws.amazon.com/blogs/security/amazon-identified-internet-domains-abused-by-apt29/
- https://github.com/SigmaHQ/sigma/pull/5063/files
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '39090.70294'
title: RDP File Executed from Outlook Temp Directory
description: Remote desktop is a common feature in operating systems. It allows a
user to log into an interactive session with a system desktop graphical user interface
on a remote system. Targeted spear-phishing campaigns attributed to Russia’s APT29
have been observed distributing .rdp files to victims to initiate a remote connection.
This use case detects the execution of .rdp files in the temporary directory that
Outlook uses when opening attachments.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) ".rdp" ("\\AppData\\Local\\Packages\\Microsoft.Outlook_"
OR ("\\AppData\\Local\\Microsoft\\Windows\\" "\\Content.Outlook\\"))| where match(process,
"(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent\.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft\.Outlook_)).*\.rdp")
| table _time, host, user, process_*, process, parent_*, file_* | bin span=1s |
stats values(*) as * by _time, host '
techniques:
- lateral-movement:remote services:remote desktop protocol
- initial-access:phishing:spearphishing attachment
technique_id:
- T1021.001
- T1566.001
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://x.com/cyb3rops/status/1851880158640099675?s=46
- https://www.microsoft.com/en-us/security/blog/2024/10/29/midnight-blizzard-conducts-large-scale-spear-phishing-campaign-using-rdp-files/
- https://cert.gov.ua/article/6281076
- https://aws.amazon.com/blogs/security/amazon-identified-internet-domains-abused-by-apt29/
- https://github.com/SigmaHQ/sigma/pull/5063/files
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ".rdp" ("\\AppData\\Local\\Packages\\Microsoft.Outlook_" OR ("\\AppData\\Local\\Microsoft\\Windows\\" "\\Content.Outlook\\"))
Stage 2: where
| where
match(
process,
"(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent\.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft\.Outlook_)).*\.rdp"
)
Stage 3: table
| table _time, host, user, process_*, process, parent_*, file_*
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft.Outlook_)).*.rdp" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | ".rdp" |
| 1 | "\\AppData\\Local\\Packages\\Microsoft.Outlook_" |
| 1 | "\\AppData\\Local\\Microsoft\\Windows\\" |
| 1 | "\\Content.Outlook\\" |
Suspicious Child Process for lsass.exe (Windows Event Log)
#This use case detects when the Local Security Authority Subsystem Service (lsass.exe) spawns a child process. This can indicate process injection/hollowing, masquerading, or other suspicious activity. Normal activity for lsass.exe does not typically include spawning child processes, with the exception of EFS (Encrypting File System)
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '19108.32983'
title: Suspicious Child Process for lsass.exe
description: 'This use case detects when the Local Security Authority Subsystem Service
(lsass.exe) spawns a child process. This can indicate process injection/hollowing,
masquerading, or other suspicious activity. Normal activity for lsass.exe does not
typically include spawning child processes, with the exception of EFS (Encrypting
File System). Atomics T1134.002 Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) TERM(lsass) OR "lsass.exe" | regex parent_process_name="(?i)lsass\.exe"
| table _time, host, user process, process_*, parent_process_name, parent_process_*
| bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:masquerading:masquerade task or service
- defense-evasion:process injection
technique_id:
- T1036.004
- T1055
data_category:
- Windows event logs
references:
- https://andreafortuna.org/2017/06/15/standard-windows-processes-a-brief-reference/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) TERM(lsass) OR "lsass.exe"
Stage 2: regex
| regex parent_process_name="(?i)lsass\.exe"
Stage 3: table
| table _time, host, user process, process_*, parent_process_name, parent_process_*
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
parent_process_name | regex_match |
| field:"parent_process_name" kind:regex_match value:"(?i)lsass.exe" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | lsass |
| 1 | "lsass.exe" |
Suspicious Rundll32 no Command Line Arguments
#The following analytic detects the execution of rundll32.exe without any command line arguments. This behavior is identified using Endpoint Detection and Response (EDR) telemetry, focusing on process execution logs. It is significant because rundll32.exe typically requires command line arguments to function properly, and its absence is often associated with malicious activities, such as those performed by Cobalt Strike. If confirmed malicious, this activity could indicate an attempt to execute arbitrary code, potentially leading to credential dumping, unauthorized file writes, or other malicious actions.
Known False Positives
- Although unlikely, some legitimate applications may use a moved copy of rundll32, triggering a false positive.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Suspicious Rundll32 no Command Line Arguments
id: e451bd16-e4c5-4109-8eb1-c4c6ecf048b4
version: 15
creation_date: '2021-02-09'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |-
The following analytic detects the execution of rundll32.exe without any command line arguments.
This behavior is identified using Endpoint Detection and Response (EDR) telemetry, focusing on process execution logs.
It is significant because rundll32.exe typically requires command line arguments to function properly, and its absence is often associated with malicious activities, such as those performed by Cobalt Strike.
If confirmed malicious, this activity could indicate an attempt to execute arbitrary code, potentially leading to credential dumping, unauthorized file writes, or other malicious actions.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
`process_rundll32`
Processes.process IN ("*rundll32","*rundll32.exe", "*rundll32.exe\"")
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `suspicious_rundll32_no_command_line_arguments_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
Although unlikely, some legitimate applications may use a moved copy of rundll32, triggering a false positive.
references:
- https://attack.mitre.org/techniques/T1218/011/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.011/T1218.011.md
- https://lolbas-project.github.io/lolbas/Binaries/Rundll32/
- https://bohops.com/2018/02/26/leveraging-inf-sct-fetch-execute-techniques-for-bypass-evasion-persistence/
finding:
title: Suspicious rundll32.exe process with no command line arguments executed on $dest$ by $user$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: Suspicious rundll32.exe process with no command line arguments executed on $dest$ by $user$
analytic_story:
- Suspicious Rundll32 Activity
- Cobalt Strike
- BlackByte Ransomware
- PrintNightmare CVE-2021-34527
- Graceful Wipe Out Attack
- Hellcat Ransomware
asset_type: Endpoint
cve:
- CVE-2021-34527
mitre_attack_id:
- T1218.011
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
`process_rundll32`
Processes.process IN ("*rundll32","*rundll32.exe", "*rundll32.exe\"")
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `suspicious_rundll32_no_command_line_arguments_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"RUNDLL32.EXE" |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"rundll32.exe" |
Suspicious wevtutil Usage
#The following analytic detects the usage of wevtutil.exe with parameters for clearing event logs such as Application, Security, Setup, Trace, or System. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant because clearing event logs can be an attempt to cover tracks after malicious actions, hindering forensic investigations. If confirmed malicious, this behavior could allow an attacker to erase evidence of their activities, making it difficult to trace their actions and understand the full scope of the compromise.
Known False Positives
- The wevtutil.exe application is a legitimate Windows event log utility. Administrators may use it to manage Windows event logs.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Suspicious wevtutil Usage
id: 2827c0fd-e1be-4868-ae25-59d28e0f9d4f
version: 21
creation_date: '2019-10-16'
modification_date: '2026-08-23'
author: David Dorsey, Michael Haag, Teoderick Contreras, Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: |-
The following analytic detects the usage of wevtutil.exe with parameters for clearing event logs such as Application, Security, Setup, Trace, or System.
It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments.
This activity is significant because clearing event logs can be an attempt to cover tracks after malicious actions, hindering forensic investigations.
If confirmed malicious, this behavior could allow an attacker to erase evidence of their activities, making it difficult to trace their actions and understand the full scope of the compromise.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
(
Processes.process_name="wevtutil.exe"
OR
Processes.original_file_name="wevtutil.exe"
)
Processes.process IN ("* cl *", "*clear-log*")
Processes.process IN (
"*/Trace*",
"*AMSI/Debug*",
"*Application*",
"*CiscoSecureEndpoint*",
"*Microsoft-Windows-BitLocker*",
"*Microsoft-Windows-Bits*",
"*Microsoft-Windows-CAPI2*",
"*Microsoft-Windows-Kernel-File*",
"*Microsoft-Windows-Kernel-Process*",
"*Microsoft-Windows-LDAP*",
"*Microsoft-Windows-PowerShell*",
"*Microsoft-Windows-Sysmon*",
"*Microsoft-Windows-TerminalServices-LocalSessionManager*",
"*Microsoft-Windows-TerminalServices-RemoteConnectionManager*",
"*Microsoft-Windows-WMI-Activity*",
"*OpenSSH/*",
"*PowerShellCore/*",
"*Security*",
"*Setup*",
"*System*",
"*Windows Firewall With Advanced Security*",
"*Windows PowerShell*"
)
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `suspicious_wevtutil_usage_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: The wevtutil.exe application is a legitimate Windows event log utility. Administrators may use it to manage Windows event logs.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1070.001/T1070.001.md
finding:
title: Wevtutil.exe being used to clear Event Logs on $dest$ by $user$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: Wevtutil.exe being used to clear Event Logs on $dest$ by $user$
analytic_story:
- Windows Log Manipulation
- Ransomware
- Rhysida Ransomware
- Clop Ransomware
- CISA AA23-347A
- ShrinkLocker
- Storm-2460 CLFS Zero Day Exploitation
- Scattered Spider
- Storm-0501 Ransomware
- VoidLink Cloud-Native Linux Malware
asset_type: Endpoint
mitre_attack_id:
- T1685.005
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
(
Processes.process_name="wevtutil.exe"
OR
Processes.original_file_name="wevtutil.exe"
)
Processes.process IN ("* cl *", "*clear-log*")
Processes.process IN (
"*/Trace*",
"*AMSI/Debug*",
"*Application*",
"*CiscoSecureEndpoint*",
"*Microsoft-Windows-BitLocker*",
"*Microsoft-Windows-Bits*",
"*Microsoft-Windows-CAPI2*",
"*Microsoft-Windows-Kernel-File*",
"*Microsoft-Windows-Kernel-Process*",
"*Microsoft-Windows-LDAP*",
"*Microsoft-Windows-PowerShell*",
"*Microsoft-Windows-Sysmon*",
"*Microsoft-Windows-TerminalServices-LocalSessionManager*",
"*Microsoft-Windows-TerminalServices-RemoteConnectionManager*",
"*Microsoft-Windows-WMI-Activity*",
"*OpenSSH/*",
"*PowerShellCore/*",
"*Security*",
"*Setup*",
"*System*",
"*Windows Firewall With Advanced Security*",
"*Windows PowerShell*"
)
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `suspicious_wevtutil_usage_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"wevtutil.exe" |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"wevtutil.exe" |
Windows Firewall Disabled (Windows Event Log)
#Adversaries may disable or windows firewalls in order to bypass controls enable adversary C2 communications, lateral movement, and/or data exfiltration that would otherwise not be allowed
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '5995.6369'
title: Windows Firewall Disabled
description: 'Adversaries may disable or windows firewalls in order to bypass controls
enable adversary C2 communications, lateral movement, and/or data exfiltration that
would otherwise not be allowed. -- Threat Actor Association: APT41, Muddled Libra
- Software Association: Agent Tesla, BlackByte, Conti, Insekt, Lockbit, PurpleFox,
Prometheus / Spook, Ransom Cartel, Trickbot Atomics T1562.004 Test#1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` TERM(EventCode=4688) (TERM(netsh)
(TERM(firewall) OR TERM(advfirewall)) TERM(set) (("mode=disable") OR (TERM(state)
TERM(off)))) OR (TERM(NetFirewallProfile) TERM(-Enabled) TERM(false)) OR ((TERM(sc)
OR TERM(net) OR TERM(net1) OR "sc.exe" OR "net.exe" OR TERM(Stop-Service)) TERM(windows)
TERM(firewall)) OR ((TERM(REG) OR "reg.exe") TERM(ADD) TERM(FirewallPolicy) TERM(EnableFirewall)
TERM(0)) | table _time, host, user process, process_*, parent_*, signature_id |
bin span=1s | stats values(*) as * by _time, host | where match(process_name, "(?i)cmd|powershell|netsh|net1?|sc.exe|reg.exe") '
techniques:
- defense-evasion:impair defenses:disable or modify system firewall
technique_id:
- T1562.004
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://us-cert.cisa.gov/sites/default/files/publications/MAR-10135536-G.PDF
- https://blogs.cisco.com/security/talos/opening-zxshell
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` TERM(EventCode=4688) (TERM(netsh) (TERM(firewall) OR TERM(advfirewall)) TERM(set) (("mode=disable") OR (TERM(state) TERM(off)))) OR (TERM(NetFirewallProfile) TERM(-Enabled) TERM(false)) OR ((TERM(sc) OR TERM(net) OR TERM(net1) OR "sc.exe" OR "net.exe" OR TERM(Stop-Service)) TERM(windows) TERM(firewall)) OR ((TERM(REG) OR "reg.exe") TERM(ADD) TERM(FirewallPolicy) TERM(EnableFirewall) TERM(0))
Stage 2: table
| table _time, host, user process, process_*, parent_*, signature_id
Stage 3: bucket
| bin span=1s
Stage 4: stats
| stats values(*) as * by _time, host
Stage 5: where
| where match(process_name, "(?i)cmd|powershell|netsh|net1?|sc.exe|reg.exe")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
process_name | regex_match |
| field:"process_name" kind:regex_match |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | netsh |
| 1 | firewall |
| 1 | advfirewall |
| 1 | set |
| 1 | "mode=disable" |
| 1 | state |
| 1 | off |
| 1 | NetFirewallProfile |
| 1 | "-Enabled" |
| 1 | false |
| 1 | sc |
| 1 | net |
| 1 | net1 |
| 1 | "sc.exe" |
| 1 | "net.exe" |
| 1 | "Stop-Service" |
| 1 | windows |
| 1 | firewall |
| 1 | REG |
| 1 | "reg.exe" |
| 1 | ADD |
| 1 | FirewallPolicy |
| 1 | EnableFirewall |
| 1 | 0 |
Windows NorthStar C2 Agent Execution
#Detects the initial agent or persistent agent processes for Northstar C2 being run. NorthStarC2 is an open-source command and control framework developed for penetration testing and red teaming purposes by Engin Demirbilek. NorthStar C2 Framework consists of two applications, a server-side GUI web application for managing sessions and a client-side stager to communicate with C2 server.
Known False Positives
- Some legitimate red team or penetration testing activities may use Northstar C2 agents. Filter alerts when these tools are approved for authorized testing.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Resource Development | |
| Execution | |
| Persistence | |
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows NorthStar C2 Agent Execution
id: 5f13d5b2-5181-487b-89eb-e2b471522202
version: 2
creation_date: '2021-06-23'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
Detects the initial agent or persistent agent processes for Northstar C2 being run.
NorthStarC2 is an open-source command and control framework developed for penetration testing and red teaming purposes by Engin Demirbilek.
NorthStar C2 Framework consists of two applications, a server-side GUI web application for managing sessions and a client-side stager to communicate with C2 server.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.original_file_name="NorthstarStager.exe"
OR
Processes.process_name IN (
"NorthstarStager.exe",
"SystemHealthCheck.exe"
)
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_northstar_c2_agent_execution_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Some legitimate red team or penetration testing activities may use Northstar C2 agents. Filter alerts when these tools are approved for authorized testing.
references:
- https://github.com/EnginDemirbilek/NorthStarC2/
finding:
title: NorthStar C2 agent execution observed on $dest$ via $process$.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: parent_process_name
type: parent_process_name
analytic_story:
- Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
- T1204.002
- T1547.001
- T1608
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.original_file_name="NorthstarStager.exe"
OR
Processes.process_name IN (
"NorthstarStager.exe",
"SystemHealthCheck.exe"
)
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_northstar_c2_agent_execution_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"NorthstarStager.exe" |
Processes.process_name | in |
| field:"process_basename" kind:in |
Windows PowerView AD Access Control List Enumeration
#The following analytic detects the execution of PowerView PowerShell cmdlets Get-ObjectAcl or Get-DomainObjectAcl, which are used to enumerate Access Control List (ACL) permissions for Active Directory objects. It leverages Event ID 4104 from PowerShell Script Block Logging to identify this activity. This behavior is significant as it may indicate an attempt to discover weak permissions in Active Directory, potentially leading to privilege escalation. If confirmed malicious, attackers could exploit these permissions to gain unauthorized access or escalate their privileges within the network.
Known False Positives
- Administrators may leverage PowerView for legitimate purposes, filter as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth | |
| Discovery |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
name: Windows PowerView AD Access Control List Enumeration
id: 39405650-c364-4e1e-a740-32a63ef042a6
version: 12
creation_date: '2023-04-21'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the execution of PowerView PowerShell cmdlets `Get-ObjectAcl` or `Get-DomainObjectAcl`, which are used to enumerate Access Control List (ACL) permissions for Active Directory objects. It leverages Event ID 4104 from PowerShell Script Block Logging to identify this activity. This behavior is significant as it may indicate an attempt to discover weak permissions in Active Directory, potentially leading to privilege escalation. If confirmed malicious, attackers could exploit these permissions to gain unauthorized access or escalate their privileges within the network.
data_source:
- Powershell Script Block Logging 4104
search: |-
`powershell` EventCode=4104 (ScriptBlockText=*get-objectacl* OR ScriptBlockText=*Get-DomainObjectAcl*)
| fillnull
| stats count min(_time) as firstTime max(_time) as lastTime
BY dest signature signature_id
user_id vendor_product EventID
Guid Opcode Name
Path ProcessID ScriptBlockId
ScriptBlockText
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_powerview_ad_access_control_list_enumeration_filter`
how_to_implement: To successfully implement this analytic, you will need to enable PowerShell Script Block Logging on some or all endpoints. Additional setup here https://help.splunk.com/en/security-offerings/splunk-user-behavior-analytics/get-data-in/5.4.1/add-other-data-to-splunk-uba/configure-powershell-logging-to-see-powershell-anomalies-in-splunk-uba.=
known_false_positives: Administrators may leverage PowerView for legitimate purposes, filter as needed.
references:
- https://attack.mitre.org/techniques/T1078/002/
- https://medium.com/r3d-buck3t/enumerating-access-controls-in-active-directory-c06e2efa8b89
- https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
- https://powersploit.readthedocs.io/en/latest/Recon/Get-DomainObjectAcl/
finding:
title: PowerView AD acccess control list enumeration detected on $dest$
entity:
field: dest
type: system
score: 50
analytic_story:
- Active Directory Discovery
- Active Directory Privilege Escalation
- Rhysida Ransomware
asset_type: Endpoint
mitre_attack_id:
- T1078.002
- T1069
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`powershell` EventCode=4104 (
ScriptBlockText=*get-objectacl*
OR ScriptBlockText=*Get-DomainObjectAcl*
)
Stage 2: fillnull
| fillnull
Stage 3: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY dest signature signature_id
user_id vendor_product EventID
Guid Opcode Name
Path ProcessID ScriptBlockId
ScriptBlockText
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `windows_powerview_ad_access_control_list_enumeration_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
ScriptBlockText | eq |
| field:"ScriptBlockText" kind:eq |
Windows Remote Access Software BRC4 Loaded Dll
#The following analytic identifies the loading of four specific Windows DLLs (credui.dll, dbghelp.dll, samcli.dll, winhttp.dll) by a non-standard process. This detection leverages Sysmon EventCode 7 to monitor DLL load events and flags when all four DLLs are loaded within a short time frame. This activity is significant as it may indicate the presence of Brute Ratel C4, a sophisticated remote access tool used for credential dumping and other malicious activities. If confirmed malicious, this behavior could lead to unauthorized access, credential theft, and further compromise of the affected system.
Known False Positives
- This module can be loaded by a third party application. Filter is needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access | |
| Command & Control |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 7: Image loaded |
Rule Body
name: Windows Remote Access Software BRC4 Loaded Dll
id: 73cf5dcb-cf36-4167-8bbe-384fe5384d05
version: 10
creation_date: '2022-08-30'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic identifies the loading of four specific Windows DLLs (credui.dll, dbghelp.dll, samcli.dll, winhttp.dll) by a non-standard process. This detection leverages Sysmon EventCode 7 to monitor DLL load events and flags when all four DLLs are loaded within a short time frame. This activity is significant as it may indicate the presence of Brute Ratel C4, a sophisticated remote access tool used for credential dumping and other malicious activities. If confirmed malicious, this behavior could lead to unauthorized access, credential theft, and further compromise of the affected system.
data_source:
- Sysmon EventID 7
search: |-
`sysmon` EventCode=7
| bin _time span=30s
| eval BRC4_AnomalyLoadedDll=case(OriginalFileName=="credui.dll", 1, OriginalFileName=="DBGHELP.DLL", 1, OriginalFileName=="SAMCLI.DLL", 1, OriginalFileName=="winhttp.dll", 1, 1=1, 0)
| eval BRC4_LoadedDllPath=case(match(ImageLoaded, "credui.dll"), 1, match(ImageLoaded, "dbghelp.dll"), 1, match(ImageLoaded, "samcli.dll"), 1, match(ImageLoaded, "winhttp.dll"), 1, 1=1, 0)
| stats count min(_time) as firstTime max(_time) as lastTime values(ImageLoaded) as ImageLoaded values(OriginalFileName) as OriginalFileName dc(ImageLoaded) as ImageLoadedCount values(loaded_file) as loaded_file values(loaded_file_path) as loaded_file_path values(original_file_name) as original_file_name values(process_exec) as process_exec values(process_guid) as process_guid values(process_hash) as process_hash values(process_id) as process_id values(process_name) as process_name values(process_path) as process_path values(service_dll_signature_exists) as service_dll_signature_exists values(service_dll_signature_verified) as service_dll_signature_verified values(signature) as signature values(signature_id) as signature_id values(user_id) as user_id values(vendor_product) as vendor_product
BY Image BRC4_LoadedDllPath BRC4_AnomalyLoadedDll
dest Signed
| where ImageLoadedCount == 4 AND (BRC4_LoadedDllPath == 1 OR BRC4_AnomalyLoadedDll == 1)
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_remote_access_software_brc4_loaded_dll_filter`
how_to_implement: The latest Sysmon TA 3.0 https://splunkbase.splunk.com/app/5709 will add the ImageLoaded name to the process_name field, allowing this query to work. Use as an example and implement for other products.
known_false_positives: This module can be loaded by a third party application. Filter is needed.
references:
- https://unit42.paloaltonetworks.com/brute-ratel-c4-tool/
- https://www.mdsec.co.uk/2022/08/part-3-how-i-met-your-beacon-brute-ratel/
- https://strontic.github.io/xcyclopedia/library/logoncli.dll-138871DBE68D0696D3D7FA91BC2873B1.html
- https://strontic.github.io/xcyclopedia/library/credui.dll-A5BD797BBC2DD55231B9DE99837E5461.html
- https://docs.microsoft.com/en-us/windows/win32/secauthn/credential-manager
- https://strontic.github.io/xcyclopedia/library/samcli.dll-522D6D616EF142CDE965BD3A450A9E4C.html
- https://strontic.github.io/xcyclopedia/library/dbghelp.dll-15A55EAB307EF8C190FE6135C0A86F7C.html
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: a process $Image$ loaded several modules $ImageLoaded$ that might related to credential access on $dest$.
analytic_story:
- Brute Ratel C4
asset_type: Endpoint
mitre_attack_id:
- T1219
- T1003
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon` EventCode=7
Stage 2: bucket
| bin _time span=30s
Stage 3: eval
| eval
BRC4_AnomalyLoadedDll=case(
OriginalFileName=="credui.dll", 1,
OriginalFileName=="DBGHELP.DLL", 1,
OriginalFileName=="SAMCLI.DLL", 1,
OriginalFileName=="winhttp.dll", 1,
1=1, 0
)
BRC4_AnomalyLoadedDll =OriginalFileName="credui.dll"1OriginalFileName="DBGHELP.DLL"1OriginalFileName="SAMCLI.DLL"1OriginalFileName="winhttp.dll"10Stage 4: eval
| eval
BRC4_LoadedDllPath=case(
match(ImageLoaded, "credui.dll"), 1,
match(ImageLoaded, "dbghelp.dll"), 1,
match(ImageLoaded, "samcli.dll"), 1,
match(ImageLoaded, "winhttp.dll"), 1,
1=1, 0
)
BRC4_LoadedDllPath =match(ImageLoaded, "credui.dll")1match(ImageLoaded, "dbghelp.dll")1match(ImageLoaded, "samcli.dll")1match(ImageLoaded, "winhttp.dll")10Stage 5: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
values(ImageLoaded) as ImageLoaded
values(OriginalFileName) as OriginalFileName
dc(ImageLoaded) as ImageLoadedCount
values(loaded_file) as loaded_file
values(loaded_file_path) as loaded_file_path
values(original_file_name) as original_file_name
values(process_exec) as process_exec
values(process_guid) as process_guid
values(process_hash) as process_hash
values(process_id) as process_id
values(process_name) as process_name
values(process_path) as process_path
values(service_dll_signature_exists) as service_dll_signature_exists
values(service_dll_signature_verified) as service_dll_signature_verified
values(signature) as signature
values(signature_id) as signature_id
values(user_id) as user_id
values(vendor_product) as vendor_product
BY Image BRC4_LoadedDllPath BRC4_AnomalyLoadedDll
dest Signed
Stage 6: where
| where ImageLoadedCount == 4 AND (BRC4_LoadedDllPath == 1 OR BRC4_AnomalyLoadedDll == 1)
Stage 7: search
| `security_content_ctime(firstTime)`
Stage 8: search
| `security_content_ctime(lastTime)`
Stage 9: search
| `windows_remote_access_software_brc4_loaded_dll_filter`
Indicators
These rows show field, operator, and value matches.
Windows Unsecured Outlook Credentials Access In Registry
#The following analytic detects unauthorized access to Outlook credentials stored in the Windows registry. It leverages Windows Security Event logs, specifically EventCode 4663, to identify access attempts to registry paths associated with Outlook profiles. This activity is significant as it may indicate attempts to steal sensitive email credentials, which could lead to unauthorized access to email accounts. If confirmed malicious, this could allow attackers to exfiltrate sensitive information, impersonate users, or execute further unauthorized actions within Outlook, posing a significant security risk.
Known False Positives
- third party software may access this outlook registry.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4663: An attempt was made to access an object. |
Rule Body
name: Windows Unsecured Outlook Credentials Access In Registry
id: 36334123-077d-47a2-b70c-6c7b3cc85049
version: 14
creation_date: '2024-02-22'
modification_date: '2026-06-25'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects unauthorized access to Outlook credentials stored in the Windows registry. It leverages Windows Security Event logs, specifically EventCode 4663, to identify access attempts to registry paths associated with Outlook profiles. This activity is significant as it may indicate attempts to steal sensitive email credentials, which could lead to unauthorized access to email accounts. If confirmed malicious, this could allow attackers to exfiltrate sensitive information, impersonate users, or execute further unauthorized actions within Outlook, posing a significant security risk.
data_source:
- Windows Event Log Security 4663
search: '`wineventlog_security` EventCode=4663 object_file_path IN ("*\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676*", "*\\Windows Messaging Subsystem\\Profiles\\9375CFF0413111d3B88A00104B2A6676*") AND process_name != *\\outlook.exe | stats count min(_time) as firstTime max(_time) as lastTime by object_file_name object_file_path process_name process_path process_id EventCode dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_unsecured_outlook_credentials_access_in_registry_filter`'
how_to_implement: To successfully implement this search, you must ingest Windows Security Event logs and track event code 4663. For 4663, enable "Audit Object Access" in Group Policy. Then check the two boxes listed for both "Success" and "Failure."
known_false_positives: third party software may access this outlook registry.
references:
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/choice
- https://malpedia.caad.fkie.fraunhofer.de/details/win.404keylogger
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: A suspicious process $process_name$ accessing outlook credentials registry on $dest$
analytic_story:
- StealC Stealer
- Snake Keylogger
- Meduza Stealer
- 0bj3ctivity Stealer
- Lokibot
- VIP Keylogger
- Phantom Stealer
asset_type: Endpoint
mitre_attack_id:
- T1552
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`wineventlog_security` EventCode=4663 object_file_path IN (
"*\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676*",
"*\\Windows Messaging Subsystem\\Profiles\\9375CFF0413111d3B88A00104B2A6676*"
) AND process_name != *\\outlook.exe
Stage 2: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
by object_file_name object_file_path process_name process_path process_id EventCode dest
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_unsecured_outlook_credentials_access_in_registry_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4663" |
object_file_path | in |
| field:"TargetFilename" kind:in |
process_name | ne |
| field:"process_name" kind:ne value:"*\\outlook.exe" |