Module 10 — LSASS, Identity, and Authentication
Module 10 — LSASS, Identity, and Authentication
lsass.exe is the authentication broker for Windows. Security engineers must understand what loads inside it, how Credential Guard changes the threat model, and which Security log Event IDs prove logon abuse.
Path: Evidence & EVTX · Related: LSASS vault note
0. Purpose
Identity attacks target LSASS, tickets, and tokens. Defenders instrument logons (4624/4625/4648/4672), harden LSA, and know when Credential Guard is actually on.
1. ELI5
When you log in, Windows does not check your password inside Notepad. It sends the proof to lsass.exe — the ID desk of the building.
The desk hires specialists ( security packages ) who speak NTLM, Kerberos, and cloud login. Credential Guard is like moving the master key drawer into a vault room the desk cannot open — dumps of the desk become less useful.
2. What runs inside lsass.exe
flowchart TB
subgraph lsass [lsass.exe — LSA host]
CORE[LSA core
sessions, policy]
MSV[MSV1_0 — NTLM]
KERB[Kerberos package]
NEGO[NegoExt — negotiation]
CLOUD[CloudAP — Azure AD path]
end
WINLOGON[winlogon.exe] --> lsass
APPS[Services / processes] -->|auth requests| lsass
lsass --> DC[Domain Controller / KDC]| Component | Type | Role |
|---|---|---|
| LSA core | Built-in | Session table, package loader, policy |
| MSV1_0 | SSP | NTLM challenges, local/domain validation |
| Kerberos | SSP | Tickets, PAC, KDC comms |
| NegoExt | SSP | Picks NTLM vs Kerberos |
| CloudAP | SSP | Modern AAD / WAM sign-in (Win11) |
| Authentication Packages | AP | Interactive logon UI collection |
Registry anchors:
| Key | Content |
|---|---|
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages |
SSP DLL list |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages |
AP DLL list |
Malicious Security Package registration = code inside LSASS. Monitor registry + Sysmon ImageLoad into lsass.exe (when Sysmon deployed).
3. Credential Guard (lab .114 posture)
From baseline audit:
| Field | Value |
|---|---|
SecurityServicesRunning |
{0} — Credential Guard not running |
VirtualizationBasedSecurityStatus |
0 |
CodeIntegrityPolicyEnforcementStatus |
2 |
When CG is enabled (Enterprise + hardware):
| Secret | Without CG | With CG |
|---|---|---|
| NTLM hashes in LSASS | Present in memory | Isolated in LSAISO |
| Kerberos long-term keys | In LSASS | Isolated |
| LSASS dump value | High for cred theft | Reduced for hash extraction |
CG does not stop: pass-the-ticket, token theft from other processes, interactive phishing logons.
Verify anytime:
Get-CimInstance Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
Select-Object SecurityServicesRunning, VirtualizationBasedSecurityStatus
4. Event IDs that matter (Security log)
| ID | Name | Defensive use |
|---|---|---|
| 4624 | Successful logon | Baseline LogonType, source IP, package name |
| 4625 | Failed logon | Spray, brute force — watch SubStatus |
| 4648 | Logon with explicit credentials | RunAs, net use, scheduled creds — lateral movement |
| 4672 | Special privileges assigned | New high-priv session (SeDebug, etc.) |
LogonType cheat sheet (4624)
| Type | Name | Example |
|---|---|---|
| 2 | Interactive | Console / local keyboard |
| 3 | Network | SMB, admin share |
| 10 | RemoteInteractive | RDP |
| 5 | Service | Service account start |
Correlation patterns
| Pattern | Events | Interpretation |
|---|---|---|
| Password spray | Many 4625 → one 4624 | Spray succeeded |
| Lateral explicit creds | 4648 then 4624 Type 3 | RunAs / net use pivot |
| Privileged session | 4672 + 4624 Type 10 | RDP/console admin |
5. LSASS on the network (lab .114)
lsass.exe holds RPC listeners in the 49664 ephemeral range (see baseline listening ports). Do not expose lab SMB/RPC to untrusted networks.
| Port | Service |
|---|---|
| 445 | SMB |
| 135 | RPC endpoint mapper |
| 49664+ | LSASS / RPC |
6. Hardening checklist
7. Lab exercises — .114
# LSASS process baseline
Get-Process lsass | Select-Object Id, Path, @{N='MB';E={[math]::Round($_.WorkingSet64/1MB,1)}}
# Security packages (read-only)
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' |
Select-Object 'Security Packages', 'Authentication Packages'
# Recent auth events
Get-WinEvent -LogName Security -MaxEvents 50 |
Where-Object { $_.Id -in 4624,4625,4648,4672 } |
Select-Object TimeCreated, Id, @{N='Msg';E={$_.Message.Substring(0,200)}} | Format-List