CHAPS Check Catalog

April 14, 2026 · View on GitHub

CHAPS performs 63 checks in a fixed canonical order across all three scripts. This document lists every check, organized by the six output sections, with a brief description of what each check verifies.

For remediation guidance when a check comes back negative, see REMEDIATION.md. For how to read the report output, see INTERPRETING_REPORTS.md.

Section 1 — System Info Checks (26 checks)

#CheckVerifies
1System InformationOS name, version, build, architecture, workgroup
2Windows VersionShort OS version string
3User PATHCurrent user's PATH environment variable
4Auto Update ConfigurationHKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU!AUOptions — should be 4 (scheduled install)
5Missing / Installed PatchesInventory of installed hotfixes; PSv3/v2 also query Microsoft Update for missing critical/important patches
6BitLockerOperating system volume encryption status
7AlwaysInstallElevatedHKLM + HKCU SOFTWARE\Policies\Microsoft\Windows\Installer!AlwaysInstallElevated — should not both be 1
8EMET / Exploit ProtectionLegacy EMET service on older Windows; system-wide DEP / ASLR / CFG on Windows 10+
9LAPSWindows LAPS policy and/or legacy LAPS (AdmPwd.dll) presence
10GPO ReprocessingNoGPOListChanges under the GP {35378EAC-...} key — should be 0 (reapply on refresh)
11Net Session EnumerationSrvsvcSessionInfo DefaultSecurity and RestrictRemoteSAM registry keys
12AppLockerAppLocker policy configuration (CMD: info-only, requires PowerShell)
13Credential Guard / Device GuardWin32_DeviceGuard.SecurityServicesConfigured and SecurityServicesRunning
14MS Office MacrosHKCU\Software\Microsoft\Office\<ver>\<app>\Security!VBAWarnings and BlockContentExecutionFromInternet
15SysmonSysmon service (Sysmon, Sysmon64, SysmonDrv) presence and status
16USB DevicesConnected USB and PnP devices inventory
17Antivirus / EDRroot\SecurityCenter2.AntiVirusProduct on workstations; Get-MpComputerStatus fallback on servers
18Software InventoryInstalled programs from HKLM\...\Uninstall (avoids slow Win32_Product)
19UAC ConfigurationEnableLUA, ConsentPromptBehaviorAdmin, PromptOnSecureDesktop, FilterAdministratorToken
20Account Policiesnet accounts output (password policy, lockout threshold); Guest account status; Administrator account rename
21Secure BootUEFI Secure Boot state via Confirm-SecureBootUEFI or HKLM\SYSTEM\...\SecureBoot\State!UEFISecureBootEnabled
22LSA ProtectionHKLM\SYSTEM\CurrentControlSet\Control\Lsa!RunAsPPL — should be 1 (or 2 with UEFI lock)
23Risky ServicesPrint Spooler, Remote Registry, SNMP, Telnet, Remote Access, .NET TCP Port Sharing, Internet Connection Sharing — should be disabled where not required
24Unquoted Service PathsService ImagePath values containing a space before .exe and not enclosed in quotes — local privilege escalation vector. CMD output is dump-and-review.
25Weak Program Directory PermissionsNTFS ACLs on Program Files, Program Files (x86), and non-standard top-level C:\ folders that grant write/modify to Users, Authenticated Users, or Everyone
26Installed CompilersGCC, MinGW, clang, MSVC cl.exe, NASM, MASM, make, cmake, Strawberry Perl, Python — both standalone and bundled. Living-off-the-land risk.

Section 2 — Security Checks (7 checks)

#CheckVerifies
27SMB Server ConfigurationSMBv1 disabled, SMBv1 auditing, SMBv2/v3 state, server signing, encryption, reject unencrypted
28Anonymous EnumerationHKLM\System\CurrentControlSet\Control\LsaRestrictAnonymous and RestrictAnonymousSAM
29Untrusted FontsHKLM\...\Session Manager\Kernel!MitigationOptions — Windows 10+ untrusted font blocking
30ASR RulesAttack Surface Reduction rules via Get-MpPreference (CMD: info-only)
31SMB Client SigningHKLM\...\LanmanWorkstation\Parameters!RequireSecuritySignature and EnableSecuritySignature
32TLS/SSL Protocol ConfigurationHKLM\SYSTEM\...\SCHANNEL\Protocols\<proto>\Server!Enabled — SSL 2.0/3.0/TLS 1.0/1.1 disabled, TLS 1.2/1.3 enabled
33Audit Policyauditpol /get /category:* — key subcategories (Logon, Account Management, Process Creation, Security System Extension, etc.)

Section 3 — Authentication Checks (9 checks)

#CheckVerifies
34RDP DenyAllowRemoteRPC and fDenyTSConnections under HKLM\System\CurrentControlSet\Control\Terminal Server
35Local AdministratorsMembership of the local Administrators group
36NTLM Session SecurityNtlmMinServerSec and NtlmMinClientSec — should be 0x20080030 (NTLMv2 + 128-bit)
37LAN Manager AuthenticationLmCompatibilityLevel (should be 5) and NoLmHash (should be 1)
38Cached LogonsCachedLogonsCount under Winlogon — should be 0 or 1
39Interactive LoginLocalAccountTokenFilterPolicy in policies\system (and Wow6432Node mirror) — should not be 1
40WDigestHKLM\SYSTEM\...\SecurityProviders\WDigest!UseLogonCredential — should be 0
41Restrict RPC ClientsHKLM\Software\Policies\Microsoft\Windows NT\Rpc!RestrictRemoteClients — should be 1
42RDP Network Level AuthenticationHKLM\...\RDP-Tcp!UserAuthentication (NLA required) and MinEncryptionLevel (should be 3 or 4)

Section 4 — Network Checks (11 checks)

#CheckVerifies
43IPv4 InterfacesActive IPv4 addresses on all network adapters
44IPv6 InterfacesActive IPv6 addresses (flags non-link-local; link-local fe80:: is reported as informational)
45WPADhosts file entry, WpadOverride registry, WinHttpAutoProxySvc service, KB3165191 hotfix
46WINS ConfigurationWin32_NetworkAdapterConfiguration.DNSEnabledForWINSResolution and WINSEnableLMHostsLookup
47LLMNRHKLM\Software\policies\Microsoft\Windows NT\DNSClient!EnableMulticast — should be 0
48Computer Browser ServiceBrowser service — should be stopped/disabled
49NetBIOS over TCP/IPPer-adapter TcpipNetbiosOptions — should be 2 (disabled)
50Network ConnectionsListening ports and established connections (with process names where available)
51Firewall ProfilesDomain / Private / Public profile enabled state and default inbound/outbound actions
52TCP/IP Stack HardeningDisableIPSourceRouting, EnableICMPRedirect, PerformRouterDiscovery
53Network SharesNon-default SMB shares (excludes ADMIN,C, C/D/etc.,IPC/etc., IPC, PRINT,FAX, FAX)

Section 5 — PowerShell Checks (7 checks)

#CheckVerifies
54PowerShell VersionsCurrent PS major version, PS v2 feature state, .NET versions that permit v2 (CMD: info-only)
55PowerShell Language Mode$ExecutionContext.SessionState.LanguageMode — should be ConstrainedLanguage (CMD: info-only)
56PS Module LoggingHKLM\SOFTWARE\Policies\...\ModuleLogging!EnableModuleLogging and ModuleNames\*
57PS Script Block LoggingEnableScriptBlockLogging and EnableScriptBlockInvocationLogging
58PS TranscriptionEnableTranscripting, EnableInvocationHeader, OutputDirectory
59PS Protected Event LoggingEnableProtectedEventLogging
60WinRMService state via Test-WSMan or Get-Service; firewall rule for Windows Remote Management (HTTP-In)

Section 6 — Logging Checks (3 checks)

#CheckVerifies
61Event Log SizesMaximum size of 11 critical logs (Application, System, Security, Windows PowerShell, PowerShell/Operational, TerminalServices-LocalSessionManager/Operational, TaskScheduler/Operational, SMBServer/Audit, Security-Netlogon/Operational, WinRM/Operational, WMI-Activity/Operational)
62Command-line AuditingHKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit!ProcessCreationIncludeCmdLine_Enabled
63Windows Script HostHKLM\Software\Microsoft\Windows Script Host\Settings!Enabled — should be 0

Script Capability Matrix

Check RangePSv3PSv2CMD
Checks 1–26 (System Info)FullFullFull except #12 AppLocker (info-only); #24 dump-and-review
Checks 27–33 (Security)FullFullFull except #30 ASR Rules (info-only)
Checks 34–42 (Authentication)FullFullFull
Checks 43–53 (Network)FullFullFull
Checks 54–60 (PowerShell)FullFull#54 and #55 info-only (require PowerShell runtime); #56–#60 implemented via registry
Checks 61–63 (Logging)FullFullFull (wevtutil gl used for log sizes)

CMD emits [*] <check name>: Not available in CMD. <reason>. for info-only checks, ensuring every report from every script covers all 63 checks.

Disabling Individual Checks

Each script has boolean toggles at the top (e.g., $getBitLockerCheck = $true). Set any to $false to skip that check for the current run. Useful when a check is known to hang on a specific platform or is irrelevant to the assessment scope.

Running the script with the -Config switch prints the current toggle state and exits (PowerShell scripts only).