Configuration Audit
Configuration Audit of SCCM with best practices commented
PowerShell with Admin Priv
## Is the host a DC
Import-Module ActiveDirectory
Get-ADDomainController -Filter * | Select-Object HostName, IsGlobalCatalog
## Obtain SCCM's default security groups and check for unexpected changes
Get-ADGroup -Filter 'Name -like "SMS_SiteSystemToSiteServerConnection_*"' | ForEach-Object {
Get-ADGroupMember -Identity $_
}
## Check ACLs of .PFX certificate files used by SCCM servers
Get-Acl -Path "path\of\the\certificate.pfx" | Format-List
# Get the RootKey
(Get-WmiObject -Namespace root\ccm\locationservices -Class TrustedRootKey).TrustedRootKey
SCCM's PowerShell
## Which CM Distribution Point is configured
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\SMS\DP -Name ManagementPoints).ManagementPoints
## SCCM Share
net view \\sccm /all
## Collect the Site Configuration
Get-CMSite
## Obtain SCCM administrative users and their roles
Get-CMAdministrativeUser | Select-Object Name, RoleName
# or
Get-CMAdministrativeUser
## Retrieve infos about the management point configuration
### SslState : 0 not encrypted
Get-CMManagementPoint
## Collect the Distribution Point Configuration
Get-CMDistributionPoint
## Presence of sensitive data in task sequences
$SensitiveKeywords = @(
"pass",
"passwd",
"password",
"secret",
"key",
"credential",
"token",
"apikey",
"api_key",
"accesskey",
"access_key",
"secretkey",
"secret_key",
"privatekey",
"private_key",
"passphrase",
"login",
"signin",
"auth",
"authentication",
"encryption",
"certificate",
"cert"
)
$TaskSequences = Get-CMTaskSequence
foreach ($TS in $TaskSequences) {
$TSName = $TS.Name
$TSSteps = Get-CMTaskSequenceStep -TaskSequencePackage $TS.PackageID
foreach ($Step in $TSSteps) {
foreach ($Keyword in $SensitiveKeywords) {
if ($Step.CommandLine -like "*$Keyword*") {
Write-Output "Potential sensitive data (`"$Keyword`") found in Task Sequence: $TSName, Step: $($Step.StepName)"
}
}
}
}
## Use system-specific authorization for OSD
# Retrieve device collections with OSD task sequences deployed
### CollectionName : should reference a specific collection and not broad groups like "All Systems" to avoid unauthorized access
Get-CMTaskSequenceDeployment | Select-Object CollectionName, DeploymentID, PackageID
# Check PXE parameters on distribution points
### PxeSupport : 'True'
### PxePasswordEnabled : 'True'
Get-CMDistributionPoint | Select-Object ServerName, PxeSupport, PxePasswordEnabled
## Keep WIM up-to-date with the latest security updates
### Version : latest
Get-CMOperatingSystemImage | Select-Object PackageID, Name, Version, ImagePath
# Client Status
### ADRetrievingSchedule : (depends on the AD)
### CleanUpInterval : 31
### DDRInactiveInterval : 7
### HWInactiveInterval : 7
### NeedADLastLogonTime : (optional)
### PolicyInactiveInterval : 7
### SettingsID : 1
### StatusInactiveInterval : 7
### SWInactiveInterval : 7
Get-CMClientStatusSetting
# Collect the Software Update Point Configuration
### Check SslState
Get-CMSoftwareUpdatePoint
SCCM GUI
# Require approval of computers from untrusted domains
- Console Configuration Manager (SCCM) > Administration > Site configuration > Sites > "Hierarchy settings" in the "Settings" group.
# Only approved Console Extensions
- Console Configuration Manager (SCCM) > Administration > Site configuration > Sites > "Hierarchy settings" in the "Settings" group > General > (check box Only allow console extension that are approved for the hierarchy)
# Signature & encryption
### PKI (HTTPS) & Signature enabled
- Console Configuration Manager (SCCM) > Administration > Site configuration > Sites > (Select main site) > Properties > Signature and encryption tab
Last updated