“Log Off” aus einer Powershell RemoteSession

Kürzlich bin ich auf die Frage gestossen, wie au seiner Powershell RemoteSession angemeldete Benutzer abgemeldet werden können. Per WMI ist dies relativ einfach umsetzbar.

Get-WMIObject -class Win32_OperatingSystem -Computername [MyComputerName]).Win32Shutdown(0)

Win32Shutdown Flags:
0            Log Off
4            Forced Log Off (0+4)
1            Shutdown
5            Forced Shutdown (1+4)
2            Reboot
6            Forced Reboot (2+4)
8            Power Off
12          Forced Power Off (8+4) 

Quelle: https://msdn.microsoft.com/en-us/library/windows/desktop/aa394058?f=255&MSPPError=-2147217396


Hashwerte mit „CertUtil.exe“ prüfen

CertUtil ist ein vorinstalliertes Windows Utility, welches zum Generieren von Hash Prüfsummen verwendet werden kann:

certUtil -hashfile pathToFileToCheck [HashAlgorithm]

Folgende Hash Algorithmen können verwendet werden: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512


Beispiel

Im Beispiel wurde eine neue Version von Oracle JRE heruntergeladen (p21193983_18045_MSWIN-x86-64.zip). Im XML-File (p21193983_18045_American English_M.xml) , welches ebenfalls zur Prüfung durch Oracle bereitgestellt wird, ist die MD5 Prüfsumme ersichtlich.


Je nach Anbieter kann auch der Algorithmus SHA-1 verwendet werden:

Oracle Java JRE Einstellungen per Configuration Baselines

Grundsätzlich sollten sicherheitstechnisch die Einstellungen der Java Runtime möglichst hoch eingestellt werden. Während der Installation wird die Grundkonfiguration und somit die Standardsicherheit in der Datei "C:\Windows\Sun\Java\Deployment\deployment.properties" eingestellt. In Spezialfällen können jedoch explizite Einstellungen nötig sein.

In "Microsoft System Center Configuration Manager 2012" kann unter "\Assets and Compliance\Overview\Compliance Settings\" eine "Configuration Baseline" mit einem "Configuration Item" als Lösung erstellt werden. 

"Configuration Item"

Im dazugehörigen "Configuration Item" erfolgt die Prüfung (Discovery Script) und gegebenenfalls Korrektur (Remediation Script) per Powershell.

Discovery.ps1

#############################################################################
<#
 Summary:          JRE Config
 Create Date:      2015-06-08
 Author:           Martin Schneeberger
 License:          Copyright © 2015
#>
#############################################################################
# Main
#############################################################################

try
{
	# Check if file 'deployment.properties' exists
	if(Test-Path -Path "$env:windir\Sun\Java\Deployment\deployment.properties")
	{
	    # Check setting 'deployment.security.revocation.check'
	    $deploymentsecurityrevocationcheck = Get-Content "$env:windir\Sun\Java\Deployment\deployment.properties" | Select-String "deployment.security.revocation.check=NO_CHECK"

	    # Check setting 'deployment.security.revocation.check'
	    $deploymentsecuritytlsrevocationcheck = Get-Content "$env:windir\Sun\Java\Deployment\deployment.properties" | Select-String "deployment.security.tls.revocation.check=NO_CHECK" 

	    # Return Comliance
	    if(($deploymentsecurityrevocationcheck -eq $null) -or ($deploymentsecuritytlsrevocationcheck -eq $null))
	    {
	    	$Compliance = "NonCompliant" 
	    }
	    else
	    {
	    	$Compliance = "Compliant"
	    }
	}
	else
	{
	    $Compliance = "NonCompliant" 
	}

	# Return
	Return $Compliance
}
finally
{
	New-EventLog -LogName Application -Source "Configuration Baseline" -ErrorAction SilentlyContinue
	Write-EventLog -logname Application -source "Configuration Baseline" -eventID 3001 -entrytype Information -message "Configuration Baseline 'JRE Config' Discovery: $Compliance"
}

#############################################################################

Remediation.ps1

#############################################################################
<#
 Summary:          JRE Config
 Create Date:      2015-06-08
 Author:           Martin Schneeberger
 License:          Copyright © 2015
#>
#############################################################################
# Main
#############################################################################

# Config Template
$ConfigTemplate = @"
#deployment.properties
deployment.security.SSLv2Hello=true
deployment.expiration.check.enabled=false
deployment.user.security.exception.sites=C\:\\Windows\\Sun\\Java\\Deployment\\exception.sites
deployment.user.security.exception.sites.locked
deployment.security.level=HIGH
deployment.security.level.locked
deployment.proxy.type=3
deployment.proxy.type.locked
deployment.security.revocation.check=NO_CHECK
deployment.security.revocation.check.locked
deployment.security.tls.revocation.check=NO_CHECK
deployment.security.tls.revocation.check.locked
"@

try
{
	# Check if file 'deployment.properties' exists
	if(Test-Path -Path "$env:windir\Sun\Java\Deployment\deployment.properties")
	{
	    # Check setting 'deployment.security.revocation.check'
	    $deploymentsecurityrevocationcheck = Get-Content "$env:windir\Sun\Java\Deployment\deployment.properties" | Select-String "deployment.security.revocation.check=NO_CHECK"

	    # Check setting 'deployment.security.revocation.check'
	    $deploymentsecuritytlsrevocationcheck = Get-Content "$env:windir\Sun\Java\Deployment\deployment.properties" | Select-String "deployment.security.tls.revocation.check=NO_CHECK" 

	    # Write new 'deployment.properties' file
	    if(($deploymentsecurityrevocationcheck -eq $null) -or ($deploymentsecuritytlsrevocationcheck -eq $null))
	    {
	        $ConfigTemplate | Out-File -FilePath "$env:windir\Sun\Java\Deployment\deployment.properties" -Encoding default -Force
	    }
	}
	else
	{
	    # Write new 'deployment.properties' file
	    $ConfigTemplate | Out-File -FilePath "$env:windir\Sun\Java\Deployment\deployment.properties" -Encoding default -Force
	}
}
finally
{
	New-EventLog -LogName Application -Source "Configuration Baseline" -ErrorAction SilentlyContinue
	Write-EventLog -logname Application -source "Configuration Baseline" -eventID 3002 -entrytype Information -message "Configuration Baseline 'JRE Config' Remediation: Updated!"
}

#############################################################################


In der "Compliance Rule" wird definiert, dass der Rückgabewert des "Discovery Script" dem Wert "Compliant" entsprechen muss. Ist dies nicht der Fall wir das "Remediation Script" ausgeführt.


"Configuration Baseline"

Die "Configuration Baseline" müsste zeitlich relativ oft angewandt werden, damit die Einstellungen für die Endbenutzenden auch nach einem Update der Java Runtime rasch wieder wirken. Eine Evaluation jede Stunde macht Sinn.