MS16-065: Opis luka w zabezpieczeniach ujawnienie informacji protokołu TLS/SSL (CVE-2016-0149): 10 maja 2016

WAŻNE: Ten artykuł został przetłumaczony przy użyciu oprogramowania firmy Microsoft do tłumaczenia maszynowego i może być poprawiony przy użyciu technologii Community Translation Framework (CTF). Firma Microsoft udostępnia artykuły tłumaczone maszynowo, poprawione przez społeczność, a także tłumaczone przez tłumaczy profesjonalnych, aby zapewnić dostęp do wszystkich artykułów w bazie wiedzy w wielu językach. Artykuły tłumaczone maszynowo i poprawione mogą zawierać błędy pisowni, składniowe i gramatyczne. Firma Microsoft nie ponosi odpowiedzialności za żadne nieścisłości, błędy ani szkody spowodowane przez niepoprawne tłumaczenia zawartości ani przez korzystanie z niej przez klientów. Więcej o strukturze CTF: http://support.microsoft.com/gp/machine-translation-corrections/pl.

Anglojęzyczna wersja tego artykułu to: 3155464
Streszczenie
Usterka umożliwiająca ujawnienie informacji istnieje protokołu Transport Layer Security i protokołu Secure Sockets Layer (TLS/SSL) zaimplementowanego w składniku szyfrowania systemu.NET Framework firmy Microsoft. Osoba atakująca, której uda się wykorzystać tę lukę, może odszyfrować zaszyfrowanego ruchu protokołu TLS/SSL.

Aby wykorzystać tę lukę, osoba atakująca najpierw musi wstrzyknąć nieszyfrowane dane do bezpiecznego kanału, a następnie przeprowadzić atak man-in--middle (MiTM) między klientem ukierunkowane i legalny serwer. Ta aktualizacja usuwa lukę, zmieniając sposób, że składnik szyfrowania .NET wysyła i odbiera pakiety sieciowe zaszyfrowane.

Ta usterka jest ustalona w ramach Biuletyn zabezpieczeń firmy Microsoft MS16-065. Ta aktualizacja zmienia sposób, że składnik szyfrowania.NET Framework wysyła i odbiera pakiety sieciowe zaszyfrowane.

Poniższa tabela zawiera łącza do standardowy wpis dla każdej luki na liście znanych luk i zagrożeń.

Luki w zabezpieczeniach tytułNumer CVEUjawnione publicznieWykorzystana
Luka związana z fałszowaniem TLS/SSLCVE-2016-0149TakNie

Luki w zabezpieczeniach rozdzielczość

Zmiana wprowadzona w Biuletyn zabezpieczeń firmy Microsoft MS16-065 przyczyny TLS pierwszy zapis po handshake do podziału. Powoduje to, że SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient i HttpClient (tam, gdzie w oparciu o HttpWebRequest) strumieni zwraca pojedynczy bajt dla pierwszego odczytu, bezpośrednio po nim bajtów odpoczynku (n-1) w kolejne odczyty. Ta zmiana zachowanie występuje tylko aplikacje używające TLS 1.0 + Cipher Block Chaining, ale nie używający protokołu TLS 1.1 lub TLS 1.2.

Uwaga: Jako warunek wstępny należy zainstalować Biuletyn zabezpieczeń firmy Microsoft MS12-006 Aby włączyć tę aktualizację.

Ta zmiana może spowodować niektóre aplikacje, które są oparte na.NET Framework do dzielenia. W tym artykule opisano dwie metody, który umożliwia zaktualizowanie aplikacji działał poprawnie, po zastosowaniu Biuletyn zabezpieczeń firmy Microsoft MS16-065.

Czynniki ograniczające zagrożenie w przypadku problemów ze zgodnością

Opcja 1: Przełącznik do protokołu TLS 1.2

Ta opcja sprawia, że korzystają z protokołu TLS 1.2 przez modyfikację rejestru lub programowo Konfigurowanie protokołu wersji aplikacji.
  • Modyfikacja rejestru

    Ważne: Uważnie należy wykonać kroki opisane w tej sekcji. Niepoprawne zmodyfikowanie rejestru może spowodować poważne problemy. Przed przystąpieniem do modyfikacji, wykonać kopię zapasową rejestru w celu przywrócenia w przypadku, gdy wystąpią problemy.

    .NET Framework 4.0 i aplikacji 4.5.x.NET Framework, które są uruchomione w programie.NET Framework 4.5 i nowszych wersjach można włączyć domyślny protokół TLS 1.2, TLS 1.1 i TLS 1.0 przez włączenie klucza rejestru SchUseStrongCrypto . Ten klucz rejestru jest omówiona w sekcji Zalecane czynnościMicrosoft Security 2960358 Doradczy temat w witrynie sieci Web Microsoft TechNet.

    Ważne: Tę zmianę rejestru będzie działać tylko, jeśli są spełnione następujące warunki:
    • Ustawienie nie są aplikacje korzystające z interfejsów API opartych na ServicePointManager ServicePointManager.SecurityProtocol wartości w sposób jawny. Przykładami takich klas System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequesti System.NET.mail.smtpclienti. Ustawienie ServicePointManager.SecurityProtocol w kodzie ma pierwszeństwo przed rejestru.
    • Aplikacje korzystają z SslStream AuthenticateAsClient(String) przeciążenie.

  • Konfigurować programowo wersja protokołu

    .NET Framework 4.0 i 4,5 aplikacje z systemem.NET Framework 4.5 i nowsze wersje, które używają SslStream AuthenticateAsClient(String,X509CertificateCollection,SslProtocols,Boolean) przeciążenie musi być ponownie skompilowana, określając SslProtocols.Tls12, SslProtocols.Tls11i SslProtocols.Tls jako trzeciego parametru. Aby uzyskać pełny opis sposobu korzystania z klasy SslStream, zobacz Klasa SslStream temat w witrynie Microsoft Developer (MSDN).

    Uwaga: 4.6.NET Framework i nowszych wersjach stosowane TLS 1.2, TLS 1.1 i TLS 1.0 jako domyślne protokołu. Jest to omówione w Microsoft Security 2960358 Doradczy temat w witrynie sieci Web Microsoft TechNet.

Opcja 2: Uchwyt podzielić pakietów

Ta aktualizacja powoduje, że jeden rekord, aby podzielić na wiele rekordów. W związku z tym jeśli aplikacja oczekuje kompletny zapis ma być dostępny w jednym wywołaniu odczytu , takie aplikacje mogą przerwać. Aby upewnić się, czy aplikacja działa poprawnie, sprawdź, czy aplikacja obsługuje pakiety split wykonując wywołanie Stream.Read poprawnie. Można użyć przykładowego kodu dostępne w tym miejscu jako punkt odniesienia dla jak naprawić aplikację do prawidłowego wykonywania odczytu wywołanie.

Dla próbki żądania HTTP, które pokazuje różnicę w zachowaniu przed (z ograniczenia zagrożenia) i po (bez ograniczenia) aktualizacje 3147461 i 3147458 zostały zainstalowane, zobacz sekcję "Więcej informacji".

Na przykład pełną metody Stream.Read , zobacz Metoda Stream.Read (Byte[],Int32,Int32) temat w witrynie Microsoft Developer (MSDN).

Obejścia problemu ze zgodnością aplikacji

Ostrzeżenie: Rozwiązania te mogą narazić komputer lub sieć na większe zagrożenie, na ataki złośliwych użytkowników lub złośliwego oprogramowania, takiego jak wirusy. Firma Microsoft nie zaleca następujące obejścia, ale podaje te informacje, aby rozwiązania te można zaimplementować według własnego uznania. Rozwiązania te należy używać na własną odpowiedzialność.

Metoda 1: Aktualizowanie kluczy rejestru (dostępne dla wszystkich wersji systemu.NET Framework)



Wyłącz struktura SCH_SEND_AUX_RECORD (globalnie)
Dla wszystkich aplikacji należy dodać następujący podklucz rejestru:
Lokalizacji w rejestrze:
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>

Nazwa DWORD: SchSendAuxRecord
Dane wartości: 0

Uwaga: Symbol zastępczy <version_number>jest v4.0.30319 lub v2.0.50727, w zależności od wersji.

W przypadku 32-bitowych aplikacji uruchamianych na komputerach 64-bitowych należy również dodać następujący podklucz rejestru:
</version_number>
Lokalizacji w rejestrze:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>

Nazwa DWORD: SchSendAuxRecord
Dane wartości: 0

Uwaga: Symbol zastępczy <version_number>jest v4.0.30319 lub v2.0.50727, w zależności od wersji.

</version_number>
Obejście problemu
Aby tymczasowo wyłączyć tryb bezpieczny, opisane w tym artykule, kliknij odpowiednie łącze, aby pobrać plik .reg, a następnie kliknij dwukrotnie plik .reg pobrane o dokonanie zmian w rejestrze.

Dla aplikacji.NET Framework firmy Microsoft 3,5-określanie wartości docelowej:

Dla aplikacji kierowanie.NET Framework firmy Microsoft 4.0 i nowsze wersje:

Aby ponownie włączyć tryb bezpieczny, opisane w tym artykule, kliknij odpowiednie łącze, aby pobrać plik .reg, a następnie kliknij dwukrotnie plik .reg pobrane o dokonanie zmian w rejestrze.

Dla aplikacji.NET Framework firmy Microsoft 3,5-określanie wartości docelowej:

Dla aplikacji kierowanie.NET Framework firmy Microsoft 4.0 i nowsze wersje:

Aby uzyskać więcej informacji dotyczących sposobu pobierania plików pomocy technicznej firmy Microsoft, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
119591 Jak uzyskać pliki pomocy technicznej Microsoft w usługach online
Firma Microsoft przeskanowała plik w poszukiwaniu wirusów. Firma Microsoft użyła najnowszego oprogramowania do wykrywania wirusów, które było dostępne w dniu opublikowania pliku. Plik jest przechowywany na serwerach o podwyższonych zabezpieczeniach, które uniemożliwiają nieautoryzowane zmiany w pliku.


Wyłącz SCH_SEND_AUX_RECORD struktury dla poszczególnych aplikacji
Dla wszystkich aplikacji należy dodać następujący podklucz rejestru:
Lokalizacji w rejestrze:
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord

Nazwa DWORD: Pełna ścieżka dla .exe aplikacji (na przykład C:\MyApp\MyApp.exe)
Dane wartości: 0

Uwaga: Symbol zastępczy <version_number>jest v4.0.30319 lub v2.0.50727, w zależności od wersji.

W przypadku 32-bitowych aplikacji uruchamianych na komputerach 64-bitowych należy również dodać następujący podklucz rejestru:
</version_number>
Lokalizacji w rejestrze:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord

Nazwa DWORD: Pełna ścieżka dla .exe aplikacji (na przykład C:\MyApp\MyApp.exe)
Dane wartości: 0 (jedyną prawidłową wartością jest 0. Jakakolwiek inna wartość będą ignorowane.)

Uwaga: Symbol zastępczy <version_number>jest v4.0.30319 lub v2.0.50727, w zależności od wersji.

</version_number>

Metoda 2: Zmień konfigurację na poziomie aplikacji (dostępne tylko dla.NET Framework w wersji 4.6 i nowsze wersje)

Począwszy od 4.6.NET Framework, można zmienić konfigurację na poziomie aplikacji za pomocą kodu lub stosowania zmian konfiguracji lub rejestru.

W pkt 4.6.NET Framework przełącznik można ustawić za pomocą dowolnej z następujących metod. Przykłady te wyłączenia funkcji zabezpieczeń.
  • Programowo

    Pierwszą rzeczą, którą należy zrobić aplikacji jest uruchomiony zostanie poniższy kod. Jest to spowodowane Service Manager punkt zostanie zainicjowany tylko jeden raz.
    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord"; AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true);
  • Konfiguracja aplikacji

    Do zmiany konfiguracji aplikacji, należy dodać następujący wpis:
    <runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/></runtime>
  • Klucz rejestru (komputer globalne)

    Lokalizacje rejestru:
    HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AppContext
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\AppContext

    Wartość: Switch.System.Net.DontEnableSchSendAuxRecord
    Typ: Ciąg znaków
    Wartość: PRAWDA

    Uwaga: Switch.System.Net.DontEnableSchSendAuxRecord = False dla wszystkich aplikacji.
Więcej informacji
Poniżej przedstawiono przykładowe wzorzec komunikacji klient/serwer przed i po zainstalowaniu tej aktualizacji. Informacje te podane są jako ilustracja identyfikowania awaria aplikacji z powodu instalacji tej poprawki.

Bez ograniczenia zagrożeniaZ ograniczenia zagrożenia
[Serwer] oczekiwanie na połączenia (127.0.0.1:4431)
[Klient] Nawiązywanie połączenia z localhost:4431
[Serwer] Klient jest podłączony.
[Klient] Połączony. Trwa uwierzytelnianie...
[Serwer] Klient został uwierzytelniony.
[Klient] Wysyłanie żądania (94 bajtów)
[Klient] Trwa oczekiwanie na odpowiedź...

[Serwer] 94 bajtów odebranych:<GET></GET>
Host: contoso.com
Agent użytkownika: Testowanie aplikacji

>>>
[Serwer] Odpowiedział z 476 bajtów.

[Client bajtów 1: 476] Odpowiedź:<HTTP .1="" 200=""></HTTP>

>>>>>
[Serwer] oczekiwanie na połączenia (127.0.0.1:4431)
[Klient] Nawiązywanie połączenia z localhost:4431
[Serwer] Klient jest podłączony.
[Klient] Połączony. Trwa uwierzytelnianie...
[Serwer] Klient został uwierzytelniony.
[Klient] Wysyłanie żądania (94 bajtów)
[Klient] Trwa oczekiwanie na odpowiedź...
[Serwer] Odebrane bajty 1: <G>>><b00> </b00> </G>
[Serwer] Odebrane bajty 93:<ET></ET>
Host: contoso.com
Agent użytkownika: Testowanie aplikacji

>>>
[Serwer] Odpowiedział z 476 bajtów.
[Client bajtów 1: 1] Odpowiedź: <H>>>><b00> </b00> </H>
[Client bajtów 2: 475] Odpowiedź:<TTP .1="" 200=""></TTP>

>>>>>

Ostrzeżenie: ten artykuł przetłumaczono automatycznie

Właściwości

Identyfikator artykułu: 3155464 — ostatni przegląd: 05/10/2016 22:01:00 — zmiana: 1.0

Microsoft .NET Framework 4.6.1, Microsoft .NET Framework 4.6, Microsoft .NET Framework 4.5.2, Microsoft .NET Framework 3.5.1, Microsoft .NET Framework 3.5, Microsoft .NET Framework 2.0 Service Pack 2

  • kbsecvulnerability kbsecurity kbsecbulletin kbfix kbexpertiseinter kbbug atdownload kbmt KB3155464 KbMtpl
Opinia