Resumen
Como se implementa en el componente de cifrado de .NET Framework de Microsoft, existe una vulnerabilidad de divulgación de información en el protocolo de seguridad de la capa de transporte y el protocolo de capa de Sockets seguros (TLS/SSL). Un atacante que aprovechara esta vulnerabilidad podría descifrar el tráfico cifrado de TLS/SSL.
Para aprovechar esta vulnerabilidad, un atacante tendría primero que insertan datos no cifrados en el canal de seguridad y realizar un ataque de man in the middle (MiTM) entre el cliente de destino y un servidor legítimo. Esta actualización corrige la vulnerabilidad al modificar la manera en que el componente de cifrado de .NET envía y recibe paquetes de red cifrada.
Esta vulnerabilidad se fija como parte del boletín de seguridad de Microsoft MS16-065. Esta actualización cambia la manera en que el componente de cifrado de .NET Framework, envía y recibe paquetes de red cifrada.
En la tabla siguiente contiene vínculos a la entrada estándar para cada vulnerabilidad en la lista de vulnerabilidades y exposiciones comunes.
Título de vulnerabilidad |
Número CVE |
Se ha divulgado |
Aprovechar |
---|---|---|---|
Vulnerabilidad de suplantación de TLS/SSL |
Sí |
No |
Resolución de la vulnerabilidad
El cambio introducido en el boletín de seguridad de Microsoft MS16-065 hace que el primer registro TLS después el protocolo de enlace que desea dividir. Esto hace que las secuencias SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient y HttpClient (donde basado en HttpWebRequest) para devolver un único byte de la primera lectura, seguido de los bytes del resto (n-1) en lecturas sucesivas. Este cambio de comportamiento solo se produce para las aplicaciones que utilizan TLS 1.0 + Cipher Block Chaining, pero no cuando utilizan TLS 1.1 o TLS 1.2.
Nota: Como requisito previo, debe instalar el boletín de seguridad de Microsoft MS12-006 para habilitar esta actualización.
Este cambio puede ocasionar que algunas aplicaciones que se basan en .NET Framework dejen de funcionar. Este artículo describe dos métodos que puede utilizar para actualizar la aplicación para funcionar correctamente después de aplicar el boletín de seguridad de Microsoft MS16-065.
Factores atenuantes para problemas de compatibilidad
Opción 1: Cambiar el protocolo TLS 1.2
Esta opción hace que la aplicación utilice el protocolo TLS 1.2 mediante la modificación del registro o configurar mediante programación la versión del protocolo.
-
Modificar el registro
Importante:
siga cuidadosamente los pasos de esta sección. Pueden producirse problemas graves si modifica incorrectamente el registro. Antes, modificarla, copia de seguridad del registro de restauración en caso de producirse problemas.
Las aplicaciones de .NET Framework 4.0 y .NET Framework 4.5. x que se ejecutan en .NET Framework 4.5 y versiones posteriores pueden cambiar el protocolo predeterminado para TLS 1.2, TLS 1.1 y TLS 1.0 al habilitar la clave del registro SchUseStrongCrypto . Esta clave del registro se describe en la sección Acciones recomendadas del tema 2960358 Asesor de seguridad de Microsoft en el sitio Web de Microsoft TechNet.
Importante: Este cambio del registro sólo funcionará si se cumplen las condiciones siguientes:-
Aplicaciones que usan las API basadas en ServicePointManager no se establece explícitamente el valor de ServicePointManager.SecurityProtocol . System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequesty System.Net.Mail.SmtpClientson ejemplos de tales clases. Establecer el ServicePointManager.SecurityProtocol en código prevalece sobre el registro.
-
Las aplicaciones utilizan la sobrecarga de SslStream AuthenticateAsClient(String) .
-
-
Configurar mediante programación la versión del protocolo
El.NET Framework 4.0 y 4.5 aplicaciones que se ejecutan en el.NET Framework 4.5 y versiones posteriores y que usan la sobrecarga SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) deben compilarse, especificando SslProtocols.Tls12, SslProtocols.Tls11y SslProtocols.Tls como tercer parámetro. Para obtener una descripción completa de cómo utilizar la clase SslStream, vea el tema de la Clase SslStream en el sitio Web de Microsoft Developer (MSDN).
Nota: NET Framework 4.6 y versiones posteriores usan TLS 1.2, TLS 1.1 y TLS 1.0 como los valores predeterminados del protocolo. Esto se explica en el tema 2960358 del Asesor de seguridad de Microsoft en el sitio web de Microsoft TechNet.
Opción 2: Administrar paquetes de división
Esta actualización hace que un solo registro se divida en varios registros. Por lo tanto, si una aplicación está esperando el registro completo esté disponible en una única llamada de lectura , estas aplicaciones pueden bloquearse. Para asegurarse de que la aplicación se comporta correctamente, compruebe que la aplicación trata los paquetes de división realizando la llamada Stream.Read correctamente. Puede utilizar el ejemplo código disponible aquí como referencia acerca de cómo corregir la aplicación para realizar correctamente la llamada de lectura.
Para una solicitud HTTP de ejemplo muestra la diferencia en el comportamiento antes (con la mitigación) y después (sin la mitigación) se instalaron las actualizaciones 3147461 y 3147458 , consulte la sección "Más información".
Para obtener un ejemplo completo del método Stream.Read , vea el tema del Método Stream.Read (Byte [], Int32, Int32) en el sitio Web de Microsoft Developer (MSDN).
Soluciones a los problemas de compatibilidad de aplicaciones
Advertencia: Estas soluciones pueden hacer que un equipo o una red sean más vulnerables a los ataques de usuarios malintencionados o de software malintencionado, como virus. No recomendamos estas soluciones, pero proporcionamos esta información para que usted puede implementar estas soluciones a su propia discreción. Utilice estas soluciones bajo su propio riesgo.
Método 1: Actualizar las claves de registro (disponibles para todas las versiones de .NET Framework)
Deshabilitar la estructura SCH_SEND_AUX_RECORD (globalmente)
Deshabilitar la estructura SCH_SEND_AUX_RECORD para aplicaciones individuales
Deshabilitar la estructura SCH_SEND_AUX_RECORD (globalmente)
Para todas las aplicaciones, agregue la siguiente subclave del registro:
Ubicación del registro: HKEY_LOCAL_MACHINE\Software\Microsoft\ de . NETFramework\ < númeroDeVersión >
Nombre DWORD: SchSendAuxRecord
Información del valor: 0
Nota: El marcador de posición < númeroDeVersión > es v4.0.30319 o v2.0.50727, dependiendo de la versión.
Para las aplicaciones de 32 bits que se ejecutan en equipos de 64 bits, también hay que agregar la siguiente subclave del registro:
Ubicación del registro: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\ de . NETFramework\ < númeroDeVersión >
Nombre DWORD: SchSendAuxRecord
Información del valor: 0
Nota: El marcador de posición < númeroDeVersión > es v4.0.30319 o v2.0.50727, dependiendo de la versión.
Solución alternativa
Para deshabilitar temporalmente el modo seguro que se describe en este artículo, haga clic en el vínculo correspondiente para descargar un archivo .reg y, a continuación, haga doble clic en el archivo .reg descargados para que los cambios del registro.
Para aplicaciones orientadas a la de Microsoft.NET Framework 3.5:
Descargar ahora el archivo ManualOptOutSchSendAuxRecord20.reg.
Para aplicaciones dirigidas a la de Microsoft.NET Framework 4.0 y versiones posteriores:
Descargar ahora el archivo ManualOptOutSchSendAuxRecord40.reg.
Para volver a habilitar el modo seguro que se describe en este artículo, haga clic en el vínculo correspondiente para descargar un archivo .reg y, a continuación, haga doble clic en el archivo .reg descargados para que los cambios del registro.
Para aplicaciones orientadas a Microsoft.NET Framework 3.5:
Descargar ahora el archivo ManualOptInSchSendAuxRecord20.reg.
Para aplicaciones dirigidas a la de Microsoft.NET Framework 4.0 y versiones posteriores:
Descargar ahora el archivo ManualOptInSchSendAuxRecord40.reg.
Para obtener más información acerca de cómo descargar archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
119591 cómo obtener archivos de soporte técnico de Microsoft desde los servicios en líneaMicrosoft analizó este archivo en busca de virus. Microsoft ha utilizado el software de detección de virus más reciente que estaba disponible en la fecha en que se publicó el archivo. El archivo se almacena en servidores seguros que ayudan a evitar cambios no autorizados en el archivo.
Deshabilitar la estructura SCH_SEND_AUX_RECORD para aplicaciones individuales
Para todas las aplicaciones, agregue la siguiente subclave del registro:
Ubicación del registro: HKEY_LOCAL_MACHINE\Software\Microsoft\ de . NETFramework\ < númeroDeVersión > \System.Net.ServicePointManager.SchSendAuxRecord
Nombre DWORD: Ruta de acceso completa para la aplicación .exe (por ejemplo, C:\MyApp\MyApp.exe)
Información del valor: 0
Nota: El marcador de posición < númeroDeVersión > es v4.0.30319 o v2.0.50727, dependiendo de la versión.
Para las aplicaciones de 32 bits que se ejecutan en equipos de 64 bits, también hay que agregar la siguiente subclave del registro:
Ubicación del registro: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\ de . NETFramework\ < númeroDeVersión > \System.Net.ServicePointManager.SchSendAuxRecord
Nombre DWORD: Ruta de acceso completa para la aplicación .exe (por ejemplo, C:\MyApp\MyApp.exe)
Datos de valor: 0 (el único valor válido es 0. Cualquier otro valor se omitirá.)
Nota: El marcador de posición < númeroDeVersión > es v4.0.30319 o v2.0.50727, dependiendo de la versión.
Método 2: Cambiar la configuración en el nivel de aplicación (disponible sólo para la versión 4.6 de.NET Framework y versiones posteriores)
A partir de .NET Framework 4.6, puede cambiar la configuración en una aplicación a través de los cambios de configuración o del registro de aplicación o código.
En .NET Framework 4.6, puede establecer el modificador utilizando cualquiera de los métodos siguientes. En estos ejemplos se deshabilita la característica de seguridad.
-
Mediante programación
Lo primero que debe hacer la aplicación se ejecute el código siguiente. Esto es porque el Administrador de puntos de servicio se inicializará sólo una vez.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Configuración de la aplicación
Para cambiar la configuración de la aplicación, agregue la entrada siguiente:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Clave de registro (global del equipo)
Ubicaciones del registro: HKEY_LOCAL_MACHINE\Software\Microsoft\ de . NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Valor: Switch.System.Net.DontEnableSchSendAuxRecord
Tipo: Cadena
Valor: True
Nota: Switch.System.Net.DontEnableSchSendAuxRecord = False para todas las aplicaciones.
Más información
El siguiente es un modelo de comunicación cliente/servidor de ejemplo antes y después de instalar esta actualización. Esta información se proporciona para la ilustración para identificar cualquier rotura de aplicación debido a la instalación de esta revisión.
Sin la mitigación |
Con la mitigación |
---|---|
[Servidor] esperando conexiones (127.0.0.1:4431) |
[Servidor] esperando conexiones (127.0.0.1:4431) |