Detection rules › Splunk

Windows Credential Access From Browser Password Store

Status
production
Severity
low
Group by
_time, dest, isAllowed, object_file_name, process_id, process_name, signature_id, target_filename
Author
Teoderick Contreras, Bhavin Patel Splunk
Source
github.com/splunk/security_content

The following analytic identifies a possible non-common browser process accessing its browser user data profile. This tactic/technique has been observed in various Trojan Stealers, such as SnakeKeylogger, which attempt to gather sensitive browser information and credentials as part of their exfiltration strategy. Detecting this anomaly can serve as a valuable pivot for identifying processes that access lists of browser user data profiles unexpectedly. This detection uses a lookup file browser_app_list that maintains a list of well known browser applications and the browser paths that are allowed to access the browser user data profiles.

Known false positives

  • The lookup file `browser_app_list` may not contain all the browser applications that are allowed to access the browser user data profiles. Consider updating the lookup files to add allowed object paths for the browser applications that are not included in the lookup file.

MITRE ATT&CK coverage

TacticTechniques
Discovery

Telemetry coverage

Rule body

name: Windows Credential Access From Browser Password Store
id: 72013a8e-5cea-408a-9d51-5585386b4d69
version: 23
creation_date: '2024-03-20'
modification_date: '2026-06-25'
author: Teoderick Contreras, Bhavin Patel Splunk
status: production
type: Anomaly
description: The following analytic identifies a possible non-common browser process accessing its browser user data profile. This tactic/technique has been observed in various Trojan Stealers, such as SnakeKeylogger, which attempt to gather sensitive browser information and credentials as part of their exfiltration strategy. Detecting this anomaly can serve as a valuable pivot for identifying processes that access lists of browser user data profiles unexpectedly. This detection uses a lookup file `browser_app_list` that maintains a list of well known browser applications and the browser paths that are allowed to access the browser user data profiles.
data_source:
    - Windows Event Log Security 4663
search: '`wineventlog_security` EventCode=4663 | stats count by _time object_file_path object_file_name dest process_name process_path process_id EventCode | lookup browser_app_list browser_object_path as object_file_path OUTPUT browser_process_name isAllowed | stats count min(_time) as firstTime max(_time) as lastTime values(object_file_name) values(object_file_path)  values(browser_process_name) as browser_process_name by dest process_name process_path process_id EventCode isAllowed | rex field=process_name "(?<extracted_process_name>[^\\\\]+)$" | eval isMalicious=if(match(browser_process_name, extracted_process_name), "0", "1") | where isMalicious=1 and isAllowed="false" | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_credential_access_from_browser_password_store_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." This search may trigger on a browser application that is not included in the browser_app_list lookup file.
known_false_positives: The lookup file `browser_app_list` may not contain all the browser applications that are allowed to access the browser user data profiles. Consider updating the lookup files to add allowed object paths for the browser applications that are not included in the lookup file.
references:
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.404keylogger
    - https://www.checkpoint.com/cyber-hub/threat-prevention/what-is-malware/snake-keylogger-malware/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A non-common browser process $process_name$ accessing browser user data folder on $dest$
analytic_story:
    - StealC Stealer
    - Salt Typhoon
    - Earth Alux
    - Quasar RAT
    - PXA Stealer
    - SnappyBee
    - Malicious Inno Setup Loader
    - Braodo Stealer
    - MoonPeak
    - Snake Keylogger
    - China-Nexus Threat Activity
    - Meduza Stealer
    - Scattered Spider
    - 0bj3ctivity Stealer
    - Scattered Lapsus$ Hunters
    - BlankGrabber Stealer
    - VIP Keylogger
    - Salat Stealer
    - Phantom Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1012
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4663

Stage 2: stats

| stats count by _time object_file_path object_file_name dest process_name process_path process_id EventCode

Stage 3: lookup

| lookup browser_app_list browser_object_path as object_file_path OUTPUT browser_process_name isAllowed
Lookup table
browser_app_list
Key field
browser_object_path as object_file_path
Output columns
['browser_process_name', 'browser_process_name'], ['isAllowed', 'isAllowed']

Stage 4: stats

| stats count min(_time) as firstTime max(_time) as lastTime values(object_file_name) values(object_file_path)  values(browser_process_name) as browser_process_name by dest process_name process_path process_id EventCode isAllowed

Stage 5: rex

| rex field=process_name "(?<extracted_process_name>[^\\\\]+)$"

Stage 6: eval

| eval isMalicious=if(match(browser_process_name, extracted_process_name), "0", "1")
isMalicious =
ifmatch(browser_process_name, extracted_process_name)"0"
else"1"

Stage 7: where

| where isMalicious=1 and isAllowed="false"

Stage 8: search

| `security_content_ctime(firstTime)`

Stage 9: search

| `security_content_ctime(lastTime)`

Stage 10: search

| `windows_credential_access_from_browser_password_store_filter`

Indicators

These rows show field, operator, and value matches.