Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
| Producto o servicio | Artículo |
|---|---|
| Centro de eventos de Azure | |
| Dynamics CRM | |
| Azure Data Factory | |
| Identity Server | |
| Aplicación web |
|
| Base de datos | |
| Azure Storage |
|
| Cliente para dispositivos móviles | |
| WCF | |
| Web API | |
| Azure Cache for Redis | |
| Puerta de enlace de campo de IoT | |
| Puerta de enlace de nube de IoT |
Protección de la comunicación con el centro de eventos mediante SSL/TLS
| Título | Detalles |
|---|---|
| Componente | Centros de eventos de Azure |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | Introducción al modelo de autenticación y seguridad de Event Hubs |
| Pasos | Protección de conexiones AMQP o HTTP al centro de eventos mediante SSL/TLS |
Compruebe los privilegios de la cuenta de servicio y compruebe que los servicios personalizados o ASP.NET Pages respetan la seguridad de CRM.
| Título | Detalles |
|---|---|
| Componente | Dynamics CRM |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | No disponible |
| Pasos | Compruebe los privilegios de la cuenta de servicio y compruebe que los servicios personalizados o ASP.NET Pages respetan la seguridad de CRM. |
Uso de Data Management Gateway al conectar SQL Server local a Azure Data Factory
| Título | Detalles |
|---|---|
| Componente | Azure Data Factory |
| Fase de SDL | Despliegue |
| Tecnologías aplicables | Genérico |
| Atributos | Tipos de servicio vinculados: Azure y local |
| Referencias | Movimiento de datos entre el entorno local y Azure Data Factory |
| Pasos | La herramienta Data Management Gateway (DMG) es necesaria para conectarse a orígenes de datos que están protegidos detrás de una red corporativa o un firewall.
|
Asegúrese de que todo el tráfico a Identity Server se realiza a través de la conexión HTTPS
| Título | Detalles |
|---|---|
| Componente | Servidor de Identidad |
| Fase de SDL | Despliegue |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | No disponible |
| Pasos | De forma predeterminada, IdentityServer requiere que todas las conexiones entrantes lleguen a través de HTTPS. Es absolutamente obligatorio que la comunicación con IdentityServer se realice solo a través de transportes protegidos. Hay ciertos escenarios de implementación, como el desvío de carga de TLS, donde este requisito puede relajarse. Consulte la página Implementación de Identity Server en las referencias para obtener más información. |
Comprobación de los certificados X.509 usados para autenticar conexiones SSL, TLS y DTLS
| Título | Detalles |
|---|---|
| Componente | Aplicación web |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | No disponible |
| Pasos | Las aplicaciones que usan SSL, TLS o DTLS deben comprobar completamente los certificados X.509 de las entidades a las que se conectan. Esto incluye la comprobación de los certificados para:
|
Configuración del certificado TLS/SSL para un dominio personalizado en Azure App Service
| Título | Detalles |
|---|---|
| Componente | Aplicación web |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | EnvironmentType: Azure |
| Referencias | Habilitación de HTTPS para una aplicación en Azure App Service |
| Pasos | De forma predeterminada, Azure ya habilita HTTPS para cada aplicación con un certificado comodín para el dominio *.azurewebsites.net. Sin embargo, al igual que todos los dominios con caracteres comodín, no es tan seguro como el uso de un dominio personalizado con un certificado propio Refer. Se recomienda habilitar TLS para el dominio personalizado al que se accederá a la aplicación implementada a través de |
Forzar todo el tráfico a Azure App Service a través de la conexión HTTPS
| Título | Detalles |
|---|---|
| Componente | Aplicación web |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | EnvironmentType: Azure |
| Referencias | Aplicación de HTTPS en Azure App Service |
| Pasos | Aunque Azure ya habilita HTTPS para los servicios de aplicaciones de Azure con un certificado comodín para el dominio *.azurewebsites.net, no aplica HTTPS. Los visitantes todavía pueden acceder a la aplicación mediante HTTP, lo que puede poner en peligro la seguridad de la aplicación y, por lo tanto, HTTPS debe aplicarse explícitamente. Las aplicaciones MVC de ASP.NET deben usar el filtro RequireHttps que obliga a reenviar una solicitud HTTP no segura a través de HTTPS. Como alternativa, el módulo reescritura de direcciones URL, que se incluye con Azure App Service, se puede usar para aplicar HTTPS. El módulo Reescritura de direcciones URL permite a los desarrolladores definir reglas que se aplican a las solicitudes entrantes antes de que las solicitudes se entreguen a la aplicación. Las reglas de reescritura de direcciones URL se definen en un archivo web.config almacenado en la raíz de la aplicación. |
Ejemplo
El ejemplo siguiente contiene una regla básica de reescritura de direcciones URL que obliga a todo el tráfico entrante a usar HTTPS.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Force HTTPS" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Esta regla funciona devolviendo un código de estado HTTP de 301 (redirección permanente) cuando el usuario solicita una página mediante HTTP. El 301 redirige la solicitud a la misma dirección URL que el visitante solicitado, pero reemplaza la parte HTTP de la solicitud por HTTPS. Por ejemplo, HTTP://contoso.com se redirigiría a HTTPS://contoso.com.
Habilitación de la seguridad de transporte estricta HTTP (HSTS)
| Título | Detalles |
|---|---|
| Componente | Aplicación web |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | Hoja de referencia rápida de seguridad de transporte estricto HTTP del Proyecto de seguridad de aplicación web abierta |
| Pasos | HTTP Strict Transport Security (HSTS) es una mejora en la seguridad optativa especificada por una aplicación web a través de un encabezado de respuesta especial. Una vez que un explorador compatible recibe este encabezado, ese explorador impedirá que las comunicaciones se envíen a través de HTTP al dominio especificado y en su lugar enviarán todas las comunicaciones a través de HTTPS. También evita que aparezcan en los exploradores elementos click-through HTTPS. Para implementar HSTS, el siguiente encabezado de respuesta debe configurarse para un sitio web globalmente, ya sea en el código o en la configuración. Strict-Transport-Security: max-age=300; includeSubDomains HSTS aborda las siguientes amenazas:
|
Asegúrese de que haya cifrado de la conexión del servidor SQL y validación de certificados.
| Título | Detalles |
|---|---|
| Componente | Base de datos |
| Fase de SDL | Construir |
| Tecnologías aplicables | SQL Azure |
| Atributos | Versión de SQL: V12 |
| Referencias | Procedimientos recomendados para escribir cadenas de conexión seguras para SQL Database |
| Pasos | Todas las comunicaciones entre SQL Database y una aplicación cliente se cifran mediante la seguridad de la capa de transporte (TLS), anteriormente conocida como Capa de sockets seguros (SSL), en todo momento. SQL Database no admite conexiones sin cifrar. Para validar certificados con código de aplicación o herramientas, solicite explícitamente una conexión cifrada y no confíe en los certificados de servidor. Si el código o las herramientas de la aplicación no solicitan una conexión cifrada, seguirán recibiendo conexiones cifradas. Sin embargo, es posible que no validen los certificados de servidor y, por tanto, serán susceptibles a ataques de intermediario. Para validar certificados con ADO.NET código de aplicación, establezca |
Forzar la comunicación cifrada con SQL Server
| Título | Detalles |
|---|---|
| Componente | Base de datos |
| Fase de SDL | Construir |
| Tecnologías aplicables | OnPrem |
| Atributos | Versión de SQL: MsSQL2016, versión de SQL: MsSQL2012, versión de SQL: MsSQL2014 |
| Referencias | Habilitación de conexiones cifradas al motor de base de datos |
| Pasos | Al habilitar el cifrado TLS aumenta la seguridad de los datos que se transmiten a través de redes entre instancias de SQL Server y las aplicaciones. |
Asegúrese de que la comunicación con Azure Storage se realiza a través de HTTPS
| Título | Detalles |
|---|---|
| Componente | Azure Storage |
| Fase de SDL | Despliegue |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | Cifrado de Azure Storage Transport-Level: Uso de HTTPS |
| Pasos | Para garantizar la seguridad de los datos de Azure Storage en tránsito, use siempre el protocolo HTTPS al llamar a las API REST o acceder a objetos en el almacenamiento. Además, las firmas de acceso compartido, que se pueden usar para delegar el acceso a objetos de Azure Storage, incluyen una opción para especificar que solo se puede usar el protocolo HTTPS al usar firmas de acceso compartido, lo que garantiza que cualquier persona que envíe vínculos con tokens de SAS usará el protocolo adecuado. |
Validar el hash MD5 después de descargar el blob si no se puede habilitar HTTPS
| Título | Detalles |
|---|---|
| Componente | Azure Storage |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | StorageType: blob |
| Referencias | Introducción a Blob md5 de Windows Azure |
| Pasos | Blob service de Windows Azure proporciona mecanismos para garantizar la integridad de los datos tanto en las capas de aplicación como de transporte. Si por algún motivo necesita usar HTTP en lugar de HTTPS y está trabajando con blobs en bloques, puede usar la comprobación md5 para ayudar a comprobar la integridad de los blobs que se transfieren. Esto ayudará a proteger los errores de la capa de red o transporte, pero no necesariamente con ataques intermedios. Si puede usar HTTPS, que proporciona seguridad de nivel de transporte, el uso de la comprobación md5 es redundante e innecesario. |
Uso del cliente compatible con SMB 3.x para garantizar el cifrado de datos en tránsito a recursos compartidos de archivos de Azure
| Título | Detalles |
|---|---|
| Componente | Cliente móvil |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | StorageType: archivo |
| Referencias | Azure Files, compatibilidad con SMB de Azure Files para clientes Windows |
| Pasos | Azure Files admite HTTPS cuando se usa la API REST, pero se usa con más frecuencia como un recurso compartido de archivos SMB asociado a una máquina virtual. SMB 2.1 no admite el cifrado, por lo que las conexiones solo se permiten dentro de la misma región de Azure. Sin embargo, SMB 3.x admite el cifrado y se puede usar con Windows Server 2012 R2, Windows 8, Windows 8.1 y Windows 10, lo que permite el acceso entre regiones e incluso el acceso en el escritorio. |
Implementación de asignación de certificados
| Título | Detalles |
|---|---|
| Componente | Azure Storage |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico, Windows Phone |
| Atributos | No disponible |
| Referencias | Asignación de certificados y claves públicas |
| Pasos | La asignación de certificados protege frente a ataques de tipo "man in the middle". La asignación es el proceso de asociar un host a su certificado X509 o clave pública esperados. Una vez que se conoce o ve un certificado o una clave pública para un host, el certificado o la clave pública está asociado o "anclado" al host. De este modo, cuando un atacante intenta realizar un ataque de tipo "man in the middle" TLS, durante el protocolo de enlace TLS, la clave del servidor del atacante será distinta a la clave del certificado asignado, por lo que la solicitud se descartará, lo que evita que pueda realizarse una asignación de certificados mediante ataque de tipo "man in the middle" al implementar el delegado |
Ejemplo
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
namespace CertificatePinningExample
{
class CertificatePinningExample
{
/* Note: In this example, we're hardcoding the certificate's public key and algorithm for
demonstration purposes. In a real-world application, this should be stored in a secure
configuration area that can be updated as needed. */
private static readonly string PINNED_ALGORITHM = "RSA";
private static readonly string PINNED_PUBLIC_KEY = "3082010A0282010100B0E75B7CBE56D31658EF79B3A1" +
"294D506A88DFCDD603F6EF15E7F5BCBDF32291EC50B2B82BA158E905FE6A83EE044A48258B07FAC3D6356AF09B2" +
"3EDAB15D00507B70DB08DB9A20C7D1201417B3071A346D663A241061C151B6EC5B5B4ECCCDCDBEA24F051962809" +
"FEC499BF2D093C06E3BDA7D0BB83CDC1C2C6660B8ECB2EA30A685ADE2DC83C88314010FFC7F4F0F895EDDBE5C02" +
"ABF78E50B708E0A0EB984A9AA536BCE61A0C31DB95425C6FEE5A564B158EE7C4F0693C439AE010EF83CA8155750" +
"09B17537C29F86071E5DD8CA50EBD8A409494F479B07574D83EDCE6F68A8F7D40447471D05BC3F5EAD7862FA748" +
"EA3C92A60A128344B1CEF7A0B0D94E50203010001";
public static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://azure.microsoft.com");
request.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
if (certificate == null || sslPolicyErrors != SslPolicyErrors.None)
{
// Error getting certificate or the certificate failed basic validation
return false;
}
var targetKeyAlgorithm = new Oid(certificate.GetKeyAlgorithm()).FriendlyName;
var targetPublicKey = certificate.GetPublicKeyString();
if (targetKeyAlgorithm == PINNED_ALGORITHM &&
targetPublicKey == PINNED_PUBLIC_KEY)
{
// Success, the certificate matches the pinned value.
return true;
}
// Reject, either the key or the algorithm does not match the expected value.
return false;
};
try
{
var response = (HttpWebResponse)request.GetResponse();
Console.WriteLine($"Success, HTTP status code: {response.StatusCode}");
}
catch(Exception ex)
{
Console.WriteLine($"Failure, {ex.Message}");
}
Console.WriteLine("Press any key to end.");
Console.ReadKey();
}
}
}
Habilitación de HTTPS: canal de transporte seguro
| Título | Detalles |
|---|---|
| Componente | WCF (Windows Communication Foundation) |
| Fase de SDL | Construir |
| Tecnologías aplicables | NET Framework 3 |
| Atributos | No disponible |
| Referencias | MSDN, Fortify Kingdom |
| Pasos | La configuración de la aplicación debe asegurarse de que HTTPS se usa para todo el acceso a la información confidencial.
Desde un punto de vista práctico, las personas responsables de proteger la red no siempre realizan un seguimiento de los requisitos de seguridad de la aplicación a medida que evolucionan. |
WCF: establezca el nivel de protección de seguridad de mensajes en EncryptAndSign.
| Título | Detalles |
|---|---|
| Componente | WCF (Windows Communication Foundation) |
| Fase de SDL | Construir |
| Tecnologías aplicables | .NET Framework 3 |
| Atributos | No disponible |
| Referencias | msdn |
| Pasos |
Considere la posibilidad de desactivar el cifrado y firmar solo el mensaje cuando solo necesite validar la integridad de la información sin preocuparse de la confidencialidad. Esto puede ser útil para operaciones o contratos de servicio en los que necesita validar el remitente original, pero no se transmite ningún dato confidencial. Al reducir el nivel de protección, tenga cuidado de que el mensaje no contenga ningún dato personal. |
Ejemplo
La configuración del servicio y la operación para firmar solo el mensaje se muestra en los ejemplos siguientes. Ejemplo de contrato de servicio de ProtectionLevel.Sign: a continuación se muestra un ejemplo de uso de ProtectionLevel.Sign en el nivel contrato de servicio:
[ServiceContract(Protection Level=ProtectionLevel.Sign]
public interface IService
{
string GetData(int value);
}
Ejemplo
Ejemplo de contrato de operación de ProtectionLevel.Sign (para control granular): a continuación se muestra un ejemplo de uso ProtectionLevel.Sign en el nivel OperationContract:
[OperationContract(ProtectionLevel=ProtectionLevel.Sign]
string GetData(int value);
WCF: usar una cuenta con privilegios mínimos para ejecutar el servicio WCF
| Título | Detalles |
|---|---|
| Componente | WCF (Windows Communication Foundation) |
| Fase de SDL | Construir |
| Tecnologías aplicables | .NET Framework 3 |
| Atributos | No disponible |
| Referencias | msdn |
| Pasos |
Si su servicio necesita acceder a recursos específicos en nombre del autor de la llamada original, utilice la suplantación y la delegación para transferir la identidad del autor de la llamada y realizar una comprobación de autorización en un sistema descendente. En un escenario de desarrollo, use la cuenta de servicio de red local, que es una cuenta integrada especial que tiene privilegios reducidos. En un escenario de producción, cree una cuenta de servicio de dominio personalizado con privilegios mínimos. |
Direccionamiento forzoso de todo el tráfico a API web a través de una conexión HTTPS
| Título | Detalles |
|---|---|
| Componente | API de la Web |
| Fase de SDL | Construir |
| Tecnologías aplicables | MVC5, MVC6 |
| Atributos | No disponible |
| Referencias | Aplicación de SSL en un controlador de API web |
| Pasos | Si una aplicación tiene un enlace HTTPS y HTTP, los clientes pueden seguir usando HTTP para acceder al sitio. Para evitar esto, use un filtro de acciones para asegurarse de que las solicitudes a las API protegidas siempre se realizan a través de HTTPS. |
Ejemplo
En el código siguiente se muestra un filtro de autenticación de API web que comprueba tls:
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}
Agregue este filtro a cualquier acción de API web que requiera TLS:
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
Asegúrese de que la comunicación con Azure Cache for Redis se realiza a través de TLS
| Título | Detalles |
|---|---|
| Componente | Caché de Azure para Redis |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | Compatibilidad con TLS de Azure Redis |
| Pasos | El servidor de Redis no admite TLS de forma predeterminada, pero Azure Cache for Redis sí. Si se conecta a Azure Cache for Redis y el cliente admite TLS, como StackExchange.Redis, debe usar TLS. De forma predeterminada, el puerto que no es TLS está deshabilitado para las nuevas instancias de Azure Cache for Redis. Asegúrese de que los valores predeterminados seguros no se cambian a menos que haya una dependencia de la compatibilidad con TLS para los clientes de Redis. |
Tenga en cuenta que Redis está diseñado para que los clientes de confianza accedan a ellos dentro de entornos de confianza. Esto significa que normalmente no es una buena idea exponer la instancia de Redis directamente a Internet o, en general, a un entorno en el que los clientes que no son de confianza pueden acceder directamente al puerto TCP de Redis o al socket UNIX.
Comunicación segura de dispositivo a pasarela de campo
| Título | Detalles |
|---|---|
| Componente | Puerta de enlace de campo de IoT |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | No disponible |
| Pasos | En el caso de los dispositivos basados en IP, el protocolo de comunicación normalmente se podría encapsular en un canal SSL/TLS para proteger los datos en tránsito. Para otros protocolos que no admiten SSL/TLS, investigue si hay versiones seguras del protocolo que proporcionan seguridad en el nivel de transporte o mensaje. |
Protección de la comunicación de dispositivo a puerta de enlace en la nube mediante SSL/TLS
| Título | Detalles |
|---|---|
| Componente | Puerta de enlace de la nube de IoT |
| Fase de SDL | Construir |
| Tecnologías aplicables | Genérico |
| Atributos | No disponible |
| Referencias | Elegir el protocolo de comunicación |
| Pasos | Proteja los protocolos HTTP/AMQP o MQTT mediante SSL/TLS. |