Jak w IIS załatać lukę w zabezpieczeniach POODLE SSL 3.0 (CVE-2014-3566)?

53

Jak załatać CVE-2014-3566 w systemie Windows Server 2012 z uruchomionymi usługami IIS?

Czy w Windows Update jest łatka, czy muszę wprowadzić zmiany w rejestrze, aby wyłączyć SSL 3.0 ?

Eric Lathrop
źródło
1
Istnieje Microsoft Fix it 50495 na stronie MS KB, z którą się łączysz.
MattBianco
3
Próbowałem uruchomić Fix it 50495 w systemie Windows 2008 i nie powiodło się z błędem „Ta poprawka Microsoft nie dotyczy systemu operacyjnego ani wersji aplikacji”. No cóż.
Josh

Odpowiedzi:

58

Nie ma „łatki”. Jest to luka w protokole, a nie błąd w implementacji.

W systemie Windows Server 2003 do 2012 R2 protokoły SSL / TLS są kontrolowane przez flagi w rejestrze ustawione na HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols.

Aby wyłączyć protokół SSLv3, którego dotyczy luka POODLE, utwórz podklucz w powyższej lokalizacji (jeśli jeszcze go nie ma) o nazwie, SSL 3.0a pod nim podklucz o nazwie Server(jeśli jeszcze nie jest obecny). W tej lokalizacji ( HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0\Server) utwórz wartość DWORD o nazwie Enabledi pozostaw ją ustawioną na 0.

Wyłączanie protokołu SSL 2.0, które należy również wykonać, odbywa się w ten sam sposób, z tym wyjątkiem, że będziesz używać klucza o nazwie SSL 2.0podanej powyżej w rejestrze.

Nie przetestowałem wszystkich wersji, ale myślę, że prawdopodobnie bezpiecznie jest założyć, że ponowne uruchomienie jest konieczne, aby ta zmiana zaczęła obowiązywać.

Evan Anderson
źródło
3
ponowne uruchomienie komputera nie jest konieczne przynajmniej w systemie Windows Server 2012. możesz zweryfikować przed i po w witrynie poodlebleed.com , wpisując swój adres URL i numer 443 dla portu SSL
Simon
Dzięki, czy wiesz, czy powinienem również wyłączyć PCT, ponieważ jest rzekomo wyłączony domyślnie, a jednak nie wyłączony w ten sposób?
Mark Broadhurst,
@ Simon, czy jest coś jeszcze, co musisz zrobić, aby zmiany odniosły skutek? Właśnie dokonałem aktualizacji rejestru na komputerze z serwerem Server 2012, ale wciąż pojawia się informacja, że ​​protokół SSL3 jest włączony.
Abe Miessler,
Nie wierzę w to. Zakładam, że używasz iis i mojego Apache i sprawdziłeś, czy korzystasz z tej strony. I jesteś pewien, że masz dokładnie odpowiedni klucz rejestru?
Simon
* NIE apache (nie wiem, skąd pochodzi „mój Apache”!)
Simon
24

Dla ułatwienia instalacji wyprowadziłem ten plik „wyłącz ssl 2 i 3.reg” z odpowiedzi Evana powyżej :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000
Eric Lathrop
źródło
12

PowerShell do wyłączania SSL2 i SSL3:

2..3 | %{ New-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL $_.0\Server" -Name Enabled -PropertyType "DWORD" -Value 0 -Force }
Wasilij Syrakis
źródło
Niestety powyższe działa tylko wtedy, gdy podklucze rejestru są już obecne. Byłoby miło zobaczyć PS, który może je utworzyć, jeśli nie istnieje, lub zaktualizować, jeśli tak jest.
Jaans
Jesteś pewny? Mój tworzy je dla mnie. Może się różnić w niższych wersjach Powershell i Windows (używam v2 na Server 2008 R2)
Vasili Syrakis,
2
Tak ... patrz zrzut ekranu przesłany na: i.imgur.com/rctFH4D.png Korzystanie z PS 3.0 i WSMan 3.0.
Jaans
8

Oto PowerShell, który przetestuje obecność kluczy rejestru, w razie potrzeby utwórz je, a następnie wprowadź niezbędne wartości, aby wyłączyć SSL 2.0 i SSL 3.0

$regPath1 = 'HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 2.0'
$regPath2 = 'HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 2.0\Server'
$regPath3 = 'HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0'
$regPath4 = 'HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\SSL 3.0\Server'


If(!(Test-Path -Path $regPath1))
{
New-Item -Path $regPath1 -Force
}

If(!(Test-Path $regPath2))
{
New-Item -Path $regPath2 -Force
}
   New-ItemProperty -Path $regPath2 -Name DisabledByDefault -PropertyType DWORD -Value "1" -Force
   New-ItemProperty -Path $regPath2 -Name Enabled -PropertyType DWORD -Value "0" -Force 

If(!(Test-Path $regPath3))
{
New-Item -Path $regPath3 -Force
}

If(!(Test-Path $regPath4))
{
New-Item -Path $regPath4 -Force
}
   New-ItemProperty -Path $regPath4 -Name DisabledByDefault -PropertyType DWORD -Value "1" -Force
   New-ItemProperty -Path $regPath4 -Name Enabled -PropertyType DWORD -Value "0" -Force

Można to wdrożyć za pomocą SCCM lub wiersza poleceń - po prostu uruchom zadanie SCCM lub wiersz poleceń jako Administrator. Niektóre witryny z informacjami o rejestrze wskazują, że po utworzeniu i / lub modyfikacji kluczy rejestru konieczne jest ponowne uruchomienie komputera.

Kazi
źródło
4

Lub pobierz kopię IISCrypto i kliknij przycisk najlepszych praktyk, następnie odznacz SSL 3.0, a następnie zastosuj, a następnie uruchom ponownie

Tomek
źródło
3

Nie musisz wyłączać SSL3. Możesz włączyć SSL3 i zminimalizować POODLE .

# Copy and paste this in PowerShell then restart your server
$cipherSuitesOrder = @(
    'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256',
    'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384',
    'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256',
    'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384',
    'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256',
    'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384',
    'TLS_RSA_WITH_AES_128_CBC_SHA256',
    'TLS_RSA_WITH_AES_128_CBC_SHA',
    'TLS_RSA_WITH_AES_256_CBC_SHA256',
    'TLS_RSA_WITH_AES_256_CBC_SHA',
    'TLS_RSA_WITH_RC4_128_SHA',
    'TLS_RSA_WITH_3DES_EDE_CBC_SHA',
    'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256',
    'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256',
    'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384',
    'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384',
    'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256',
    'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384',
    'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256',
    'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384'
)
$cipherSuitesAsString = [string]::join(',', $cipherSuitesOrder)
New-ItemProperty -path 'HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002' \
-name 'Functions' -value $cipherSuitesAsString -PropertyType 'String' -Force | Out-Null

Przy tych ustawieniach nadal będziesz mieć obsługę IE6 (z SSLv3 przy użyciu RC4) i masz więcej niż akceptowalną pod względem bezpieczeństwa konfigurację. Tylko IE6 i naprawdę stary klient używałyby szyfrów SSLv3 lub RC4.

Angel Abad Cerdeira
źródło
3

Istnieje dobry skrypt PowerShell, który pomaga w konfiguracji IIS 7.5 i 8:

Ten skrypt PowerShell konfiguruje serwer Microsoft Internet Information Server 7.5 i 8.0 (IIS) do obsługi protokołu TLS 1.1 i TLS 1.2 z zachowaniem tajemnicy przekazywania. Ponadto zwiększa bezpieczeństwo połączeń SSL, wyłączając niezabezpieczone SSL2 i SSL3 oraz wszystkie niepewne i słabe szyfry, które może spowodować awaria przeglądarki. Ten skrypt implementuje obecne zasady najlepszych praktyk.

https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12

David Thomas
źródło
Hmm, nie jestem pewien, dlaczego to zostało odrzucone. Sam skorzystałem z tego narzędzia i działa ono idealnie.
David Thomas
Wygląda to dobrze, ale przynajmniej jeden facet miał problemy po uruchomieniu - nie wiem, czy jest izolowany, widząc, jak inni mówią, że jest świetny.
Mark