Souhrn
Chybou umožňující zpřístupnění informací existuje v protokol Transport Layer Security a protokol SSL (Secure Sockets Layer) protocol (protokol TLS/SSL), jak je implementováno v součást Microsoft rozhraní.NET Framework. Útočník, který úspěšně zneužije tuto chybu zabezpečení, může dešifrovat šifrovaný přenos TLS/SSL.
Tuto chybu zabezpečení zneužít, by nejprve musel založit nešifrovaných data do kanálu zabezpečení a poté proveďte útoku man-in-the-middle (MiTM) mezi cílové klienta a oprávněný server. Tato aktualizace řeší uvedenou chybu zabezpečení změnou způsobu, jakým součást .NET odešle a přijme šifrované síťové pakety.
Tuto chybu zabezpečení je vyřešen jako součást bulletinu zabezpečení společnosti Microsoft MS16-065. Tato aktualizace mění způsob, že součást rozhraní.NET Framework odesílá a přijímá pakety šifrované sítě.
Následující tabulka obsahuje odkazy na standardní položku pro každou chybu v seznamu známých chyb zabezpečení a ohrožení pod.
Název chyby |
Číslo CVE |
Veřejně známá |
Zneužití |
---|---|---|---|
Chyba zabezpečení umožňující umísťování falešného obsahu TLS/SSL |
Ano |
Ne |
Překlad zabezpečení
Změny zavedené v Bulletin zabezpečení společnosti Microsoft MS16-065 způsobí, že první záznam protokolu TLS po handshake, které má být rozděleno. To způsobí, že SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient a HttpClient (je-li založena na HttpWebRequest) datovým proudům vysílaným vrátí jeden bajt pro první čtení ihned následovány bajty zbývající (n-1) v následné čtení. Tato změna chování dochází pouze u aplikací, které používají protokol TLS 1.0 + Cipher Block Chaining, ale není při použití TLS 1.1 nebo TLS 1.2.
Poznámka: Jako předpoklad je nutné nainstalovat Bulletin zabezpečení MS12-006 , chcete-li povolit tuto aktualizaci.
Tato změna může způsobit některé aplikace založené na rozhraní.NET Framework do konce. Tento článek popisuje dva přístupy, které lze použít k aktualizaci aplikace pracovat správně po instalaci bulletinu zabezpečení společnosti Microsoft MS16-065.
Skutečnosti snižující závažnost rizika pro problémy s kompatibilitou
Možnost 1: Přepínač protokolu TLS 1.2
Tato možnost způsobí, že aplikace pomocí úpravy registru nebo Programová konfigurace protokolu verze protokolu TLS 1.2.
-
Úpravy registru
Důležité
Pečlivě postupujte podle pokynů v této části. Při nesprávné úpravě registru může dojít k vážným problémům. Před tím, než jej změníte, Zálohování registru pro obnovení v případě dojít k problémům.
Rozhraní.NET Framework 4.0 a rozhraní.NET Framework 4.5.x aplikací, které běží na rozhraní .NET Framework 4.5 a novější verze můžete přepnout výchozí protokol TLS 1.2, TLS 1.1 a TLS 1.0 povolením klíče registru SchUseStrongCrypto . Tento klíč registru je popsána v části Doporučené postupy v tématu Microsoft zabezpečení poradní 2960358 na webu Microsoft TechNet.
Důležité: Tato změna registru bude fungovat, pouze pokud jsou splněny následující podmínky:-
Aplikace, které používají rozhraní API založené Třída ServicePointManager ServicePointManager.SecurityProtocol hodnoty jsou nastavení explicitně . Mezi tyto třídy patří System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequesta System.Net.Mail.SmtpClient. Nastavení v kódu ServicePointManager.SecurityProtocol přednost registru.
-
Aplikace používají SslStream AuthenticateAsClient(String) přetížení.
-
-
Programově konfigurovat protokol verze
Rozhraní.NET Framework 4.0 a 4.5 aplikací, které běží na rozhraní .NET Framework 4.5 a novější verze a které používají SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) přetížení musí být překompilován, určení SslProtocols.Tls12, SslProtocols.Tls11a SslProtocols.Tls jako třetí parametr. Úplný popis použití SslStream třídy naleznete v tématu SslStream třídy na webu Microsoft Developer (MSDN).
Poznámka: Rozhraní.NET Framework 4.6 a novější verze použít jako výchozí protokol TLS 1.2, TLS 1.1 a TLS 1.0. Je popsán v tématu Microsoft zabezpečení poradní 2960358 na webu Microsoft TechNet.
Možnost 2: Zpracování rozdělit pakety
Tato aktualizace způsobí, že jeden záznam má být rozděleno do více záznamů. Proto pokud aplikace očekává dokončení záznamu je k dispozici v jediné volání pro čtení , tyto aplikace mohou být přerušeny. Ujistěte se, že se aplikace chová správně, ověřte, že aplikace zpracovává pakety rozdělit správně provedením volání Stream.Read . Můžete ukázkový kód k dispozici zde jako odkaz pro řešení aplikace správně provádět volání pro čtení .
Ukázka požadavku HTTP, který zobrazuje rozdíl v chování před (s zmírnění) a po (bez omezení) byly nainstalovány aktualizace 3147461 a 3147458 , naleznete v části "Další informace".
Kompletní příklad, metoda Stream.Read naleznete v tématu Metoda Stream.Read (Byte [], Int32, Int32) na webu Microsoft Developer (MSDN).
Zástupná řešení pro problémy s kompatibilitou aplikací
Upozornění: Tato zástupná řešení může provádět v počítači nebo síti zranitelnější vůči útoku uživatelů se zlými úmysly nebo škodlivému softwaru, například virům. Jsme nedoporučujeme tato zástupná řešení, ale poskytujeme tyto informace, takže můžete tato zástupná řešení implementovat podle vlastního uvážení. Tato zástupná řešení slouží na vlastní nebezpečí.
Metoda 1: Aktualizovat klíče registru (k dispozici pro všechny verze rozhraní.NET Framework)
Zakázat SCH_SEND_AUX_RECORD strukturu (globálně)
Zakázat SCH_SEND_AUX_RECORD struktury pro jednotlivé aplikace
Zakázat SCH_SEND_AUX_RECORD strukturu (globálně)
Pro všechny aplikace přidejte následující podklíč registru:
Umístění v registru: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number >
Název hodnoty DWORD: SchSendAuxRecord
Údaj hodnoty: 0
Poznámka: Zástupný symbol < version_number > je v4.0.30319 nebo v2.0.50727, v závislosti na verzi.
Pro 32bitové aplikace spouštěné v 64bitových počítačích také přidáte následující podklíč registru:
Umístění v registru: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number >
Název hodnoty DWORD: SchSendAuxRecord
Údaj hodnoty: 0
Poznámka: Zástupný symbol < version_number > je v4.0.30319 nebo v2.0.50727, v závislosti na verzi.
Jak potíže obejít
Dočasné zakázání režimu zabezpečení popsané v tomto článku, klepněte na příslušný odkaz ke stažení souboru s příponou REG a pak poklepejte na soubor REG stažené změny registru.
Pro aplikace Microsoft.NET Framework 3.5 zaměření:
Stáhněte soubor ManualOptOutSchSendAuxRecord20.reg.
Aplikace cílení na Microsoft rozhraní.NET Framework 4.0 a novější verze:
Stáhněte soubor ManualOptOutSchSendAuxRecord40.reg.
Znovu povolit režim zabezpečení popsané v tomto článku, klepněte na příslušný odkaz ke stažení souboru s příponou REG a pak poklepejte na soubor REG stažené změny registru.
Pro aplikace Microsoft.NET Framework 3.5 zaměření:
Stáhněte soubor ManualOptInSchSendAuxRecord20.reg.
Aplikace cílení na Microsoft rozhraní.NET Framework 4.0 a novější verze:
Stáhněte soubor ManualOptInSchSendAuxRecord40.reg.
Pro více informací o tom, jak stahovat soubory podpory společnosti Microsoft, klepněte na následující číslo článku v databázi Microsoft Knowledge Base:
119591 jak získat soubory podpory společnosti Microsoft ze serverů služeb onlineMicrosoft zkontroloval tento soubor na přítomnost virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici k datu, kdy byl soubor vydán. Soubor je uložen na zabezpečených serverech, které pomáhají zabránit neoprávněným změnám v souboru.
Zakázat SCH_SEND_AUX_RECORD struktury pro jednotlivé aplikace
Pro všechny aplikace přidejte následující podklíč registru:
Umístění v registru: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
Název hodnoty DWORD: Úplná cesta k .exe aplikaci (například C:\MyApp\MyApp.exe)
Údaj hodnoty: 0
Poznámka: Zástupný symbol < version_number > je v4.0.30319 nebo v2.0.50727, v závislosti na verzi.
Pro 32bitové aplikace spouštěné v 64bitových počítačích také přidáte následující podklíč registru:
Umístění v registru: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
Název hodnoty DWORD: Úplná cesta k .exe aplikaci (například C:\MyApp\MyApp.exe)
Údaj hodnoty: 0 (jediná platná hodnota je 0. Všechny ostatní hodnoty budou ignorovány.)
Poznámka: Zástupný symbol < version_number > je v4.0.30319 nebo v2.0.50727, v závislosti na verzi.
Metoda 2: Změňte konfiguraci na úrovni aplikace (k dispozici pouze pro verze rozhraní.NET Framework 4.6 a novější verze)
Počínaje 4.6 rozhraní.NET Framework, můžete změnit konfiguraci na úrovni aplikace pomocí kódu nebo použití konfigurace nebo změnit registr.
4.6 rozhraní.NET Framework můžete nastavení přepínače pomocí některé z následujících metod. Tyto příklady zakázat funkci zabezpečení.
-
Programově
První věcí, kterou by měl provést aplikace je spuštěna následující kód. Je to proto, že bod služby bude inicializovat pouze jednou.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Konfigurace aplikace
Chcete-li změnit konfiguraci aplikace, přidejte následující položku:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Klíč registru (počítač globální)
Umístění v registru: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Hodnoty: Switch.System.Net.DontEnableSchSendAuxRecord
Typ: Řetězec
Hodnoty: PRAVDA
Poznámka: Switch.System.Net.DontEnableSchSendAuxRecord = False pro všechny aplikace.
Další informace
Následuje vzor komunikace klient-Server vzorku před a po instalaci této aktualizace. Tyto informace jsou poskytovány pro ilustraci k identifikaci rozbití jakékoli aplikace je instalace této opravy.
Bez řešení |
S zmírnění |
---|---|
[Server] čekání na připojení (127.0.0.1:4431) |
[Server] čekání na připojení (127.0.0.1:4431) |