Резюме
Информация за разкриване уязвимост в протокола за защита на транспортния слой и протокола Secure Sockets Layer (TLS/SSL), в компонента за шифроване на Microsoft .NET Framework. Хакер, които успешно използват тази уязвимост може да дешифрира шифрована TLS/SSL трафик.
Да се използва уязвимостта, атакуващият първо ще трябва да вкара Подавай данни в канал за сигурност и след това изпълнете човек в средата (MiTM) атака между целеви клиент и сървър. Тази актуализация елиминира уязвимост чрез промяна на начина, компонента .NET шифроване изпраща и получава шифровани мрежови пакети.
Тази уязвимост се определя като част от Microsoft Security Bulletin MS16-065. Тази актуализация променя начина, че компонентът на .NET Framework шифроване изпраща и получава шифровани мрежови пакети.
Следната таблица съдържа връзки към стандартното съдържание за всяка уязвимост в списъка на често срещани уязвимости и излагане.
Уязвимост заглавие |
CVE номер |
Публично разкрива |
За злоупотреба |
---|---|---|---|
TLS/SSL изигравам уязвимост |
Да |
Не |
Уязвимост решение
Промените, въведени в Microsoft сигурност бюлетин MS16-065 предизвиква първия запис TLS след ръкостискане да се раздели. Това води до SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient и HttpClient (където въз основа на HttpWebRequest) потоци да върне един бит за първото четене, веднага след байта останалите (n-1) в последователни чете. Тази промяна в поведението възниква само за приложения, използващи TLS 1.0 + кодирани блокове, но не когато използвате TLS 1.1 или TLS 1.2.
Забележка: Като предпоставка трябва да инсталирате Microsoft Security Bulletin MS12-006 да разрешите тази актуализация.
Тази промяна може да доведе до някои приложения, базирани на .NET Framework прекъсване. Тази статия описва два подход, можете да използвате за актуализиране на приложението да работи правилно, след като приложите бюлетин за сигурността на Microsoft MS16-065.
Предпазни мерки за проблеми със съвместимостта
Опция 1: Превключване към TLS 1.2 протокол
Тази опция позволява приложението използва протокола TLS 1.2 или модифициране на системния регистър или програмно конфигуриране на версията на протокола.
-
Модифициране на системния регистър
Важно
Внимателно следвайте стъпките в този раздел. При неправилна промяна на регистъра може да възникнат сериозни проблеми. Преди да промените това резервно копие на системния регистър за възстановяване при възникване на проблеми.
.NET Framework 4.0 и .NET Framework 4.5.x приложения, които се изпълняват на .NET Framework 4.5 и по-нови версии да превключите по подразбиране протокол TLS 1.2 TLS 1.1 и TLS 1.0 позволявайки SchUseStrongCrypto ключ на системния регистър. Този ключ на системния регистър се разглежда в раздела Препоръчва действия на Microsoft Security консултации 2960358 тема в уеб сайта на Microsoft TechNet.
Важно: Промяната в системния регистър ще работят само ако са налице следните условия:-
Приложения, които използват API за ServicePointManager не настройвате стойността ServicePointManager.SecurityProtocol изрично. Примери за такива класове System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestи System.Net.Mail.SmtpClient. Задаване на ServicePointManager.SecurityProtocol код предимство системния регистър.
-
Приложения използват претоварване SslStream AuthenticateAsClient(String) .
-
-
Програмно конфигуриране на версията на протокола
.NET Framework 4.0 и 4.5 приложения, които се изпълняват на .NET Framework 4.5 и по-нови версии и използват SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) претоварване трябва да бъдат компилирани отново, посочва SslProtocols.Tls12, SslProtocols.Tls11и SslProtocols.Tls като третия параметър. За пълно описание как се използва SslStream клас вижте темата SslStream клас на уеб сайта на разработчици на Microsoft (MSDN).
Забележка: .NET Framework 4.6 и по-нови версии използват TLS 1.2 TLS 1.1 и TLS 1.0, протокол по подразбиране. Дискусии в Microsoft Security консултации 2960358 тема в уеб сайта на Microsoft TechNet.
Опция 2: Манипулатор за разделяне на пакети
Тя води до един запис, за да се раздели на няколко записа. Затова ако приложението очаква пълен запис да бъде на разположение в един разговор четене , тези приложения може да прекъсне. За да се уверите, че приложението функционира правилно, проверете дали приложението обработва разделяне пакети като извършите повикване Stream.Read правилно. Можете да използвате примерен код тук за справка за как да отстраните приложение за правилно извършване на повикването четене .
Примерен HTTP заявка, която показва разликата в поведението преди (намаляване) и след (без намаляване) са инсталирани актуализации 3147461 и 3147458 , вижте раздела "Допълнителна информация".
За пълен пример на Stream.Read метод вижте темата Stream.Read метод (байт, Int32, Int32) на уеб сайта на разработчици на Microsoft (MSDN).
Решения на проблеми със съвместимостта на приложения
Предупреждение Тези методи може да направи компютъра или мрежата по-уязвими за атаки от злонамерени потребители или злонамерен софтуер, например вируси. Ние не препоръчваме тези методи, но предоставяме тази информация, така че можете да ги тези решения по своя преценка. Използвайте следните методи на свой собствен риск.
Метод 1: Актуализация ключове на системния регистър (достъпна за всички версии на .NET Framework)
Забраняване на SCH_SEND_AUX_RECORD структура (глобално)
Забрани SCH_SEND_AUX_RECORD структура за отделни приложения
Забрани SCH_SEND_AUX_RECORD структура (глобално)
За всички приложения добавете следния подключ на системния регистър:
Местоположение в системния регистър: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < номер_на_версия >
DWORD името: SchSendAuxRecord
Стойността на данните: 0
Забележка: < Номер_на_версия > е v4.0.30319 или v2.0.50727, в зависимост от версията.
За 32-битовите приложения, които работят с 64-битовите компютри трябва също да добавите следния подключ на системния регистър:
Местоположение в системния регистър: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < номер_на_версия >
DWORD името: SchSendAuxRecord
Стойността на данните: 0
Забележка: < Номер_на_версия > е v4.0.30319 или v2.0.50727, в зависимост от версията.
Заобикаляне на проблема
За да забраните временно защитен режим, описани в тази статия, щракнете върху съответната връзка за изтегляне на .reg файл и след това щракнете двукратно върху изтегления .reg файла да променяте системния регистър.
За насочване на Microsoft .NET Framework 3.5 приложения:
Изтеглете файла ManualOptOutSchSendAuxRecord20.reg сега.
За приложения, насочени към Microsoft .NET Framework 4.0 и следващите версии:
Изтеглете файла ManualOptOutSchSendAuxRecord40.reg сега.
За да разрешите отново защитен режим, описани в тази статия, щракнете върху съответната връзка за изтегляне на .reg файл и щракнете двукратно върху изтегления .reg файла да променяте системния регистър.
За приложения, насочени към Microsoft .NET Framework 3.5:
Изтеглете файла ManualOptInSchSendAuxRecord20.reg сега.
За приложения, насочени към Microsoft .NET Framework 4.0 и следващите версии:
Изтеглете файла ManualOptInSchSendAuxRecord40.reg сега.
За повече информация как да изтеглите файлове за поддръжка на Microsoft щракнете върху следния номер на статия в базата знания на Microsoft:
119591 как да получите файлове за поддръжка на Microsoft от онлайн услугиMicrosoft е сканирал този файл за вируси. Microsoft използва най-новия софтуер за откриване на вируси, който е достъпен към датата на публикуване на файла. Файлът е записан на сървъри с повишена защита, които помагат за предотвратяването на неупълномощени промени във файла.
Забрани SCH_SEND_AUX_RECORD структура за отделни приложения
За всички приложения добавете следния подключ на системния регистър:
Местоположение в системния регистър: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < номер_на_версия > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD името: Път за приложението .exe (например C:\MyApp\MyApp.exe)
Стойността на данните: 0
Забележка: < Номер_на_версия > е v4.0.30319 или v2.0.50727, в зависимост от версията.
За 32-битовите приложения, които работят с 64-битовите компютри трябва също да добавите следния подключ на системния регистър:
Местоположение в системния регистър: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < номер_на_версия > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD името: Път за приложението .exe (например C:\MyApp\MyApp.exe)
Стойност: 0 (само валиден стойност е 0. Всяка друга стойност ще бъде игнорирана.)
Забележка: < Номер_на_версия > е v4.0.30319 или v2.0.50727, в зависимост от версията.
Метод 2: Промяна на конфигурацията на ниво приложение (достъпна само за .NET Framework версия 4.6 и по-нови версии)
Започвайки от 4.6 .NET Framework, можете да промените конфигурацията на ниво приложение чрез код или приложение промени в конфигурацията или системния регистър.
В .NET Framework 4.6 можете да зададете ключа посредством някой от следните методи. Тези примери забранява функцията за защита.
-
Програмно
Първото нещо, което трябва да направи приложението се изпълнява следния код. Това е така, защото услугата точка мениджър ще инициализира само веднъж.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Конфигуриране на приложението
За да промените конфигурацията на приложението, добавете следния запис:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Ключ на системния регистър (глобални компютър)
Местоположения в системния регистър: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Стойност: Switch.System.Net.DontEnableSchSendAuxRecord
Тип: Низ
Стойност: Налице
Забележка: Switch.System.Net.DontEnableSchSendAuxRecord = False за всички приложения.
Допълнителна информация
Това е примерен клиент/сървър комуникация модел преди и след инсталирането на тази актуализация. Тази информация се предоставя за илюстрация за идентифициране на всяко приложение счупване поради инсталирането на корекцията.
Без намаляване |
С намаляване |
---|---|
[Сървър] изчакване за връзки (127.0.0.1:4431) |
[Сървър] изчакване за връзки (127.0.0.1:4431) |