When TrustWave's scanner flags your Windows 10 machine for CVE-2016-2183 (Sweet32), it's specifically targeting the TLS_RSA_WITH_3DES_EDE_CBC_SHA
cipher. This 64-bit block cipher is vulnerable to birthday attacks in TLS sessions. The paradox emerges when disabling this cipher breaks outgoing RDP connections to legacy systems while newer servers continue working.
The error chain reveals critical clues:
Client-side:
Event ID 36874: "A fatal error occurred while creating a TLS client credential. The internal error state is 10013."
Server-side:
Event ID 36888: "An TLS 1.2 connection request was received... none of the cipher suites supported by the client application are supported by the server"
Event ID 36874: "The following fatal alert was generated: 40. The internal error state is 1205."
The issue stems from incompatible cipher suite negotiation. While identical cipher configurations appear in IIS Crypto templates between working and non-working 2008 R2 servers, hidden differences exist in:
- Schannel security provider configurations
- Group Policy enforced cipher restrictions
- Windows Update level affecting protocol support
Option 1: Client-side Workaround (Temporary)
Create a conditional cipher enablement registry script:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168]
"Enabled"=dword:ffffffff
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168]
"Enabled"=dword:00000000
Run the first block before RDP sessions to legacy systems, then the second to re-disable afterwards.
Option 2: Server-side Fix (Permanent)
On target RDP hosts, enforce modern cipher prioritization via PowerShell:
# Enables AES256-SHA256 while keeping 3DES as fallback
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002'
-Name 'Functions' -Value 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA'
For enterprises using Group Policy:
- Create a custom ADMX template for Schannel settings
- Deploy cipher suite ordering through GPO
- Use WMI filters to target specific Windows versions
Example WMI filter for 2008 R2 servers:
SELECT * FROM Win32_OperatingSystem WHERE
(Caption LIKE "%2008 R2%") AND
(CSDVersion LIKE "%Service Pack 1%")
Test cipher negotiation using OpenSSL:
openssl s_client -connect rdphost:3389 -cipher "3DES"
Check actual TLS parameters with Wireshark filters:
tls.handshake.ciphersuite == 0x000a # For 3DES
tls.handshake.extension.type == "supported_groups"
For permanent resolution:
- Update all RDP hosts to at least Windows Server 2016
- Implement CredSSP or Restricted Admin mode
- Consider Azure Virtual Desktop for legacy system access
When hardening Windows 10 systems against the Sweet32 vulnerability (CVE-2016-2183), many administrators encounter a frustrating trade-off: disabling the vulnerable TLS_RSA_WITH_3DES_EDE_CBC_SHA
cipher breaks outgoing RDP connections to certain systems while leaving others functional. This behavior persists even when comparing seemingly identical server configurations.
The issue stems from how Windows negotiates RDP connections. Contrary to initial assumptions, the problem isn't always about missing cipher suites on the target server. Through packet analysis, we've identified these key scenarios:
// Sample Wireshark filter to analyze RDP handshake failures
rdp || tls.handshake.type == 1 || tls.handshake.type == 2
The connection failures typically occur when:
- Target servers have specific SCHANNEL configurations
- Group Policy enforces certain cryptographic providers
- Legacy RDP security layers are enabled
Client-Side Configuration
Instead of completely disabling 3DES, implement prioritized cipher suite ordering:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002]
"Functions"="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_3DES_EDE_CBC_SHA"
Server-Side Compatibility Fixes
For problematic target servers, ensure these settings:
# PowerShell to check RDP security layer configuration
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" |
Select-Object SecurityLayer, UserAuthentication
Recommended server configuration values:
- SecurityLayer: 1 (Negotiate) or 2 (SSL)
- UserAuthentication: 1 (Required)
When encountering the "internal error state is 10013" message, verify these registry keys on both client and server:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
For mixed environments, consider implementing a staged approach:
- First upgrade all servers to support AES-based ciphers
- Then disable 3DES on clients
- Finally disable 3DES on servers
When dealing with systems that can't be immediately upgraded, implement these workarounds:
# Temporary RDP connection script with fallback
$targets = @("server1","server2","server3")
foreach ($server in $targets) {
try {
mstsc /v:$server /admin /f
}
catch {
# Enable legacy cipher temporarily
reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" /v Functions /t REG_SZ /d "TLS_RSA_WITH_3DES_EDE_CBC_SHA" /f
mstsc /v:$server /admin /f
# Restore secure configuration
.\Set-CipherOrder.ps1 -RevertToDefault
}
}