Microsoft Security Advisory 4092731
Actualización al algoritmo de generación de claves de máquina de Azure Cloud Services
Publicado: 8 de mayo de 2018 | Actualizado el 29 de junio de 2018
Versión: 1.2
Resumen ejecutivo
Microsoft publica este aviso de seguridad para proporcionar información relacionada con una actualización en la forma en que se generan las claves de máquina para Azure Cloud Services. Este escenario puede afectar a los clientes que usan roles web de Azure Cloud Services. Las claves de máquina en las implementaciones existentes se han generado con una entropía insuficiente y con algoritmos criptográficos en desuso.
Para solucionar este problema, Microsoft publicó una actualización del algoritmo que se usa para generar claves de máquina en nuevas implementaciones de roles web de Azure Cloud Services, incluido el uso de generación de números aleatorios criptográficamente seguros. Todos los roles web existentes conservarán sus claves de máquina generadas anteriormente a menos que se vuelvan a implementar. Dada cierta información detallada, un atacante puede adivinar las claves de máquina creadas por el algoritmo en desuso. Las claves de máquina vulnerables pueden, en algunas circunstancias, permitir la omisión de características de seguridad.
Este aviso proporciona instrucciones para que los clientes identifiquen si se ven afectados por este escenario y qué, si existe, las acciones que deben realizar.
Servicios en la nube afectados
Las implementaciones de Azure que usan roles web se ven afectadas por este problema. La única excepción es si proporcionó su propia clave de máquina en Web.config en el paquete de CS. Los roles de trabajo de Azure, las máquinas virtuales y todas las demás ofertas de Azure no se ven afectadas.
Preguntas más frecuentes
1. Cómo saber si estoy afectado?
Todos los roles web del servicio en la nube de Azure se ven afectados por este problema, excepto si proporcionó sus propias claves de máquina en Web.config en el paquete de CS. Los roles de trabajo del servicio en la nube de Azure, las máquinas virtuales y todas las demás ofertas de Azure no se ven afectadas.
ASP.NET usa claves de máquina para varios propósitos, entre los que se incluyen:
- Anti-altering with web form viewstate data
- Generación y validación de cookies de sesión de formulario web de ASP.NET
- Tokens anti-CSRF
- Cifrado mediante los métodos machinekey.protect y machinekey.unprotect.
2. ¿Hay algún requisito previo para corregir mi aplicación afectada?
Sí, si el rol web se implementó con una versión retirada del SDK de Azure para .Net, no usará el algoritmo mejorado de generación de claves de máquina. Consulte las https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ versiones admitidas. Para actualizar a una versión compatible, haga clic en el vínculo del sitio al que se hace referencia anteriormente para descargar y volver a implementar el proyecto con una versión del SDK compatible. Una vez que haya validado que el proyecto se implementa con un SDK compatible, siga los pasos adicionales de este aviso.
3. Cómo corregir mi aplicación afectada?
Para generar las nuevas claves de máquina, debe volver a implementar .cspkg y .cscfg como un nuevo servicio en la nube, implementar la carga de trabajo en el espacio de ensayo y realizar una implementación de intercambio (INTERCAMBIO VIP) o insertar sus propias claves de máquina y, a continuación, realizar una actualización simultánea. Una operación típica de implementación de actualizaciones no será suficiente. A continuación se describen las opciones de mitigación de alto nivel y los pasos detallados se describen a continuación:
Opción 1: Implementar la carga de trabajo en un nuevo servicio en la nube. Actualice el CNAME para que apunte el tráfico al nuevo servicio en la nube. Cuando el tráfico cero va al sitio antiguo, puede eliminar el servicio en la nube antiguo.
Opción 2: Implemente el servicio en la nube en el espacio de ensayo y realice una implementación de intercambio.
Opción 3: genere sus propias claves de máquina en Web.config y realice una actualización simultánea. Esto actualizará todas las instancias a la vez y, por tanto, provocará el tiempo de inactividad de la aplicación.
Se recomienda usar la opción 1 para evitar el tiempo de inactividad. También se recomienda realizar la mitigación durante períodos de uso bajo, ya que las sesiones se pueden interrumpir mientras cambian las claves de la máquina.
Nota: La dirección IP de la aplicación cambiará una vez que obtenga las nuevas claves de máquina con la opción 1 y la opción 2.
4. He usado la clave de máquina para cifrar datos persistentes mediante MachineKey.Encode()/MachineKey.Protect(). Cómo recuperar los datos?
Si machineKey se usó para cifrar los datos ( mediante MachineKey.Encode()/MachineKey.Protect(), la clave de máquina antigua y los algoritmos definidos en web.config deben usarse para descifrar los datos ( llamando a MachineKey.Decode()/MachineKey.Unprotect() respectivamente ) antes de realizar los pasos de mitigación. Una vez completados los pasos de mitigación, las llamadas a MachineKey.Encode()/MachineKey.Protect() y MachineKey.Decode()/MachineKey.Unprotect() usarán la clave de máquina actualizada y los algoritmos de web.config.
5. Cómo saber que mi aplicación usa el nuevo algoritmo de clave de máquina?
Si solo tiene una implementación en el servicio en la nube, comprobar si ve el certificado de clave de máquina de Azure en la pestaña Certificado del servicio en la nube en el Portal de administración de Azure bastará. Si este certificado está presente, la implementación usa el algoritmo de clave de máquina.
Si tiene dos implementaciones en el servicio en la nube (producción y almacenamiento provisional), deberá usar escritorio remoto en los roles web y examinar la configuración de IIS. Si ve el certificado de clave de máquina, usa el nuevo algoritmo de clave de máquina. Tendrá que comprobar si hay un rol web en cada implementación. Si no puede conectarse a la máquina virtual, envíe una incidencia de soporte técnico (instrucciones en #7) y nuestro equipo de soporte técnico puede ayudar a confirmar si las implementaciones usan la nueva clave de máquina.
6. ¿Cuál es el certificado "Microsoft Azure Service Management for MachineKey"?
Este es el certificado que se usa para cifrar las claves de máquina junto con el algoritmo mejorado.
7. Quién administra el certificado "Microsoft Azure Service Management for MachineKey" y lo que sucede cuando expira?
Azure administra este certificado. Los clientes no necesitan preocuparse por la fecha de expiración de este certificado porque se usa una vez para generar las nuevas claves de máquina con el nuevo algoritmo. La fecha de expiración no provocará ningún impacto.
8. ¿Se puede eliminar o quitar el certificado de la máquina virtual?
No, no se puede quitar el certificado.
9. Si tengo preguntas sobre los pasos de mitigación, ¿qué puedo hacer?
Envíe un caso de soporte técnico en Cloud Services mediante el proceso de escalado estándar. Para escalar en Azure Portal, siga estos pasos:
- Vaya a Ayuda y soporte técnico en Azure Portal.
- Seleccione el tipo de problema técnico .
- Seleccione la suscripción y, a continuación, seleccione el servicio Cloud Services (roles web/roles de trabajo) en Servicios.
- Haga clic en Siguiente , elija MachineKey Certificate Update como el tipo de problema y, a continuación, rellene los detalles de la incidencia de soporte técnico.
Pasos detallados para realizar la mitigación
Opción 1: Volver a implementar el servicio en la nube.
Realice una reimplementación a través del portal:
- Cree un nuevo servicio en la nube con .cspkg y .cscfg. Consulte los detalles aquí.
- Actualice el registro CName o A para que apunte el tráfico al nuevo servicio en la nube.
- Elimine el servicio en la nube anterior después de que el tráfico apunte al nuevo servicio en la nube.
Realice una reimplementación mediante PowerShell:
Cree un nuevo servicio en la nube con .cspkg y .cscfg. Consulte los detalles aquí.
Ejemplo: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"
Cree una nueva implementación con .cspkg y .cscfg. Consulte los detalles aquí.
Ejemplo: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Production" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
Actualice el registro CName o A para que apunte el tráfico al nuevo servicio en la nube.
Elimine el servicio en la nube anterior que no tenga claves de máquina actualizadas después de que el tráfico apunte al nuevo servicio en la nube. Consulte los detalles aquí.
Ejemplo: Remove-AzureService -ServiceName "yourOldServiceName"
Realice una reimplementación a través de la API rest:
Cree un nuevo servicio en la nube. Consulte los detalles aquí.
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices
Cree una nueva implementación mediante la API de creación de implementación. Si necesita encontrar .cspkg y .cscfg, puede llamar a Get-Package API).
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production
Elimine el servicio en la nube anterior que no tenga claves de máquina actualizadas después de que el tráfico apunte al nuevo servicio en la nube. Consulte los detalles aquí.
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<old-cloudservice-name>
Opción 2: Intercambiar implementación.
El uso de la opción 2 requiere que tenga un espacio de ensayo vacío. Si tiene una implementación en el espacio de ensayo actualmente, puede eliminarla y, a continuación, seguir estos pasos:
Realice la implementación de intercambio a través del portal:
Actualice la implementación del servicio en la nube mediante la carga de .cspkg y .cscfg en el espacio de ensayo. Esto contendrá el nuevo certificado para generar las claves de máquina. Consulte los detalles aquí.
Intercambie los espacios de ensayo y producción. Consulte los detalles aquí.
Elimine la ranura de ensayo con la implementación de producción anterior. Consulte los detalles aquí.
Realice la implementación de intercambio a través de PowerShell.
Implemente cspkg y cscfg en el espacio de ensayo. Consulte los detalles aquí.
Ejemplo: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
Intercambie los espacios de ensayo y producción. Consulte los detalles aquí.
Ejemplo: Move-AzureDeployment -ServiceName "yourServiceName"
Elimine la ranura de ensayo con la implementación de producción anterior.
Ejemplo: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging"
Realice la implementación de intercambio a través de la API rest:
Cree una nueva implementación en el espacio de ensayo mediante la API de creación de implementación. Si necesita encontrar .cspkg y .cscfg, puede llamar a Get-Package API).
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
Cambie las ranuras de producción y almacenamiento provisional mediante La implementación de intercambio.
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>
Eliminación de la ranura de ensayo con la implementación de producción anterior
Ejemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
Opción 3: genere sus propias claves de máquina en Web.config y realice una implementación simultánea.
Genere un nuevo elemento XML de clave de máquina en PowerShell (consulte el Apéndice A).
Actualice webConfig con las nuevas claves de máquina. Consulte las instrucciones.
Vuelva a empaquetar el servicio en la nube.
Realice una implementación de actualización mediante el archivo .cscfg que contiene las nuevas claves de máquina. El modo debe establecerse en simultáneo, o esto podría hacer que la aplicación esté en un estado incorrecto.
Declinación de responsabilidades
La información proporcionada en este aviso se proporciona "tal cual" sin garantía de ningún tipo. Microsoft renuncia a todas las garantías, ya sea expresas o implícitas, incluidas las garantías de comerciabilidad y idoneidad para un propósito determinado. En ningún caso, Microsoft Corporation o sus proveedores serán responsables de cualquier daño, incluyendo daños directos, indirectos, incidentales, consecuentes, pérdida de beneficios empresariales o daños especiales, incluso si Microsoft Corporation o sus proveedores han sido informados de la posibilidad de tales daños. Algunos estados no permiten la exclusión o limitación de responsabilidad por daños consecuenciales o incidentales, por lo que es posible que no se aplique la limitación anterior.
Revisiones
- V1.0 (8 de mayo de 2018): Aviso publicado.
- V1.1 (24 de mayo de 2018): se ha agregado el P+F #4 para explicar cómo recuperar datos persistentes después de cifrar los datos mediante MachineKey.Encode()/MachineKey.Protect(). Solo se trata de un cambio informativo.
- V1.2 (29 de junio de 2018): referencias modificadas del sistema operativo invitado de Azure a Azure Cloud Services