Rezumat
O vulnerabilitate de dezvăluire informații există în Protocolul de Transport Layer Security și protocolul Secure Sockets Layer (TLS/SSL), implementat în componenta de criptare Microsoft .NET Framework. Un atacator care speculează cu succes acest element vulnerabil poate decripta criptate traficul TLS/SSL.
Pentru vulnerabilitatea de exploit, un atacator ar trebui mai întâi să injecta nonencrypted date canal de securitate și apoi efectuați un om în mijlocul (MiTM) atac între clientul cu țintă și un server legitime. Această actualizare rezolvă o vulnerabilitate modificând modul în care componenta de criptare .NET trimite şi primește pachete de rețea criptat.
Această vulnerabilitate este stabilită ca parte a Microsoft buletinul de securitate MS16-065. Această actualizare schimbă modul în care componenta .NET Framework criptare trimite și primește criptat rețea pachete.
Următorul tabel conține linkuri către intrarea standard pentru fiecare vulnerabilitate în lista de vulnerabilități comune și expunerile.
Titlu de vulnerabilitate |
Număr CVE |
Publicului |
Exploatată |
---|---|---|---|
Vulnerabilitate Spoofing TLS/SSL |
da |
Nu |
Vulnerabilitate rezolvare
Modificarea introdusă în Microsoft buletinul de securitate MS16-065 face prima înregistrare TLS după handshake să fie împărţit. Acest lucru provoacă SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient și HttpClient (în cazul în care se bazează pe HttpWebRequest) fluxuri pentru a returna un singur octet pentru citire primul, urmat imediat de octeți de repaus (n-1) în Citeşte succesive. Această modificare de comportament se produce numai pentru aplicații care utilizează TLS 1.0 + Cipher Block Chaining, dar când se utilizează TLS 1.1 sau TLS 1.2.
Notă Ca cerință prealabilă, trebuie să instalați Microsoft buletinul de securitate MS12-006 pentru a activa această actualizare.
Această modificare poate provoca unele aplicații bazate pe .NET Framework pentru a întrerupe. Acest articol descrie două metode, aveți posibilitatea să utilizați pentru a actualiza aplicația să funcționeze corect după ce aplicați Microsoft buletinul de securitate MS16-065.
Mitigations pentru probleme de compatibilitate
Opțiunea 1: Comutare la Protocolul TLS 1.2
Această opțiune face aplicația utilizează protocolul TLS 1.2 modificarea valorilor din registry sau prin programare configurarea versiunea de protocol.
-
Modificarea registry
Important
Urmați pașii din această secțiune cu atenție. Dacă modificați registry-ul incorect, pot apărea probleme grave. Înainte să modifica, copierea de rezervă a registry pentru restaurare în cazul în care apar probleme.
.NET Framework 4.0 și .NET Framework 4.5.x aplicațiile care se execută pe .NET Framework 4.5 și versiunile ulterioare pot comuta protocol implicit la TLS 1.2, TLS 1.1 și TLS 1.0 activând cheia de registry SchUseStrongCrypto . Această cheie de registry este discutate în secțiunea Sugerat acțiuni de Microsoft Security Advisory 2960358 subiect pe site-ul Web Microsoft TechNet.
Important Această modificare de registry va funcționa numai dacă următoarele condiții sunt adevărate:-
Aplicațiile care utilizează API-uri bazate pe ServicePointManager sunt setarea valorii ServicePointManager.SecurityProtocol în mod explicit . Exemple de astfel de clase includ System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestși System.Net.Mail.SmtpClient. Setarea ServicePointManager.SecurityProtocol în cod are prioritate faţă de registry.
-
Aplicații care folosesc suprasarcină SslStream AuthenticateAsClient(String) .
-
-
Configurare prin programare versiunea de protocol
.NET Framework 4.0 și 4,5 aplicațiile care se execută pe .NET Framework 4.5 și versiunile ulterioare și care utilizează SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) suprasarcină trebuie să fie recompilat, specificând SslProtocols.Tls12, SslProtocols.Tls11și SslProtocols.Tls ca al treilea parametru. Pentru o descriere completă de modul de utilizare a clasei SslStream, consultați subiectul SslStream Class pe site-ul Web Microsoft Developer (MSDN).
Notă .NET Framework 4.6 și versiunile ulterioare utilizează TLS 1.2, TLS 1.1 și TLS 1.0 ca protocol implicite. Acest lucru este discutat în Microsoft Security Advisory 2960358 subiect pe site-ul Web Microsoft TechNet.
Opțiunea 2: Handle pachete de separare
Această actualizare determină o singură înregistrare pentru a fi împărțite în mai multe înregistrări. De aceea, dacă o aplicație este dorind înregistrare să fie disponibil într-un singur apel de citire , astfel de aplicații poate întrerupe. Pentru a vă asigura că aplicația se comportă corect, Verificați că aplicația tratează divizată pachete prin efectuarea apelul Stream.Read corect. Utilizați eșantion cod disponibile aici ca o referință pentru modul de rezolvare a aplicației pentru a efectua corect apelul de citire .
Pentru o solicitare de HTTP eșantion care arată diferenţa de comportament înainte (cu afluxului) și după (fără afluxului) s-au instalat actualizări 3147461 și 3147458 , consultați secțiunea "Mai multe informații".
Pentru un exemplu complet de metoda Stream.Read , consultați subiectul Stream.Read metoda (Byte [], Int32, Int32) pe site-ul Web Microsoft Developer (MSDN).
Soluții la problemele de compatibilitate a aplicațiilor
Avertisment Aceste soluții poate face computerul sau eaua mai vulnerabile la atacuri produse de utilizatori rău intenționați sau de software rău intenționat, cum ar fi viruși. Noi nu recomandăm aceste soluții, dar oferim aceste informații, astfel încât să aveți posibilitatea să implementați aceste soluții la propria discretie. Utilizați aceste soluții pe propriul risc.
Metoda 1: Actualizare cheile de registry (disponibil pentru toate versiunile de .NET Framework)
Dezactivați structura SCH_SEND_AUX_RECORD (global)
Dezactivați SCH_SEND_AUX_RECORD structura pentru aplicațiile individuale
Dezactivați SCH_SEND_AUX_RECORD structura (global)
Pentru toate aplicațiile, adăugați următoarea subcheie de registry:
Locație registry: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number >
Numele DWORD: SchSendAuxRecord
Value data: 0
Notă Substituentul < version_number > este v4.0.30319 sau v2.0.50727, în funcţie de versiunea.
Pentru 32-bit aplicaţii care se execută pe computere pe 64 de biți, de asemenea, adăugați următoarea subcheie de registry:
Locație registry: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number >
Numele DWORD: SchSendAuxRecord
Value data: 0
Notă Substituentul < version_number > este v4.0.30319 sau v2.0.50727, în funcţie de versiunea.
Soluție
Pentru a dezactiva temporar modul de siguranță descrise în acest articol, faceți clic pe legătura corespunzătoare pentru a descărca un fișier .reg, și apoi faceți dublu clic pe fișierul .reg descărcat pentru a face modificările din registry.
Pentru aplicații de orientare Microsoft .NET Framework 3.5:
Descărcați fișierul ManualOptOutSchSendAuxRecord20.reg acum.
Pentru aplicații de orientare Microsoft .NET Framework 4.0 și versiunile mai recente:
Descărcați fișierul ManualOptOutSchSendAuxRecord40.reg acum.
Pentru a reactiva modul de siguranță descrise în acest articol, faceți clic pe legătura corespunzătoare pentru a descărca un fișier .reg, și apoi faceți dublu clic pe fișierul .reg descărcat pentru a face modificările din registry.
Pentru aplicații Microsoft .NET Framework 3.5 de orientare:
Descărcați fișierul ManualOptInSchSendAuxRecord20.reg acum.
Pentru aplicații de orientare Microsoft .NET Framework 4.0 și versiunile mai recente:
Descărcați fișierul ManualOptInSchSendAuxRecord40.reg acum.
Pentru mai multe informaţii despre cum să descărcați fișierele de suport Microsoft, faceţi clic pe următorul număr de articol pentru a vedea articolul în baza de cunoştinţe Microsoft:
119591 cum se obțin fișierele de asistență Microsoft de la serviciile onlineMicrosoft a scanat acest fișier pentru viruşi. Microsoft utilizează cele mai actualizate software pentru detectarea virușilor care sunt disponibile la data la care fișierul a fost postat. Fisierul este stocat pe servere securizate care ajută la împiedicarea modificărilor neautorizate a fișierului.
Dezactivați SCH_SEND_AUX_RECORD structura pentru aplicațiile individuale
Pentru toate aplicațiile, adăugați următoarea subcheie de registry:
Locație registry: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
Numele DWORD: Calea către pentru .exe aplicație (de exemplu, C:\MyApp\MyApp.exe)
Value data: 0
Notă Substituentul < version_number > este v4.0.30319 sau v2.0.50727, în funcţie de versiunea.
Pentru 32-bit aplicaţii care se execută pe computere pe 64 de biți, de asemenea, adăugați următoarea subcheie de registry:
Locație registry: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
Numele DWORD: Calea către pentru .exe aplicație (de exemplu, C:\MyApp\MyApp.exe)
Date valoare: 0 (valabil numai valoarea este 0. Orice altă valoare va fi ignorată.)
Notă Substituentul < version_number > este v4.0.30319 sau v2.0.50727, în funcţie de versiunea.
Metoda 2: Schimba configurația la nivel de aplicație (disponibil numai pentru .NET Framework versiunea 4.6 și versiuni ulterioare)
Începând cu .NET Framework 4.6, puteți modifica configurația la un nivel de aplicație prin modificările de configurare sau registry cod sau o aplicație.
În .NET Framework 4.6, puteți seta parametrul utilizând oricare dintre următoarele metode. Aceste exemple dezactivează caracteristica de securitate.
-
Prin programare
Primul lucru pe care ar trebui să facă aplicația se execută codul următor. Aceasta se întâmplă deoarece Service Point Manager va inițializează numai o singură dată.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Configurare aplicaţie
Pentru a modifica configurația aplicației, adăugați următoarea intrare:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Cheie de registry (computer global)
Locații din registry: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Valoare: Switch.System.Net.DontEnableSchSendAuxRecord
Tip: Șir
Valoare: Adevărate
Notă Switch.System.Net.DontEnableSchSendAuxRecord = False pentru toate aplicațiile.
Mai multe informații
Iată un model de comunicare Client/Server eșantion înainte și după instalarea acestei actualizări. Aceste informații se furnizează în scop ilustrativ pentru a identifica orice aplicație spargerii din cauza instalării această remediere.
Fără afluxului |
Cu afluxului |
---|---|
[Server] aşteptare pentru conexiuni (127.0.0.1:4431) |
[Server] aşteptare pentru conexiuni (127.0.0.1:4431) |