Sammendrag

Sikkerhetsproblemet finnes i Transport Layer Security-protokollen og protokollen Secure Sockets Layer (TLS/SSL) som de er implementert i krypteringskomponenten i Microsoft .NET Framework. En angriper som klarer å utnytte dette sikkerhetsproblemet, kan dekryptere kryptert TLS/SSL-trafikk.

For å utnytte dette sikkerhetsproblemet må må en angriper først medieinnsetting ukryptert data inn i kanalen for sikkerhet og utfører deretter en mann-i-midten (MiTM) angrep mellom målrettede klienten og en ekte server. Denne oppdateringen løser sikkerhetsproblemet ved å endre måten .NET krypteringskomponenten sender og mottar krypterte nettverkspakker.

Dette sikkerhetsproblemet er løst som en del av Microsoft sikkerhetsbulletin MS16-065. Denne oppdateringen endrer måten .NET Framework krypteringskomponenten sender og mottar krypterte nettverkspakker.

Følgende tabell inneholder koblinger til standardoppføring for hvert sikkerhetsproblem i listen Common Vulnerabilities and Exposures.

Sikkerhetsproblemet tittel

CVE-nummer

Offentliggjort

Utnytte

TLS/SSL kan tillate etterligningsangrep

CVE-2016-0149

ja

nei

Sikkerhetsproblemet oppløsning

Endringen som innføres i Microsoft sikkerhetsbulletin MS16-065 fører til at den første posten i TLS etter håndtrykk som skal deles. Dette fører til at SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient og HttpClient (der det er basert på HttpWebRequest) dataflyter til å returnere en enkelt byte for det første lese etterfulgt av resten (n-1)-byte i etterfølgende leser. Endre denne virkemåten oppstår bare for programmer som bruker TLS 1.0 + Cipher Block Chaining, men ikke når de bruker TLS 1.1 eller TLS 1.2.

Obs! Som en forutsetning, må du installere Microsoft sikkerhetsbulletin MS12-006 Hvis du vil aktivere denne oppdateringen.

Denne endringen kan føre til at noen programmer som er basert på .NET Framework for å bryte. Denne artikkelen beskriver to fremgangsmåter du kan bruke til å oppdatere programmet fungerer riktig etter at du har installert Microsoft sikkerhetsbulletin MS16-065.

Begrensende faktorer for kompatibilitetsproblemer

Alternativ 1: Bytt til TLS 1.2-protokollen

Dette alternativet gjør at programmet bruker TLS 1.2-protokollen ved å endre registret eller konfigurere programmatisk protokollversjonen.

  • Endre registret

    Viktig
    Følg trinnene i dette avsnittet nøye. Det kan oppstå alvorlige problemer hvis du endrer registeret feilaktig. Før du endrer den, ta sikkerhetskopi av registret for gjenoppretting i tilfelle det oppstår problemer.

    .NET Framework 4.0 og .NET Framework 4.5.x programmer som kjører på .NET Framework 4.5 og senere versjoner kan bytte standardprotokoll til TLS 1.2, TLS 1.1 og TLS 1.0 ved å aktivere registernøkkelen SchUseStrongCrypto . Denne registernøkkelen er beskrevet i avsnittet Forslag til tiltak i Microsoft Security Advisory 2960358 emnet på webområdet Microsoft TechNet.

    Viktig Denne registerendringen fungerer bare hvis følgende betingelser er oppfylt:

    • Programmer som bruker ServicePointManager-baserte APIer ikke uttrykkelig er setter verdien for ServicePointManager.SecurityProtocol . System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestog System.Net.Mail.SmtpClienter eksempler på slike klasser. Angi ServicePointManager.SecurityProtocol i kode overstyrer registret.

    • Programmer bruker SslStream AuthenticateAsClient(String) -overbelastning.


  • Konfigurere programmatisk protocol-versjon

    .NET Framework 4.0 og 4.5 programmer som kjører på .NET Framework 4.5 og senere versjoner, og som bruker SslStream-AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) -overbelastning må bli kompilert på nytt, angir du SslProtocols.Tls12, SslProtocols.Tls11og SslProtocols.Tls som den tredje parameteren. For en fullstendig beskrivelse av hvordan du bruker SslStream-klassen, kan du se emnet SslStream klasse på webområdet for MSDN (Microsoft Developer).

    Obs! .NET Framework 4.6 og senere versjoner kan du bruke TLS 1.2, TLS 1.1 og TLS 1.0 som protokoll-standarder. Dette omtales i Microsoft Security Advisory 2960358 emnet på webområdet Microsoft TechNet.


Alternativ 2: Dele håndtaket pakker

Denne oppdateringen fører til at en enkelt oppføring skal deles inn i flere poster. Derfor, hvis et program er forventet hele posten skal være tilgjengelig i et enkelt lese kall, slike programmer kan brytes. For å sikre at programmet fungerer på riktig måte, må du kontrollere at programmet håndterer delt pakker ved å utføre Stream.Read -kall på riktig måte. Du kan bruke for eksempel koden tilgjengelig her som referanse å reparere programmet til å utføre riktig lese samtalen.

For et eksempel på HTTP-forespørsel som viser forskjellen i virkemåte før (med begrensning) og etter (uten begrensning) oppdateringer, 3147461 og 3147458 er installert, kan du se delen "Mer informasjon".

Et fullstendig eksempel på Stream.Read -metoden, kan du se emnet Stream.Read-metoden (Byte [], Int32, Int32) på webområdet for MSDN (Microsoft Developer).

Midlertidige løsninger for problemer med programkompatibilitet

Advarsel Disse løsningene kan gjøre en datamaskin eller et nettverk mer utsatt for angrep av ondsinnede brukere eller skadelig programvare som virus. Disse løsningene anbefales ikke, men informasjonen oppgis slik at du kan implementere disse løsningene på eget initiativ. Bruk disse løsningene på eget ansvar.

Metode 1: Oppdatere registernøkler (tilgjengelig for alle versjoner av .NET Framework)

Deaktiver SCH_SEND_AUX_RECORD-strukturen (globalt)

Deaktiver SCH_SEND_AUX_RECORD struktur for enkeltprogrammer

Deaktiver SCH_SEND_AUX_RECORD struktur (globalt)

For alle programmer, legger du til følgende undernøkkel i registret:

Sted i registret: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number >
DWORD-navn: SchSendAuxRecord
Verdidata: 0
Obs! Plassholderen < version_number > er enten v4.0.30319 eller v2.0.50727, avhengig av versjonen.

For 32-biters programmer som kjører på 64-biters datamaskiner, må du også legge til følgende registerundernøkkel:

Sted i registret: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number >
DWORD-navn: SchSendAuxRecord
Verdidata: 0
Obs! Plassholderen < version_number > er enten v4.0.30319 eller v2.0.50727, avhengig av versjonen.

Løsningen

Hvis du vil deaktivere sikkermodus som er beskrevet i denne artikkelen, klikker du riktig kobling for å laste ned en REG-fil, og dobbeltklikk deretter nedlastede REG-filen for å gjøre endringer i registret.

For programmer som er rettet mot Microsoft.NET Framework 3.5:

Download Last ned ManualOptOutSchSendAuxRecord20.reg-filen nå.
Rettet mot Microsoft .NET Framework 4.0 og senere versjoner for programmer:

Download Last ned ManualOptOutSchSendAuxRecord40.reg-filen nå.
Hvis du vil aktivere på nytt i sikker modus som er beskrevet i denne artikkelen, klikker du riktig kobling for å laste ned en REG-fil, og dobbeltklikk deretter nedlastede REG-filen for å gjøre endringer i registret.

For programmer som er rettet mot Microsoft.NET Framework 3.5:

Download Last ned ManualOptInSchSendAuxRecord20.reg-filen nå.
Rettet mot Microsoft .NET Framework 4.0 og senere versjoner for programmer:

Download Last ned ManualOptInSchSendAuxRecord40.reg-filen nå.
Hvis du vil ha mer informasjon om hvordan du laster ned Microsoft-støttefiler, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

119591 hvordan du ned Microsoft-støttefiler fra elektroniske tjenesterMicrosoft har søkt etter virus i denne filen. Microsoft brukte det nyeste antivirusprogrammet som var tilgjengelig datoen filen ble gjort. Filen lagres på sikkerhetsforbedrede servere som bidrar til å hindre uautoriserte endringer i filen.


Deaktiver SCH_SEND_AUX_RECORD struktur for enkeltprogrammer

For alle programmer, legger du til følgende undernøkkel i registret:

Sted i registret: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-navn: Fullstendige banen for programmet .exe (for eksempel C:\MyApp\MyApp.exe)
Verdidata: 0
Obs! Plassholderen < version_number > er enten v4.0.30319 eller v2.0.50727, avhengig av versjonen.

For 32-biters programmer som kjører på 64-biters datamaskiner, må du også legge til følgende registerundernøkkel:

Sted i registret: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < version_number > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-navn: Fullstendige banen for programmet .exe (for eksempel C:\MyApp\MyApp.exe)
Verdidata: 0 (den eneste gyldige verdien er 0. En annen verdi, vil bli ignorert.)
Obs! Plassholderen < version_number > er enten v4.0.30319 eller v2.0.50727, avhengig av versjonen.

Metode 2: Endre konfigurasjonen på programnivå (bare tilgjengelig for .NET Framework versjon 4.6 og senere versjoner)

Med .NET Framework 4.6 kan du endre konfigurasjonen på en programnivå via kode eller programmet konfigurasjons- eller registeret endres til.

Du kan angi bryteren i .NET Framework 4.6, ved hjelp av følgende metoder. Disse eksemplene deaktiverer sikkerhetsfunksjonen.

  • Ved hjelp av programmering

    Det første programmet gjør kjøres koden nedenfor. Dette er fordi tjenestebehandling vil initialisere bare én gang.

    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord"; 
    AppContext.SetSwitch(DisableCachingName, true);
    AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true);
  • Programkonfigurasjon

    Hvis du vil endre konfigurasjonen for programmet, kan du legge til følgende oppføring:

    <runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
    </runtime>
  • Registernøkkel (global datamaskin)

    Registerplasseringene: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
    Verdi: Switch.System.Net.DontEnableSchSendAuxRecord
    Type: Streng
    Verdi: SANN

    Obs! Switch.System.Net.DontEnableSchSendAuxRecord = False for alle programmer.

Hvis du vil ha mer informasjon

Følgende er et mønster for eksempel klient/Server-kommunikasjon før og etter at denne oppdateringen er installert. Denne informasjonen er ment å illustrere for å identifisere eventuelle program knusing på grunn av installasjon av denne hurtigreparasjonen.

Uten begrensning av

Med løsningene

[Server] venter på tilkoblinger (127.0.0.1:4431)
[Client] Koble til localhost:4431
[Server] Klienten er tilkoblet.
[Client] Koblet til. Godkjenning...
[Server] Klienten er godkjent.
[Client] Sende forespørsel (94 byte)
[Client] Venter på svar...

[Server] Mottatte 94 byte: <<< få / HTTP/1.0
Host: contoso.com
User-Agent: Testing application

>>>
[Server] Svart med 476 byte.

[Client 1: 476 byte] Svar: <<<<< HTTP/1.1 200 OK

>>>>>

[Server] venter på tilkoblinger (127.0.0.1:4431)
[Client] Koble til localhost:4431
[Server] Klienten er tilkoblet.
[Client] Koblet til. Godkjenning...
[Server] Klienten er godkjent.
[Client] Sende forespørsel (94 byte)
[Client] Venter på svar...
[Server] Mottatte byte 1: <<< G >>>
[Server] Mottatte byte 93: <<< ET / HTTP/1.0
Host: contoso.com
User-Agent: Testing application

>>>
[Server] Svart med 476 byte.
[Client 1: 1 byte] Svar: <<<<< H >>>>>
[Client 2: 475 byte] Svar: <<<<< KOBL/1.1 200 OK

>>>>>


Trenger du mer hjelp?

Utvid ferdighetene dine

Utforsk opplæring >

Vær først ute med de nye funksjonene

BLI MED I MICROSOFT INSIDERS >

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×