Fehlermeldung „CredSSP Encryption Oracle-Abwehr“ beim Versuch, per RDP auf eine Windows-VM in Azure zuzugreifen

Gilt für: Azure

Problembeschreibung


Stellen Sie sich folgendes Szenario vor:

In diesem Szenario wird die folgende Fehlermeldung angezeigt: 

Überprüfen, ob das CredSSP-Update installiert wurde


Überprüfen Sie den Updateverlauf auf die folgenden Updates, oder überprüfen Sie die Version von „TSpkg.dll“.

Betriebssystem TSpkg.dll-Version mit CredSSP-Update CredSSP-Update
Windows 7 Service Pack 1/Windows Server 2008 R2 Service Pack 1 6.1.7601.24117 KB4103718 (monatlicher Rollup)
KB4103712 (reines Sicherheitsupdate)
Windows Server 2012 6.2.9200.22432 KB4103730 (monatlicher Rollup)
KB4103726 (reines Sicherheitsupdate)
Windows 8.1/Windows Server 2012 R2 6.3.9600.18999 KB4103725 (monatlicher Rollup).
KB4103715 (reines Sicherheitsupdate)
RS1 – Windows 10, Version 1607/Windows Server 2016 10.0.14393.2248 KB4103723
RS2 – Windows 10, Version 1703 10.0.15063.1088 KB4103731
RS3 – Windows 10, Version 1709 10.0.16299.431 KB4103727

Ursache


Dieser Fehler tritt auf, wenn Sie versuchen, eine unsichere RDP-Verbindung herzustellen, und die unsichere RDP-Verbindung durch eine Encryption Oracle-Abwehr-Richtlinieneinstellung auf dem Server oder Client blockiert wird. Diese Einstellung legt fest, wie eine RDP-Sitzung mit CredSSP eingerichtet wird und ob eine unsichere RDP-Verbindung erlaubt ist.

In der folgenden Interoperabilitätsmatrix finden Sie Szenarien, die entweder für dieses Sicherheitsrisiko anfällig sind oder Betriebsausfälle verursachen.

    Server
    Updated Force Updated Clients Mitigated Vulnerable
Client Updated Allowed Blocked2 Allowed Allowed
Force Updated Clients Blocked Allowed Allowed Allowed
Mitigated Blocked1 Allowed Allowed Allowed
Vulnerable Allowed Allowed Allowed Allowed

Beispiele
 

1 Der Client hat das CredSSP-Update installiert, und für Encryption Oracle-Abwehr ist Mitigated festgelegt. Dieser Client wird keine RDP-Verbindung zu einem Server herstellen, auf dem das CredSSP-Update nicht installiert ist.

2 Auf dem Server ist das CredSSP-Update installiert und für Encryption Oracle-Abwehr ist Force updated clients festgelegt. Der Server blockiert jede RDP-Verbindung von Clients, auf denen das CredSSP-Update nicht installiert ist.

Lösung


Um das Problem zu beheben, installieren Sie CredSSP-Updates sowohl auf dem Client als auch auf dem Server, sodass eine sichere RDP-Verbindung hergestellt werden kann. Weitere Informationen finden Sie unter CVE-2018-0886 | Sicherheitsanfälligkeit in CredSSP bezüglich Remotecodeausführung.

Installieren dieses Updates mithilfe der seriellen Konsole von Azure

  1. Melden Sie sich beim Azure-Portal an, wählen Sie die Option Virtual Machines aus, und wählen Sie dann die VM aus.
  2. Führen Sie einen Bildlauf nach unten zum Abschnitt Support + Problembehandlung durch, und klicken Sie dann auf Serielle Konsole (Vorschau)Die serielle Konsole erfordert die Aktivierung der Special Administrative Console (SAC) innerhalb der Windows-VM. Wenn Sie SAC> in der Konsole nicht wie im folgenden Screenshot gezeigt sehen, gehen Sie zum Abschnitt "Wie installiere ich das Update mit Remote PowerShell" in diesem Artikel.

    Das Bild über SAC verbunden

  1. Geben Sie cmd ein, um einen Kanal mit einer CMD-Instanz zu starten.
  2. Geben Sie ch-si 1 ein, um zu dem Kanal zu wechseln, auf dem die CMD-Instanz ausgeführt wird. Es wird folgende Meldung angezeigt:

    Das Bild starten CMD in SAC
  3. Drücken Sie die EINGABETASTE, und geben Sie dann Ihre Anmeldeinformationen mit Administratorrechten ein.
  4. Nachdem Sie gültige Anmeldedaten eingegeben haben, öffnet sich die CMD-Instanz und Sie sehen den Befehl, mit dem Sie die Fehlersuche starten können.

    Das Bild über SAC CMD Abschnitt
  5. Um eine PowerShell-Instanz zu starten, geben Sie Folgendes ein:PowerShell.
  6. Führen Sie in der PowerShell-Instanz das Serielle-Konsole-Skript basierend auf dem VM-Betriebssystem aus. Dieses Skript bewirkt Folgendes: 
     
    • Erstellen Sie einen Ordner, in dem die Download-Datei gespeichert werden soll.
    • Laden Sie das Update herunter.
    • Installieren Sie das Update.
    • Fügen Sie den Sicherheitsschlüssel hinzu, damit sich nicht aktualisierte Clients mit der VM verbinden können.
    • VM neu starten

So installieren Sie dieses Update mithilfe von Remote PowerShell 

  1. Fügen Sie auf jedem Windows-basierten Computer, auf dem PowerShell installiert ist, die IP-Adresse der VM der Liste "vertrauenswürdig" in der Hostdatei wie folgt hinzu:
    Set-item wsman:\localhost\Client\TrustedHosts -value <IP>
  2. Konfigurieren Sie im Azure-Portal Netzwerksicherheitsgruppen auf der VM, um den Datenverkehr auf Port 5986 zuzulassen.
  3. Wählen Sie im Azure-Portal die Option Virtual Machine > <Ihre VM>, scrollen Sie nach unten zum Abschnitt BEDIENUNGKlicken Sie auf den Befehl Ausführen , und wählen Sie dann EnableRemotePS.
  4. Führen Sie auf dem Windows-basierten Computer das Remote PowerShell-Skript für die entsprechende Systemversion Ihrer VM aus. Dieses Skript bewirkt Folgendes:
    • Verbinden Sie sich mit der Remote PowerShell auf der VM.
    • Erstellen Sie einen Ordner, in dem die Download-Datei gespeichert werden soll.
    • Laden Sie das Credssp-Update herunter.
    • Installieren Sie das Update.
    • Setzen Sie den Registrierungsschlüssel für Sicherheitsrisiken so ein, dass nicht aktualisierte Clients eine Verbindung zur VM herstellen können.
    • Aktivieren Sie die serielle Konsole für eine künftige einfachere Fehlerbehebung.
    • Starten Sie die VM neu.

Problemumgehung


Szenario 1: Aktualisierte Clients können nicht mit nicht-aktualisierten Servern kommunizieren

Das häufigste Szenario ist, dass auf dem Client das CredSSP-Update installiert ist und die Richtlinieneinstellung Encryption Oracle-Abwehr keine unsichere RDP-Verbindung zu einem Server erlaubt, auf dem das CredSSP-Update nicht installiert ist.

Gehen Sie folgendermaßen vor, um das Problem zu umgehen:

  1. Führen Sie auf dem Client auf dem das CredSSP-Update installiert ist, gpedit.msc aus und wechseln Sie dann zu Computerkonfiguration>>Administrative Vorlagen>>System>> Berechtigungen übertragen im Navigationsbereich. 
  2. Ändern Sie die Richtlinie Encryption Oracle-Abwehr in Aktiviert, und ändern Sie dann den Schutzgrad in Vulnerable.

Wenn Sie gpedit.msc nicht verwenden können, können Sie die gleiche Änderung über die Registry wie folgt vornehmen:

  1. Öffnen Sie eine Eingabeaufforderung als Administrator.
  2. Führen Sie den folgenden Befehl aus, um einen Registry-Wert hinzuzufügen:
    REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters\ /v AllowEncryptionOracle /t REG_DWORD /d 2


Szenario 2: Nicht aktualisierte Clients können nicht mit gepatchten Servern kommunizieren.

Wenn auf der Azure-Windows-VM dieses Update installiert ist und nur noch Clients ohne Update akzeptiert werden, führen Sie die folgenden Schritte aus, um die Richtlinieneinstellung Encryption Oracle-Abwehr zu ändern:

  1. Fügen Sie auf jedem Windows-Computer, auf dem PowerShell installiert ist, die IP-Adresse der VM zur Liste "vertrauenswürdig" in der Hostdatei hinzu:
    Set-item wsman:\localhost\Client\TrustedHosts -value <IP>
  2. Gehen Sie zu Azure Portal, suchen Sie die VM, und aktualisieren Sie dann die Netzwerksicherheitsgruppe, um die PowerShell-Ports 5985 und 5986 zuzulassen.
  3. Stellen Sie auf dem Windows-Computer mithilfe von PowerShell eine Verbindung mit der VM her:
    Für HTTP:
    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck Enter-PSSession -ComputerName "<<Public IP>>" -port "5985" -Credential (Get-Credential) -SessionOption $Skip

    Für HTTPS:
    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck Enter-PSSession -ComputerName "<<Public IP>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
  4. Führen Sie den folgenden Befehl aus, um die Richtlinieneinstellung Encryption Oracle-Abwehr mithilfe der Registrierung zu ändern:
    Set-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -name "AllowEncryptionOracle" 2 -Type DWord

Skripte für die serielle Azure-Konsole


 

BS-Version

Skript

Windows 7 Service Pack 1/Windows Server 2008 R2 Service Pack 1

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows6.1-kb4103718-x64_c051268978faef39e21863a95ea2452ecbc0936d.msu"
$destination = "c:\temp\windows6.1-kb4103718-x64_c051268978faef39e21863a95ea2452ecbc0936d.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows6.1-KB4103718-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

Windows Server 2012

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/04/windows8-rt-kb4103730-x64_1f4ed396b8c411df9df1e6755da273525632e210.msu"
$destination = "c:\temp\windows8-rt-kb4103730-x64_1f4ed396b8c411df9df1e6755da273525632e210.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows8-RT-KB4103730-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

Windows 8.1/Windows Server 2012 R2

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows8.1-kb4103725-x64_cdf9b5a3be2fd4fc69bc23a617402e69004737d9.msu"
$destination = "c:\temp\windows8.1-kb4103725-x64_cdf9b5a3be2fd4fc69bc23a617402e69004737d9.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows8.1-KB4103725-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS1 - Windows 10 Version 1607 / Windows Server 2016

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows10.0-kb4103723-x64_2adf2ea2d09b3052d241c40ba55e89741121e07e.msu"
$destination = "c:\temp\windows10.0-kb4103723-x64_2adf2ea2d09b3052d241c40ba55e89741121e07e.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103723-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS2 - Windows 10 Version 1703

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103731-x64_209b6a1aa4080f1da0773d8515ff63b8eca55159.msu"
$destination = "c:\temp\windows10.0-kb4103731-x64_209b6a1aa4080f1da0773d8515ff63b8eca55159.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103731-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS3 - Windows 10 Version 1709 / Windows Server 2016 Version 1709

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103727-x64_c217e7d5e2efdf9ff8446871e509e96fdbb8cb99.msu"
$destination = "c:\temp\windows10.0-kb4103727-x64_c217e7d5e2efdf9ff8446871e509e96fdbb8cb99.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103727-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS4 - Windows 10 1803 / Windows Server 2016 Version 1803

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103721-x64_fcc746cd817e212ad32a5606b3db5a3333e030f8.msu"
$destination = "c:\temp\windows10.0-kb4103721-x64_fcc746cd817e212ad32a5606b3db5a3333e030f8.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103721-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

Remote PowerShell-Skripte


 

BS-Version

Skript

Windows 7 Service Pack 1/Windows Server 2008 R2 Service Pack 1

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows6.1-kb4103718-x64_c051268978faef39e21863a95ea2452ecbc0936d.msu"
$destination = "c:\temp\windows6.1-kb4103718-x64_c051268978faef39e21863a95ea2452ecbc0936d.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows6.1-KB4103718-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

Windows Server 2012

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/04/windows8-rt-kb4103730-x64_1f4ed396b8c411df9df1e6755da273525632e210.msu"
$destination = "c:\temp\windows8-rt-kb4103730-x64_1f4ed396b8c411df9df1e6755da273525632e210.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows8-RT-KB4103730-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

Windows 8.1/Windows Server 2012 R2

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows8.1-kb4103725-x64_cdf9b5a3be2fd4fc69bc23a617402e69004737d9.msu"
$destination = "c:\temp\windows8.1-kb4103725-x64_cdf9b5a3be2fd4fc69bc23a617402e69004737d9.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows8.1-KB4103725-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS1 - Windows 10 Version 1607 / Windows Server 2016

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/d/msdownload/update/software/secu/2018/05/windows10.0-kb4103723-x64_2adf2ea2d09b3052d241c40ba55e89741121e07e.msu"
$destination = "c:\temp\windows10.0-kb4103723-x64_2adf2ea2d09b3052d241c40ba55e89741121e07e.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103723-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS2 - Windows 10 Version 1703

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103731-x64_209b6a1aa4080f1da0773d8515ff63b8eca55159.msu"
$destination = "c:\temp\windows10.0-kb4103731-x64_209b6a1aa4080f1da0773d8515ff63b8eca55159.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103731-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS3 - Windows 10 Version 1709 / Windows Server 2016 Version 1709

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103727-x64_c217e7d5e2efdf9ff8446871e509e96fdbb8cb99.msu"
$destination = "c:\temp\windows10.0-kb4103727-x64_c217e7d5e2efdf9ff8446871e509e96fdbb8cb99.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103727-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f

RS4 - Windows 10 1803 / Windows Server 2016 Version 1803

#Set up your variables:
$subscriptionID = "<your subscription ID>"
$vmname = "<IP of your machine or FQDN>"
$PSPort = "5986" #change this variable if you customize HTTPS on powershell to another port

#​​​​Log in to your subscription
Add-AzureRmAccount
Select-AzureRmSubscription -SubscriptionID $subscriptionID
Set-AzureRmContext -SubscriptionID $subscriptionID

#Connect to Remote Powerwhell
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName $vmname -port $PSPort -Credential (Get-Credential) -useSSL -SessionOption $Skip

#Create a download location
md c:\temp

##Download the KB file
$source = "http://download.windowsupdate.com/c/msdownload/update/software/secu/2018/05/windows10.0-kb4103721-x64_fcc746cd817e212ad32a5606b3db5a3333e030f8.msu"
$destination = "c:\temp\windows10.0-kb4103721-x64_fcc746cd817e212ad32a5606b3db5a3333e030f8.msu"
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$destination)

#Install the KB
expand -F:* $destination C:\temp\
dism /ONLINE /add-package /packagepath:"c:\temp\Windows10.0-KB4103721-x64.cab"

#Add the vulnerability key to allow unpatched clients
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2

#Set up Azure Serial Console flags
cmd
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} bootems yes
bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200 

#Restart the VM to complete the installations/settings
shutdown /r /t 0 /f