Modify Authentication Process: Domain Controller Authentication

Adversaries may patch the authentication process on a domain controller to bypass the typical authentication mechanisms and enable access to accounts.

Malware may be used to inject false credentials into the authentication process on a domain controller with the intent of creating a backdoor used to access any user’s account and/or credentials (ex: Skeleton Key). Skeleton key works through a patch on an enterprise domain controller authentication process (LSASS) with credentials that adversaries may use to bypass the standard authentication system. Once patched, an adversary can use the injected password to successfully authenticate as any domain user account (until the the skeleton key is erased from memory by a reboot of the domain controller). Authenticated access may enable unfettered access to hosts and/or resources within single-factor authentication environments.[1]

ID: T1556.001
Sub-technique of:  T1556
Platforms: Windows
Version: 2.1
Created: 11 February 2020
Last Modified: 21 August 2024

Procedure Examples

ID Name Description
G0114 Chimera

Chimera's malware has altered the NTLM authentication program on domain controllers to allow Chimera to login without a valid credential.[2]

S0007 Skeleton Key

Skeleton Key is used to patch an enterprise domain controller authentication process with a backdoor password. It allows adversaries to bypass the standard authentication system to use a defined password for all accounts authenticating to that domain controller.[1]

Mitigations

ID Mitigation Description
M1032 Multi-factor Authentication

Integrating multi-factor authentication (MFA) as part of organizational policy can greatly reduce the risk of an adversary gaining control of valid credentials that may be used for additional tactics such as initial access, lateral movement, and collecting information. MFA can also be used to restrict access to cloud resources and APIs.

M1026 Privileged Account Management

Audit domain and local accounts as well as their permission levels routinely to look for situations that could allow an adversary to gain wide access by obtaining credentials of a privileged account. [3] [4] These audits should also include if default accounts have been enabled, or if new local accounts are created that have not be authorized. Follow best practices for design and administration of an enterprise network to limit privileged account use across administrative tiers. [5]

M1025 Privileged Process Integrity

Enabled features, such as Protected Process Light (PPL), for LSA.[6]

M1017 User Training

Train users to recognize and handle suspicious email attachments. Emphasize the importance of caution when opening attachments from unknown or unexpected sources, even if they appear legitimate. Implement email warning banners to alert users about emails originating from outside the organization or containing attachments, reinforcing awareness and helping users identify potential spearphishing attempts.

Detection

ID Data Source Data Component Detects
DS0022 File File Modification

Monitor for changes to functions exported from authentication-related system DLLs (such as cryptdll.dll and samsrv.dll).[1]

Analytic 1 - Unauthorized changes to authentication-related DLLs.

index=windows sourcetype=WinEventLog:Security ( (EventCode=4663 AND Object_Type="File" AND Object_Name IN ("C:\Windows\System32\lsass.exe", "C:\Windows\System32\samlib.dll", "C:\Windows\System32\cryptdll.dll", "C:\Windows\System32\samsrv.dll")) OR (EventCode=4662 AND Object_Type="File" AND Object_Name IN ("C:\Windows\System32\lsass.exe", "C:\Windows\System32\samlib.dll", "C:\Windows\System32\cryptdll.dll", "C:\Windows\System32\samsrv.dll")) OR (EventCode=4670 AND Object_Name IN ("C:\Windows\System32\lsass.exe", "C:\Windows\System32\samlib.dll", "C:\Windows\System32\cryptdll.dll", "C:\Windows\System32\samsrv.dll")))

DS0028 Logon Session Logon Session Creation

Monitor for newly constructed logon behavior across systems that share accounts, either user, admin, or service accounts. Examples: one account logged into multiple systems simultaneously; multiple accounts logged into the same machine simultaneously; accounts logged in at odd times (ex: when the user is not present) or outside of business hours. Activity may be from interactive login sessions or process ownership from accounts being used to execute binaries on a remote system as a particular account. Correlate other security systems with login information (e.g., a user has an active login session but has not entered the building or does not have VPN access). Configure robust, consistent account activity audit policies across the enterprise and with externally accessible services.[7]

Analytic 1 - Unusual logon patterns and times.

index=windows sourcetype="WinEventLog:Security" ( (EventCode=4624 OR EventCode=4768) AND Logon_Type=3 AND NOT [search index=windows sourcetype="WinEventLog:Security" EventCode=4768 | stats count by Account_Name | where count < 10 | fields Account_Name])

DS0009 Process OS API Execution

Monitor for API calls to OpenProcess that can be used to manipulate lsass.exe running on a domain controller

Process Access

Monitor for unexpected processes interacting with the authentication process on a domain controller to bypass the typical authentication mechanisms and enable access to accounts.

Analytic 1 - Unauthorized process interactions with domain controller authentication processes.

index=windows_logs (sourcetype="WinEventLog:Security" OR sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational")| search (EventCode=4688 AND New_Process_Name="\lsass.exe") OR (EventCode=10 AND TargetImage="\lsass.exe")| eval suspicious_process=case( match(New_Process_Name, "regex_for_unusual_process_paths"), "High", match(New_Process_Name, ".\system32\."), "Medium", true(), "Low" )| stats count by Host, User, New_Process_Name, CommandLine, suspicious_process| where suspicious_process="High"| lookup domain_admins user as User OUTPUT admin_status| where isnotnull(admin_status)| join type=left Host [ search index=windows_logs sourcetype="WinEventLog:Security" EventCode=4624 | eval login_time=strftime(_time, "%Y-%m-%d %H:%M:%S") | fields Host, login_time, Logon_Type, User ]| eval login_behavior=if(Logon_Type="10" AND admin_status="true", "External_Admin_Login", "Normal_Login")| table _time, Host, User, New_Process_Name, CommandLine, suspicious_process, login_behavior, login_time| sort - _time

References