[REQ-END-188] Administrative Templates: Logon Display and Credential Restrictions
Target Scope
- Applicable Systems: Tier 2 client workstations and member servers. (For Tier 0 Privileged Access Workstations, refer to tightened baseline REQ-PAW-177; for Domain Controllers, refer to REQ-DC-024).
- Operating Systems: Windows 10 Enterprise/Professional (all supported builds), Windows 11 Enterprise/Pro, Windows Server 2016, 2019, 2022, and 2025.
Implementation Details
- Priority: High
- GPO Paths / Registry Locations:
- Block user from showing account details on sign-in:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Block user from showing account details on sign-in-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
BlockUserFromShowingAccountDetailsOnSignin - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Do not display network selection UI:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Do not display network selection UI-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
DontDisplayNetworkSelectionUI - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Do not enumerate connected users on domain-joined computers:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Do not enumerate connected users on domain-joined computers-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
DontEnumerateConnectedUsers - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Turn off app notifications on the lock screen:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Turn off app notifications on the lock screen-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
DisableLockScreenAppNotifications - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Turn off picture password sign-in:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Turn off picture password sign-in-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
BlockDomainPicturePassword - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Turn on convenience PIN sign-in:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Turn on convenience PIN sign-in-> Disabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
AllowDomainPINLogon - Value Type:
REG_DWORD - Value Data:
0(Disabled)
- GPO Path:
- Prevent the use of security questions for local accounts:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Prevent the use of security questions for local accounts-> Enabled - Registry Path:
HKLM\SOFTWARE\Policies\Microsoft\Windows\System - Value Name:
NoLocalPasswordResetQuestions - Value Type:
REG_DWORD - Value Data:
1(Enabled)
- GPO Path:
- Configure transmission of user password in MPR notifications:
- GPO Path:
Computer Configuration\Policies\Administrative Templates\System\Logon\Configure the transmission of the user's password in the content of MPR notifications sent by winlogon-> Disabled - Registry Path:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System - Value Name:
EnableMPR - Value Type:
REG_DWORD - Value Data:
0(Disabled)
- GPO Path:
- Block user from showing account details on sign-in:
Rationale
The Windows logon desktop and lock screen represent the physical perimeter of the operating system. In unhardened configurations, the logon interface exposes critical internal network information, leaks corporate usernames, presents weak authentication alternatives, and permits unauthorized network reconfigurations without authentication.
1. Eliminating Lock Screen Reconnaissance and Identity Harvesting
By default, the Windows lock screen displays the identity of the previously authenticated user or enumerates all active sessions:
- Account Name and Email Harvesting: Displaying user names, email addresses, and account pictures allows physical bystanders, building visitors, or surveillance cameras to harvest valid enterprise logon names and administrative IDs.
- Enumeration of Signed-In Users: When multiple users share a machine, Fast User Switching displays account tiles for every connected user.
- Enforcing
BlockUserFromShowingAccountDetailsOnSignin = 1andDontEnumerateConnectedUsers = 1strips personal identifiers from the lock screen, presenting an uninformative, generic authentication prompt that requires manual entry of the username and password.
2. Guarding the Lock Screen Network Boundary
The lock screen provides a network flyout control in the lower-right corner:
- Rogue Network Redirection: Anyone with physical access to an unattended, locked workstation can click the network icon to disconnect the machine from the corporate LAN/Wi-Fi and connect it to an untrusted rogue Wi-Fi access point (such as an "Evil Twin" or cellular hotspot).
- Adversary-in-the-Middle Positioning: Once connected to an attacker-controlled network, the attacker can poison DNS, initiate NTLM credential harvesting against background services, or attempt network exploits against open listening ports before the user ever unlocks the desktop.
- Setting
DontDisplayNetworkSelectionUI = 1completely removes the network flyout from the lock screen, preventing unauthenticated network switching.
3. Preventing Data Leakage via Lock Screen Toast Notifications
Toast notifications from productivity applications (Outlook, Teams, messaging platforms) frequently display snippet previews above the lock screen barrier:
- Notifications often reveal sensitive business discussions, meeting invitations, and two-factor authentication (2FA) verification codes or SMS OTPs.
- Setting
DisableLockScreenAppNotifications = 1suppresses all lock screen toast notifications, ensuring message content is only visible after successful interactive authentication.
4. Prohibiting Weak Authentication and Credential Overrides
Consumer-grade authentication mechanisms undermine enterprise Kerberos and PKI standards:
- Picture Passwords (
BlockDomainPicturePassword = 1): Feature low entropy, are susceptible to smudge analysis on touchscreen devices, and can be trivially observed through shoulder surfing. - Convenience PINs (
AllowDomainPINLogon = 0): Convenience PINs store cached credential hashes on the local disk without TPM-backed cryptographic hardware binding or hardware rate-limiting. (Note: This does not affect Windows Hello for Business, which utilizes asymmetric keys sealed in the TPM 2.0 module and is governed under dedicated WHfB policies). - Security Questions (
NoLocalPasswordResetQuestions = 1): Password reset questions rely on static trivia easily discoverable via open-source intelligence (OSINT) and social engineering. - MPR Notification Password Suppression (
EnableMPR = 0): Disables passing cleartext passwords inside Multiple Provider Router notifications from Winlogon to third-party network providers.
5. MITRE ATT&CK Mapping
- T1087.001 - Account Discovery: Local Account: Discovery of valid usernames on lock screens.
- T1040 - Network Sniffing: Diverting locked hosts to rogue wireless networks to capture traffic.
- T1110.001 - Brute Force: Password Guessing: Exploiting weak convenience PINs or predictable security questions.
- T1552.001 - Unsecured Credentials: Credentials In Files / Memory: Intercepting cleartext MPR notifications.
Legacy Impact & Compatibility
- Interactive Logon Experience: Users must type their full username and password or insert their smartcard. Account tiles and pictures will not appear automatically.
- Network Roaming for Mobile Users: Laptops traveling between known networks will connect automatically to pre-configured corporate SSIDs. If an end user needs to join a new hotel or public Wi-Fi network, they must log in using cached credentials before associating with the network in the desktop tray.
- Windows Hello for Business: Enterprise WHfB PIN and biometric authentication remain fully operational when deployed via Microsoft Intune or Group Policy WHfB templates.
Implementation Steps
Option A: Group Policy Object (GPO) Configuration (Preferred)
- Open the Group Policy Management Console (
gpmc.msc). - Edit or create the target GPO linked to workstations and member servers (e.g.,
GPO_Hardening_Endpoints). Configure the following policies:
Navigate to:
Computer Configuration\Policies\Administrative Templates\System\Logon- Block user from showing account details on sign-in: Set to
Enabled - Do not display network selection UI: Set to
Enabled - Do not enumerate connected users on domain-joined computers: Set to
Enabled - Turn off app notifications on the lock screen: Set to
Enabled - Turn off picture password sign-in: Set to
Enabled - Turn on convenience PIN sign-in: Set to
Disabled - Prevent the use of security questions for local accounts: Set to
Enabled - Configure the transmission of the user's password in the content of MPR notifications sent by winlogon: Set to
Disabled
- Block user from showing account details on sign-in: Set to
Link the GPO to the appropriate Organizational Unit and verify policy enforcement using
gpupdate /force.
Option B: PowerShell & Registry Configuration (Remediation / Non-GPO)
Run the following script locally to configure the administrative template registry values:
Download Script: Configure-EndAtLogonDisplayOptions.ps1
#Configure-EndAtLogonDisplayOptions.ps1
# Description: Configures Administrative Templates: Logon Display and Credential Restrictions.
Write-Host "Configuring Administrative Templates: Logon Display and Credential Restrictions..." -ForegroundColor Cyan
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System")) {
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Force | Out-Null
}
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "BlockUserFromShowingAccountDetailsOnSignin" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "DontDisplayNetworkSelectionUI" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "DontEnumerateConnectedUsers" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "DisableLockScreenAppNotifications" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "BlockDomainPicturePassword" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "AllowDomainPINLogon" -Value 0 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "NoLocalPasswordResetQuestions" -Value 1 -Type DWord -Force
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System")) {
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Force | Out-Null
}
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableMPR" -Value 0 -Type DWord -Force
Write-Host "[+] Administrative Templates: Logon Display and Credential Restrictions applied successfully." -ForegroundColor Green
To verify the configuration:
Download Script: Get-EndAtLogonDisplayOptionsStatus.ps1
#Get-EndAtLogonDisplayOptionsStatus.ps1
# Description: Audits Administrative Templates: Logon Display and Credential Restrictions.
Write-Host "--- Auditing Administrative Templates: Logon Display and Credential Restrictions ---" -ForegroundColor Cyan
$script:Vulnerable = $false
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "BlockUserFromShowingAccountDetailsOnSignin"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "DontDisplayNetworkSelectionUI"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "DontEnumerateConnectedUsers"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "DisableLockScreenAppNotifications"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "BlockDomainPicturePassword"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "AllowDomainPINLogon"
$ExpectedValue = 0
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$ValueName = "NoLocalPasswordResetQuestions"
$ExpectedValue = 1
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
$TargetKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
$ValueName = "EnableMPR"
$ExpectedValue = 0
if (Test-Path -Path $TargetKey) {
$Prop = Get-ItemProperty -Path $TargetKey -Name $ValueName -ErrorAction SilentlyContinue
if ($null -ne $Prop) {
$Actual = $Prop.$ValueName
if ($Actual -eq $ExpectedValue) {
Write-Host " [+] $ValueName = $($Actual) (Secure)" -ForegroundColor Green
} else {
Write-Host " [!] MISMATCH: $ValueName = $($Actual) (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING VALUE: $ValueName (Expected: $($ExpectedValue))" -ForegroundColor Red
$script:Vulnerable = $true
}
} else {
Write-Host " [!] MISSING KEY: $TargetKey" -ForegroundColor Red
$script:Vulnerable = $true
}
if ($script:Vulnerable) {
Write-Host "Audit Result: VULNERABLE" -ForegroundColor Red
exit 1
} else {
Write-Host "Audit Result: SECURE" -ForegroundColor Green
exit 0
}
Sources & Compliance References
- CIS Benchmark: CIS Microsoft Windows 10 Enterprise Benchmark: Section 18.9.28.1, 18.9.28.2, 18.9.28.3, 18.9.28.5, 18.9.28.6, 18.9.28.7, 18.10.15.3, 18.10.82.1; CIS Microsoft Windows 11 Enterprise Benchmark: Section 18.9.28.1, 18.9.28.2, 18.9.28.3, 18.9.28.5, 18.9.28.6, 18.9.28.7, 18.10.15.3, 18.10.82.1
- DISA STIG: Windows 10 STIG Rules WN10-CC-000075, WN10-CC-000080, WN10-CC-000085, WN10-CC-000090
- ANSSI Active Directory Hardening Guide: Section 3.1 (Securing interactive logon prompts and disabling unauthenticated lock screen features)
- Microsoft Security Baseline: Windows Client Security Baseline (Logon and Credential Protections)