“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.

Edison

Der 82 x 75 x 38 mm messende und 110 Gramm schwere Edison rechnet mit einem Freescale MC9S08PA8VLC-Mikrokontroller. Der Roboter ist mit zwei Rädern bestückt und steckt in einem Gehäuse, das mit Lego-Noppen versehen ist. So kann der Edison schnell mit zusätzlichen Plastikklötzchen erweitert werden. Zum Lieferumgang des Roboters gehören neben Mikrokontroller, Gehäuse samt Motoren und Rädern sowie Steuerungstasten auch Infrarot-LEDs und -Empfänger, einfarbige LEDs und Fotowiderstände sowie ein Piezowandler. Als Energiequelle dienen vier AAA-Batterien, mit denen Edison je nach Sensorbestückung bis zu einer Stunde umherfahren kann. Programmiert wird der Roboter in der grafischen Sprache EdWare, die Anwendungen werden audio-kodiert über ein spezielles EdComm-Kabel übertragen.

Edison lässt sich unter anderem mit Hilfe einer Infrarot-Fernbedienung steuern. Standardmäßig sind bereits mehrere Programme im Roboter gespeichert, die mittels Barcodes aufgerufen werden können. So kann der Roboter beispielsweise sofort einer Linie oder Leuchtquelle folgen, Hindernissen ausweichen oder auf Geräusche reagieren. Mehrere Edisons können via Infrarot kommunizieren und lassen sich auch miteinander kombinieren.