Damien Coles f172d00514 Initial release: Declarative AD Framework v2.1.0
Infrastructure-as-code framework for Active Directory objects and Group Policy.
Sanitized from production deployment for public sharing.
2026-02-19 17:02:42 +00:00

174 lines
9.3 KiB
Markdown

# Changelog
## [2.1.0] - 2026-02-14
AD objects subsystem refactored into modular architecture matching the GPO pattern. New features for password policies, user properties, group protection, and stale object detection.
### AD Objects -- Modular Architecture
Refactored `ADHelper.ps1` from a monolithic library (606 lines) into a loader that dot-sources 6 specialized modules:
- **ADCore.ps1**: CSPRNG password generation (Get-CryptoRandomInt, New-RandomPassword)
- **ADOrganizationalUnit.ps1**: OU ensure/compare
- **ADGroup.ps1**: Security group ensure/compare with accidental-deletion protection
- **ADUser.ps1**: User account ensure/compare with optional property management
- **ADDelegation.ps1**: OU delegation ACLs (schema GUIDs, ACE generation, bitwise subset checking)
- **ADPasswordPolicy.ps1**: Fine-grained password policy (PSO) ensure/compare
### Group Protection
Security groups now get `ProtectedFromAccidentalDeletion = $true` on creation. Existing unprotected groups are remediated on apply. Drift detection in TestOnly mode.
### Extended User Properties
User definitions support optional AD attributes (Description, Title, Department, Mail, etc.) via a `-Properties` hashtable. Core schema keys are explicit parameters; everything else flows through Properties. Works for both new user creation and existing user updates.
### Fine-Grained Password Policies (PSOs)
New `password-policies.ps1` definition file with two admin-tier policies:
- **PSO-MasterAdmins**: 16-char minimum, 30-day max age, 48 history, 3-attempt lockout (precedence 10)
- **PSO-DelegatedAdmins**: 12-char minimum, 42-day max age, 24 history, 5-attempt lockout (precedence 20)
Both override the Default Domain Policy for their linked groups. Property-level drift detection and full AppliesTo group linkage sync.
### Stale Object Detection
New `Get-StaleADObjects.ps1` read-only reporting script. Scans managed OUs for:
- Stale user accounts (no login in N days, default 90)
- Unexpectedly disabled accounts (not intentionally disabled in definitions)
- Empty security groups (zero members)
- Unmanaged users/groups (in managed OUs but not in definition files)
- Pending credential files with age
### Documentation
- Updated FRAMEWORK.md with modular AD architecture, PSO definition format, extended user properties
- Updated CLAUDE.md and README.md with new repo structure and features
- Updated function pairs table and dependency ordering
---
## [2.0.0] - 2026-02-14
Major expansion of the GPO framework. Modular library architecture, 8 new subsystems, and hardening policies deployed across all GPOs.
### GPO Framework -- Modular Architecture
Refactored `GPOHelper.ps1` from a monolithic library into a loader that dot-sources 12 specialized modules:
- **GPOCore.ps1**: SYSVOL paths, version bump, extension GUIDs, DSC helpers
- **GPOPolicy.ps1**: Security policy (GptTmpl.inf), registry settings, restricted groups
- **GPOPermissions.ps1**: GPO links (with order/enforcement), management permissions, security filtering
- **GPOScripts.ps1**: Startup/shutdown/logon/logoff script deployment to SYSVOL
- **GPOAudit.ps1**: Advanced audit policy (53 subcategories in audit.csv)
- **GPOPreferences.ps1**: Group Policy Preferences XML (10 types -- see below)
- **GPOWmiFilter.ps1**: WMI filter creation and GPO linking
- **GPOBackup.ps1**: Pre-apply backup with timestamped snapshots, restore via `Restore-GPOBaseline.ps1`
- **GPOFirewall.ps1**: Windows Firewall rules (`Open-NetGPO` session) and profile management
- **GPOAppLocker.ps1**: AppLocker policy management via `Set-AppLockerPolicy -LDAP`
- **GPOWdac.ps1**: WDAC policy deployment (.xml auto-converted to .p7b via `ConvertFrom-CIPolicy`)
- **GPOFolderRedirection.ps1**: Folder redirection via fdeploy1.ini (12 supported folders)
### GPO Preferences (10 types)
- ScheduledTasks, DriveMaps, EnvironmentVariables, Services (from 1.0)
- **Printers**: Shared printer mapping with default/skip-local options
- **Shortcuts**: Desktop/Start Menu shortcuts (URL, filesystem, shell)
- **Files**: File copy/replace from UNC or local paths
- **NetworkShares**: Local share creation with permissions
- **RegistryItems**: GPP registry items with action modes (distinct from Administrative Templates)
- **LocalUsersAndGroups**: Additive local group membership management (ADD/REMOVE without full replace)
- All types support Item-Level Targeting (ILT) filters
### GPO Operations
- **Restore-GPOBaseline.ps1**: List and restore GPO backups by name and timestamp
- **Get-UnmanagedGPOs.ps1**: Discover orphan GPOs in AD not managed by the framework
- **Automatic backups**: Every apply creates timestamped snapshots (SYSVOL + AD attributes), 5 retained per GPO
- **GPO status management**: `DisableUserConfiguration` / `DisableComputerConfiguration` keys
### New GPO -- Servers-01
- Linked to ExampleServers OU with WMI filter (ProductType = 3)
- Full audit (30 advanced audit subcategories), PowerShell transcription + module logging
- Command-line in process creation events, 256 MB security log
- Firewall: default-deny inbound, allow WinRM/RDP/ICMP/SMB
- GPP LocalUsersAndGroups: MasterAdmins added to Remote Desktop Users
### Hardening Deployed to Existing GPOs
- **Firewall profiles + rules**: Servers-01, AdminWorkstations-01, Workstations-01 (default-deny inbound, allow management traffic)
- **Advanced audit policy**: Servers-01 (30 subcategories), AdminWorkstations-01 (27 subcategories including DPAPI)
- **AppLocker audit mode**: Workstations-01 and AdminWorkstations-01 (Exe/Msi/Script collections, Microsoft-signed + Program Files + Windows + admin unrestricted)
- **WDAC audit mode**: AdminWorkstations-01 (AllowMicrosoft baseline -- all Microsoft root CAs, WHQL drivers, multiple policy format for future supplemental policies)
### Documentation
- **FRAMEWORK.md**: Complete developer reference -- architecture, ensure/compare pattern, all 15 setting types with format documentation, encoding guide, how-to recipes
- Updated README.md with GPO capabilities table, full repo structure, Servers-01
- Updated CLAUDE.md with 12-module library structure
### Bug Fixes
- AppLocker XML element names must match rule type (FilePathRule, FileHashRule, not always FilePublisherRule)
- `Get-NetFirewallRule` uses `-PolicyStore` not `-GPOSession` for reading GPO firewall rules
- `Get-AppLockerPolicy -Domain` is a SwitchParameter (flag), not a string parameter
- XML comments cannot contain `--` (double hyphen) -- .NET XmlSerializer strictly enforces this
---
## [1.0.0] - 2026-02-13
First stable release. Full infrastructure-as-code coverage for the example.internal domain.
### AD Object Management
- **Apply-ADBaseline.ps1**: Idempotent orchestration for OUs, security groups, and user accounts
- **ADHelper.ps1**: Shared functions -- CSPRNG password generation, OU/group/user ensure and compare
- **Credential handoff**: New user passwords saved to ACL-locked files, never printed to console
- **Stale credential warnings**: Files older than 24 hours trigger a warning banner
- **Dependency ordering**: OUs -> groups -> users -> membership sync
### Organizational Units
- ExampleUsers, ExampleWorkstations, ExampleServers, ExampleAdmins, ExampleAdminWorkstations
### Security Groups and Delegation
- **MasterAdmins**: Full Control on all managed OUs, GPO edit rights (self-healing)
- **DelegatedAdmins**: Scoped helpdesk in ExampleUsers (password reset, user properties)
- ACL delegation automated via `delegations.ps1` (Ensure/Compare pattern with AD schema GUIDs)
### Group Policy
- **Apply-GPOBaseline.ps1**: Declarative GPO management -- security policy, registry settings, links, security filtering, management permissions
- **GPOHelper.ps1**: SYSVOL read/write, GptTmpl.inf parsing, GPO versioning, permission management
- **-GpUpdate switch**: Optional `gpupdate /force` after applying
- **-TestOnly mode**: Drift detection across all GPO settings without changes
- **Self-healing permissions**: MasterAdmins edit rights enforced on every run
### GPO Policies
- **Default Domain Policy**: Password (7-char min, 42-day max, 24 history), lockout (5 attempts, 30-min), Kerberos (10-hour TGT)
- **Default Domain Controllers Policy**: 25 user rights assignments, SMB/LDAP signing, secure channel encryption
- **Admins-01**: 10-min session lock, PowerShell script block logging + transcription, taskbar cleanup
- **Users-01**: Desktop lockdown (regedit, cmd, Run disabled), DelegatedAdmins exempted via deny security filtering
- **Workstations-01**: Full audit, autorun disabled, Windows Update 3 AM daily, NLA required, log sizing
- **AdminWorkstations-01**: Enhanced PAW -- all audit categories, PS transcription + module logging, command-line in 4688 events, 256 MB security log, Defender exclusions for JetBrains, RSAT startup script
### DSC Compliance
- **Apply-DscBaseline.ps1**: Second-layer validation of DC local state against GPO definitions
- **Single source of truth**: DSC configs read from settings.ps1, no value duplication
- **Kerberos validation**: Custom Script resource using secedit export (SecurityPolicyDsc doesn't support Kerberos natively)
- **Detailed drift output**: Reports specific non-compliant resources
- **Apply mode safety**: Warning banner + confirmation prompt required
### Documentation
- README.md with architecture, workflow, security model, and operations guide
- Per-GPO README files with settings tables and design rationale
- CLAUDE.md for AI assistant context