Infrastruttura di sicurezza: sicurezza della comunicazione - Procedure di mitigazioneSecurity Frame: Communication Security | Mitigations

Prodotto o servizioProduct/Service ArticoloArticle
Hub eventi di AzureAzure Event Hub
Dynamics CRMDynamics CRM
Data factory di AzureAzure Data Factory
Identity ServerIdentity Server
Applicazione WebWeb Application
DatabaseDatabase
Archiviazione di AzureAzure Storage
Client per dispositivi mobiliMobile Client
WCFWCF
API WebWeb API
Cache Redis di AzureAzure Redis Cache
Gateway IoT sul campoIoT Field Gateway
Gateway IoT cloudIoT Cloud Gateway

Proteggere la comunicazione con l'hub eventi con SSL/TLSSecure communication to Event Hub using SSL/TLS

TitoloTitle DettagliDetails
ComponenteComponent Hub eventi di AzureAzure Event Hub
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Panoramica del modello di sicurezza e autenticazione di Hub eventiEvent Hubs authentication and security model overview
PassaggiSteps Proteggere le connessioni AMQP o HTTP con l'hub eventi usando SSL/TLSSecure AMQP or HTTP connections to Event Hub using SSL/TLS

Verificare i privilegi dell'account del servizio e controllare che le pagine ASP.NET o i servizi personalizzati rispettino la sicurezza di CRMCheck service account privileges and check that the custom Services or ASP.NET Pages respect CRM's security

TitoloTitle DettagliDetails
ComponenteComponent Dynamics CRMDynamics CRM
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Verificare i privilegi dell'account del servizio e controllare che le pagine ASP.NET o i servizi personalizzati rispettino la sicurezza di CRMCheck service account privileges and check that the custom Services or ASP.NET Pages respect CRM's security

Usare il gateway di gestione dati nella connessione dell'istanza locale di SQL Server ad Azure Data FactoryUse Data management gateway while connecting On Prem SQL Server to Azure Data Factory

TitoloTitle DettagliDetails
ComponenteComponent Data factory di AzureAzure Data Factory
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipi di servizio collegato: locale e AzureLinked Service Types - Azure and On Prem
RiferimentiReferences Spostamento di dati tra origini locali e Azure Data Factory, Gateway di gestione dati Moving data between On Prem and Azure Data Factory, Data management gateway
PassaggiSteps

Lo strumento Gateway di gestione dati è necessario per la connessione a origini dati protette da un firewall o dalla rete aziendale.The Data Management Gateway (DMG) tool is required to connect to data sources which are protected behind corpnet or a firewall.

  1. Bloccando il computer si isola lo strumento Gateway di gestione dati impedendo a programmi che non funzionano correttamente di danneggiare o analizzare il computer dell'origine dati.Locking down the machine isolates the DMG tool and prevents malfunctioning programs from damaging or snooping on the data source machine. Ad esempio,(E.g. in caso di installazione degli ultimi aggiornamenti, abilitazione delle porte necessarie minime, provisioning degli account controllati, abilitazione del controllo e della crittografia dei dischi e così via.latest updates must be installed, enable minimum required ports, controlled accounts provisioning, auditing enabled, disk encryption enabled etc.)
  2. È necessario eseguire la rotazione della chiave del gateway dati a intervalli frequenti o a ogni rinnovo della password dell'account del servizio Gateway di gestione dati.Data Gateway key must be rotated at frequent intervals or whenever the DMG service account password renews
  3. I transiti di dati attraverso il servizio di collegamento devono essere crittografati.Data transits through Link Service must be encrypted

Verificare che tutto il traffico verso Identity Server venga gestito su connessione HTTPSEnsure that all traffic to Identity Server is over HTTPS connection

TitoloTitle DettagliDetails
ComponenteComponent Identity ServerIdentity Server
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences IdentityServer3 - Keys, Signatures and Cryptography (IdentityServer3 - Chiavi, firme e crittografia), IdentityServer3 - Deployment (IdentityServer3 - Distribuzione)IdentityServer3 - Keys, Signatures and Cryptography, IdentityServer3 - Deployment
PassaggiSteps Per impostazione predefinita, IdentityServer richiede che tutte le connessioni in ingresso vengano effettuate tramite HTTPS.By default, IdentityServer requires all incoming connections to come over HTTPS. È assolutamente obbligatorio che per la comunicazione con IdentityServer vengano usati esclusivamente trasporti protetti.It is absolutely mandatory that communication with IdentityServer is done over secured transports only. In alcuni scenari di distribuzione, come l'offload SSL, questo requisito può essere meno rigido.There are certain deployment scenarios like SSL offloading where this requirement can be relaxed. Per altre informazioni, vedere la pagina relativa alla distribuzione di Identity Server indicata nei riferimenti.See the Identity Server deployment page in the references for more information.

Verificare i certificati X.509 usati per autenticare le connessioni SSL, TLS e DTLSVerify X.509 certificates used to authenticate SSL, TLS, and DTLS connections

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps

Le applicazioni che usano SSL, TLS o DTLS devono eseguire una verifica completa dei certificati X.509 delle entità a cui si connettono.Applications that use SSL, TLS, or DTLS must fully verify the X.509 certificates of the entities they connect to. Ciò include la verifica dei certificati in relazione a:This includes verification of the certificates for:

  • Nome di dominioDomain name
  • Date di validità (date sia di inizio che di scadenza)Validity dates (both beginning and expiration dates)
  • Stato di revocaRevocation status
  • Utilizzo (ad esempio, autenticazione server per i server o autenticazione client per i client)Usage (for example, Server Authentication for servers, Client Authentication for clients)
  • Catena di certificati.Trust chain. I certificati devono essere concatenati a un'autorità di certificazione radice (CA) considerata attendibile dalla piattaforma o configurata in modo esplicito dall'amministratoreCertificates must chain to a root certification authority (CA) that is trusted by the platform or explicitly configured by the administrator
  • La lunghezza della chiave pubblica del certificato deve essere superiore a 2048 bitKey length of certificate's public key must be >2048 bits
  • L'algoritmo di hash deve essere SHA256 o versione superioreHashing algorithm must be SHA256 and above

Configurare il certificato SSL per un dominio personalizzato nel servizio app di AzureConfigure SSL certificate for custom domain in Azure App Service

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipo di ambiente: AzureEnvironmentType - Azure
RiferimentiReferences Abilitare HTTPS per un'app in Azure App ServiceEnable HTTPS for an app in Azure App Service
PassaggiSteps Per impostazione predefinita, Azure abilita già HTTPS per ogni app con un certificato con caratteri jolly per il dominio *.azurewebsites.net.By default, Azure already enables HTTPS for every app with a wildcard certificate for the *.azurewebsites.net domain. Come tutti i domini con caratteri jolly, tuttavia, non è sicuro quanto un dominio personalizzato con un proprio certificato (riferimento).However, like all wildcard domains, it is not as secure as using a custom domain with own certificate Refer. È consigliabile abilitare SSL per il dominio personalizzato tramite il quale si accederà all'app distribuita.It is recommended to enable SSL for the custom domain which the deployed app will be accessed through

Forzare tutto il traffico verso il servizio app di Azure su una connessione HTTPSForce all traffic to Azure App Service over HTTPS connection

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipo di ambiente: AzureEnvironmentType - Azure
RiferimentiReferences Imporre HTTPS nel servizio app di AzureEnforce HTTPS on Azure App Service
PassaggiSteps

Nonostante Azure abiliti già HTTPS per i servizi app di Azure con un certificato con caratteri jolly per il dominio *.azurewebsites.net, non impone HTTPS.Though Azure already enables HTTPS for Azure app services with a wildcard certificate for the domain *.azurewebsites.net, it do not enforce HTTPS. I visitatori possono comunque accedere all'app usando HTTP e questo potrebbe compromettere la sicurezza dell'app. È quindi necessario imporre HTTPS in modo esplicito.Visitors may still access the app using HTTP, which may compromise the app's security and hence HTTPS has to be enforced explicitly. Le applicazioni ASP.NET MVC dovranno usare il filtro RequireHttps che forza il nuovo invio di una richiesta HTTP non protetta su HTTPS.ASP.NET MVC applications should use the RequireHttps filter that forces an unsecured HTTP request to be re-sent over HTTPS.

In alternativa, per imporre HTTPS è possibile usare il modulo URL Rewrite incluso con Servizio app di Azure.Alternatively, the URL Rewrite module, which is included with Azure App Service can be used to enforce HTTPS. Il modulo URL Rewrite consente agli sviluppatori di definire le regole applicate alle richieste in ingresso prima che queste vengano passate all'applicazione.URL Rewrite module enables developers to define rules that are applied to incoming requests before the requests are handed to your application. Le regole di URL Rewrite sono definite in un file web.config archiviato nella radice dell'applicazione.URL Rewrite rules are defined in a web.config file stored in the root of the application

EsempioExample

L'esempio seguente contiene una regola di base di URL Rewrite che forza l'uso di HTTPS per tutto il traffico in ingresso.The following example contains a basic URL Rewrite rule that forces all incoming traffic to use 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>

Il funzionamento di questa regola prevede la restituzione di un codice di stato HTTP 301 (reindirizzamento permanente) quando l'utente richiede una pagina mediante HTTP.This rule works by returning an HTTP status code of 301 (permanent redirect) when the user requests a page using HTTP. Il codice 301 reindirizza la richiesta allo stesso URL richiesto dal visitatore, ma sostituisce la parte HTTP della richiesta con HTTPS.The 301 redirects the request to the same URL as the visitor requested, but replaces the HTTP portion of the request with HTTPS. Ad esempio, HTTP://contoso.com viene reindirizzato a HTTPS://contoso.com.For example, HTTP://contoso.com would be redirected to HTTPS://contoso.com.

Abilitare HTTP Strict Transport Security (HSTS)Enable HTTP Strict Transport Security (HSTS)

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Foglio informativo di OWASP su HTTP Strict Transport SecurityOWASP HTTP Strict Transport Security Cheat Sheet
PassaggiSteps

HTTP Strict Transport Security (HSTS) è un miglioramento della sicurezza con consenso esplicito che viene specificato da un'applicazione Web usando una speciale intestazione della risposta.HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is specified by a web application through the use of a special response header. Quando un browser supportato riceve questa intestazione, impedisce l'invio tramite HTTP di qualsiasi comunicazione al dominio specificato e invia tutte le comunicazioni tramite HTTPS.Once a supported browser receives this header that browser will prevent any communications from being sent over HTTP to the specified domain and will instead send all communications over HTTPS. Impedisce anche i messaggi di richiesta con click-through HTTPS nei browser.It also prevents HTTPS click through prompts on browsers.

Per implementare HSTS, è necessario configurare l'intestazione della risposta seguente per un sito Web a livello globale, nel codice o nella configurazione. Strict-Transport-Security: max-age=300; includeSubDomains. HSTS gestisce le minacce seguenti.To implement HSTS, the following response header has to be configured for a website globally, either in code or in config. Strict-Transport-Security: max-age=300; includeSubDomains HSTS addresses the following threats:

  • L'utente imposta come segnalibro o digita manualmente http://example.com ed è soggetto a un attacco man-in-the-middle: HSTS reindirizza automaticamente le richieste HTTP a HTTPS per il dominio di destinazioneUser bookmarks or manually types http://example.com and is subject to a man-in-the-middle attacker: HSTS automatically redirects HTTP requests to HTTPS for the target domain
  • Un'applicazione Web che dovrebbe essere esclusivamente HTTPS inavvertitamente contiene collegamenti HTTP o fornisce contenuti tramite HTTP: HSTS reindirizza automaticamente le richieste HTTP a HTTPS per il dominio di destinazioneWeb application that is intended to be purely HTTPS inadvertently contains HTTP links or serves content over HTTP: HSTS automatically redirects HTTP requests to HTTPS for the target domain
  • Un utente malintenzionato tenta con un attacco man-in-the-middle di intercettare il traffico da un utente vittima con un certificato non valido sperando che l'utente accetti tale certificato: HSTS non consente a un utente di eseguire l'override del messaggio di certificato non validoA man-in-the-middle attacker attempts to intercept traffic from a victim user using an invalid certificate and hopes the user will accept the bad certificate: HSTS does not allow a user to override the invalid certificate message

Verificare la crittografia della connessione e la convalida dei certificati di SQL ServerEnsure SQL server connection encryption and certificate validation

TitoloTitle DettagliDetails
ComponenteComponent DatabaseDatabase
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies SQL AzureSQL Azure
Attributes (Attributi) (Attributi)Attributes Versione SQL: 12SQL Version - V12
RiferimentiReferences Best Practices on Writing Secure Connection Strings for SQL Database (Procedure consigliate per la scrittura di stringhe di connessione sicure per il database SQL)Best Practices on Writing Secure Connection Strings for SQL Database
PassaggiSteps

Tutte le comunicazioni tra il database SQL e un'applicazione client vengono crittografate usando sempre Secure Sockets Layer (SSL).All communications between SQL Database and a client application are encrypted using Secure Sockets Layer (SSL) at all times. Il database SQL non supporta connessioni non crittografate.SQL Database doesn’t support unencrypted connections. Per convalidare i certificati con gli strumenti o il codice dell'applicazione, richiedere una connessione crittografata in modo esplicito e non considerare attendibili i certificati del server.To validate certificates with application code or tools, explicitly request an encrypted connection and do not trust the server certificates. Se il codice dell'applicazione o gli strumenti non richiedono una connessione crittografata, riceveranno comunque connessioni crittografate.If your application code or tools do not request an encrypted connection, they will still receive encrypted connections

Tuttavia, potrebbero non convalidare i certificati del server e pertanto saranno soggetti ad attacchi "man in the middle".However, they may not validate the server certificates and thus will be susceptible to "man in the middle" attacks. Per convalidare i certificati con il codice dell'applicazione ADO.NET, impostare Encrypt=True e TrustServerCertificate=False nella stringa di connessione del database.To validate certificates with ADO.NET application code, set Encrypt=True and TrustServerCertificate=False in the database connection string. Per convalidare i certificati tramite SQL Server Management Studio, aprire la finestra di dialogo Connetti al server.To validate certificates via SQL Server Management Studio, open the Connect to Server dialog box. Fare clic su Crittografa connessione nella scheda Proprietà connessione.Click Encrypt connection on the Connection Properties tab

Forzare la comunicazione crittografata con SQL ServerForce Encrypted communication to SQL server

TitoloTitle DettagliDetails
ComponenteComponent DatabaseDatabase
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies LocaleOnPrem
Attributes (Attributi) (Attributi)Attributes Versione SQL: MsSQL2016, MsSQL2012, MsSQL2014SQL Version - MsSQL2016, SQL Version - MsSQL2012, SQL Version - MsSQL2014
RiferimentiReferences Abilitare le connessioni crittografate al motore di databaseEnable Encrypted Connections to the Database Engine
PassaggiSteps Abilitando la crittografia SSL aumenta la sicurezza dei dati trasmessi sulle reti tra le istanze di SQL Server e le applicazioni.Enabling SSL encryption increases the security of data transmitted across networks between instances of SQL Server and applications.

Verificare che per la comunicazione con Archiviazione di Azure venga usato HTTPSEnsure that communication to Azure Storage is over HTTPS

TitoloTitle DettagliDetails
ComponenteComponent Archiviazione di AzureAzure Storage
Fase SDLSDL Phase DistribuzioneDeployment
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Crittografia a livello di trasporto in Archiviazione di Azure: uso di HTTPSAzure Storage Transport-Level Encryption – Using HTTPS
PassaggiSteps Per garantire la sicurezza dei dati di Archiviazione di Azure in transito, quando si chiamano le API REST o si accede a oggetti nelle risorse di archiviazione usare sempre il protocollo HTTPS.To ensure the security of Azure Storage data in-transit, always use the HTTPS protocol when calling the REST APIs or accessing objects in storage. Le firme di accesso condiviso, che possono essere usate per delegare l'accesso a oggetti di Archiviazione di Azure, includono la possibilità di specificare che quando si usano firme di accesso condiviso può essere usato solo il protocollo HTTPS, in modo da garantire che chiunque invii collegamenti con token di firma di accesso condiviso usi il protocollo corretto.Also, Shared Access Signatures, which can be used to delegate access to Azure Storage objects, include an option to specify that only the HTTPS protocol can be used when using Shared Access Signatures, ensuring that anybody sending out links with SAS tokens will use the proper protocol.

Convalidare l'hash MD5 dopo il download di BLOB se non è possibile abilitare HTTPSValidate MD5 hash after downloading blob if HTTPS cannot be enabled

TitoloTitle DettagliDetails
ComponenteComponent Archiviazione di AzureAzure Storage
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipo di archiviazione: BLOBStorageType - Blob
RiferimentiReferences Windows Azure Blob MD5 Overview (Panoramica di MD5 nel servizio BLOB di Microsoft Azure)Windows Azure Blob MD5 Overview
PassaggiSteps

Il servizio BLOB di Microsoft Azure offre meccanismi per garantire l'integrità dei dati sia al livello dell'applicazione che al livello trasporto.Windows Azure Blob service provides mechanisms to ensure data integrity both at the application and transport layers. Se per qualsiasi motivo è necessario usare HTTP anziché HTTPS e si usano BLOB in blocchi, è possibile usare il controllo MD5 per verificare l'integrità dei BLOB in fase di trasferimento.If for any reason you need to use HTTP instead of HTTPS and you are working with block blobs, you can use MD5 checking to help verify the integrity of the blobs being transferred

Ciò contribuisce a proteggere dagli errori a livello di rete/trasporto, ma non necessariamente dalle violazioni.This will help with protection from network/transport layer errors, but not necessarily with intermediary attacks. Se è possibile utilizzare HTTPS, che fornisce la protezione a livello di trasporto, il controllo MD5 è ridondante e superfluo.If you can use HTTPS, which provides transport level security, then using MD5 checking is redundant and unnecessary.

Usare un client compatibile con SMB 3.0 per garantire la crittografia dei dati in transito per le condivisioni file di AzureUse SMB 3.0 compatible client to ensure in-transit data encryption to Azure File shares

TitoloTitle DettagliDetails
ComponenteComponent Client per dispositivi mobiliMobile Client
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes Tipo di archiviazione: fileStorageType - File
RiferimentiReferences Archiviazione file di Azure, Supporto di SMB in Archiviazione file di Azure per client WindowsAzure File Storage, Azure File Storage SMB Support for Windows Clients
PassaggiSteps Il servizio di archiviazione file di Azure supporta HTTPS quando si usa l'API REST, ma è più comunemente usato come una condivisione file SMB collegata a una VM.Azure File Storage supports HTTPS when using the REST API, but is more commonly used as an SMB file share attached to a VM. SMB 2.1 non supporta la crittografia, quindi le connessioni sono consentite solo all'interno della stessa area in Azure.SMB 2.1 does not support encryption, so connections are only allowed within the same region in Azure. Tuttavia, SMB 3.0 supporta la crittografia e può essere usato con Windows Server 2012 R2, Windows 8, Windows 8.1 e Windows 10, consentendo l'accesso tra aree e anche l'accesso sul desktop.However, SMB 3.0 supports encryption, and can be used with Windows Server 2012 R2, Windows 8, Windows 8.1, and Windows 10, allowing cross-region access and even access on the desktop.

Implementare l'associazione del certificatoImplement Certificate Pinning

TitoloTitle DettagliDetails
ComponenteComponent Archiviazione di AzureAzure Storage
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies Generico, Windows PhoneGeneric, Windows Phone
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Associazione del certificato e della chiave pubblicaCertificate and Public Key Pinning
PassaggiSteps

L'associazione del certificato protegge da attacchi man-in-the-middle.Certificate pinning defends against Man-In-The-Middle (MITM) attacks. L'associazione è il processo con cui un host viene associato alla chiave pubblica o al certificato X509 previsto.Pinning is the process of associating a host with their expected X509 certificate or public key. Quando per un host è noto o visibile un certificato o una chiave pubblica, questo viene associato all'host.Once a certificate or public key is known or seen for a host, the certificate or public key is associated or 'pinned' to the host.

Di conseguenza, quando un antagonista tenta un attacco man-in-the-middle SSL, durante l'handshake SSL la chiave del server dell'utente malintenzionato sarà diversa dalla chiave del certificato associato e la richiesta verrà rimossa, impedendo così l'attacco man-in-the-middle. L'associazione del certificato può essere ottenuta implementando il delegato ServerCertificateValidationCallback di ServicePointManager.Thus, when an adversary attempts to do SSL MITM attack, during SSL handshake the key from attacker's server will be different from the pinned certificate's key, and the request will be discarded, thus preventing MITM Certificate pinning can be achieved by implementing ServicePointManager's ServerCertificateValidationCallback delegate.

EsempioExample

using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;

namespace CertificatePinningExample
{
    class CertificatePinningExample
    {
        /* Note: In this example, we're hardcoding a 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();
        }
    }
}

Abilitare HTTPS: canale di trasporto sicuroEnable HTTPS - Secure Transport channel

TitoloTitle DettagliDetails
ComponenteComponent WCFWCF
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies .NET Framework 3NET Framework 3
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences MSDN, Fortify KingdomMSDN, Fortify Kingdom
PassaggiSteps La configurazione dell'applicazione deve garantire l'uso di HTTPS per tutti gli accessi a informazioni riservate.The application configuration should ensure that HTTPS is used for all access to sensitive information.
  • SPIEGAZIONE: se un'applicazione che gestisce informazioni riservate non usa la crittografia a livello di messaggio, all'applicazione deve essere consentita la comunicazione solo tramite un canale di trasporto crittografato.EXPLANATION: If an application handles sensitive information and does not use message-level encryption, then it should only be allowed to communicate over an encrypted transport channel.
  • RACCOMANDAZIONI: verificare che il trasporto HTTP sia disabilitato e abilitare invece il trasporto HTTPS.RECOMMENDATIONS: Ensure that HTTP transport is disabled and enable HTTPS transport instead. Ad esempio, sostituire il tag <httpTransport/> con il tag <httpsTransport/>.For example, replace the <httpTransport/> with <httpsTransport/> tag. Non basarsi su una configurazione di rete (firewall) per garantire che l'applicazione sia accessibile solo tramite un canale sicuro.Do not rely on a network configuration (firewall) to guarantee that the application can only be accessed over a secure channel. Da un punto di vista teorico, l'applicazione non deve dipendere dalla rete per la sicurezza.From a philosophical point of view, the application should not depend on the network for its security.

Da un punto di vista pratico, le persone responsabili della protezione della rete non sempre tengono traccia dell'evoluzione dei requisiti di sicurezza dell'applicazione.From a practical point of view, the people responsible for securing the network do not always track the security requirements of the application as they evolve.

WCF: impostare il livello di protezione per la sicurezza dei messaggi su EncryptAndSignWCF: Set Message security Protection level to EncryptAndSign

TitoloTitle DettagliDetails
ComponenteComponent WCFWCF
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies .NET Framework 3.NET Framework 3
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences MSDNMSDN
PassaggiSteps
  • SPIEGAZIONE: quando il livello di protezione è impostato su "None", la protezione dei messaggi verrà disabilitata.EXPLANATION: When Protection level is set to "none" it will disable message protection. La riservatezza e l'integrità si ottengono con il livello di impostazione appropriato.Confidentiality and integrity is achieved with appropriate level of setting.
  • RACCOMANDAZIONI:RECOMMENDATIONS:
    • Quando Mode=None, la protezione dei messaggi è disabilitatawhen Mode=None - Disables message protection
    • Quando Mode=Sign, il messaggio viene firmato ma non crittografato. Questa impostazione deve essere usata quando è importante l'integrità dei datiwhen Mode=Sign - Signs but does not encrypt the message; should be used when data integrity is important
    • Quando Mode=EncryptAndSign, il messaggio viene firmato e crittografatowhen Mode=EncryptAndSign - Signs and encrypts the message

Quando è sufficiente convalidare l'integrità delle informazioni senza problemi di riservatezza, valutare la possibilità di disattivare la crittografia e limitarsi alla firma del messaggio.Consider turning off encryption and only signing your message when you just need to validate the integrity of the information without concerns of confidentiality. Questo può risultare utile per contratti di operazione o di servizio in cui è necessario convalidare il mittente originale ma non vengono trasmessi dati sensibili.This may be useful for operations or service contracts in which you need to validate the original sender but no sensitive data is transmitted. Quando si riduce il livello di protezione, assicurarsi che il messaggio non contenga informazioni personali.When reducing the protection level, be careful that the message does not contain any personally identifiable information (PII).

EsempioExample

Gli esempi seguenti illustrano la configurazione del servizio e dell'operazione per la sola firma del messaggio.Configuring the service and the operation to only sign the message is shown in the following examples. Esempio di contratto di servizio con ProtectionLevel.Sign: di seguito è riportato un esempio dell'uso di ProtectionLevel.Sign a livello di contratto di servizio.Service Contract Example of ProtectionLevel.Sign: The following is an example of using ProtectionLevel.Sign at the Service Contract level:

[ServiceContract(Protection Level=ProtectionLevel.Sign] 
public interface IService 
  { 
  string GetData(int value); 
  } 

EsempioExample

Esempio di contratto di operazione con ProtectionLevel.Sign (per un controllo granulare): di seguito è riportato un esempio dell'uso di ProtectionLevel.Sign a livello di contratto di operazione.Operation Contract Example of ProtectionLevel.Sign (for Granular Control): The following is an example of using ProtectionLevel.Sign at the OperationContract level:

[OperationContract(ProtectionLevel=ProtectionLevel.Sign] 
string GetData(int value);

WCF: usare un account con privilegi minimi per eseguire il servizio WCFWCF: Use a least-privileged account to run your WCF service

TitoloTitle DettagliDetails
ComponenteComponent WCFWCF
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies .NET Framework 3.NET Framework 3
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences MSDNMSDN
PassaggiSteps
  • SPIEGAZIONE: non eseguire i servizi WCF con un account amministratore o con privilegi elevati,EXPLANATION: Do not run WCF services under admin or high privilege account. che comporterebbe un alto impatto in caso di compromissione dei servizi.in case of services compromise it will result in high impact.
  • RACCOMANDAZIONI: per ospitare il servizio WCF usare un account con privilegi minimi, in modo da ridurre la superficie di attacco dell'applicazione e il potenziale danno in caso di attacco.RECOMMENDATIONS: Use a least-privileged account to host your WCF service because it will reduce your application's attack surface and reduce the potential damage if you are attacked. Se l'account del servizio richiede diritti di accesso aggiuntivi per risorse dell'infrastruttura come MSMQ, il registro eventi, i contatori delle prestazioni e il file system, è necessario concedere autorizzazioni appropriate a tali risorse in modo da consentire la corretta esecuzione del servizio WCF.If the service account requires additional access rights on infrastructure resources such as MSMQ, the event log, performance counters, and the file system, appropriate permissions should be given to these resources so that the WCF service can run successfully.

Se il servizio deve accedere a risorse specifiche per conto del chiamante originale, usare la rappresentazione e la delega per trasferire l'identità del chiamante per un controllo di autorizzazione downstream.If your service needs to access specific resources on behalf of the original caller, use impersonation and delegation to flow the caller's identity for a downstream authorization check. In uno scenario di sviluppo, usare l'account del servizio di rete locale, ovvero un account predefinito speciale con privilegi ridotti.In a development scenario, use the local network service account, which is a special built-in account that has reduced privileges. In uno scenario di produzione, creare un account di servizio del dominio personalizzato con privilegi minimi.In a production scenario, create a least-privileged custom domain service account.

Forzare tutto il traffico verso le API Web su una connessione HTTPSForce all traffic to Web APIs over HTTPS connection

TitoloTitle DettagliDetails
ComponenteComponent API WebWeb API
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies MVC 5, MVC 6MVC5, MVC6
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Imporre SSL in un controller di API WebEnforcing SSL in a Web API Controller
PassaggiSteps Se un'applicazione include sia un'associazione HTTPS che un'associazione HTTP, i client possono comunque usare HTTP per accedere al sito.If an application has both an HTTPS and an HTTP binding, clients can still use HTTP to access the site. Per impedirlo, usare un filtro azioni per garantire che per le richieste per le API protette venga sempre usato HTTPS.To prevent this, use an action filter to ensure that requests to protected APIs are always over HTTPS.

EsempioExample

Il codice seguente illustra un filtro di autenticazione di API Web che verifica la presenza di SSL:The following code shows a Web API authentication filter that checks for SSL:

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);
        }
    }
}

Aggiungere questo filtro a tutte le azioni di API Web che richiedono SSL:Add this filter to any Web API actions that require SSL:

public class ValuesController : ApiController
{
    [RequireHttps]
    public HttpResponseMessage Get() { ... }
}

Verificare che per la comunicazione con Cache Redis di Azure venga usato SSLEnsure that communication to Azure Redis Cache is over SSL

TitoloTitle DettagliDetails
ComponenteComponent Cache Redis di AzureAzure Redis Cache
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Supporto per SSL in Redis di AzureAzure Redis SSL support
PassaggiSteps Il server Redis non offre il supporto predefinito per SSL, ma tale supporto è disponibile nella Cache Redis di Azure.Redis server does not support SSL out of the box, but Azure Redis Cache does. Se ci si connette alla Cache Redis di Azure e il client supporta SSL, ad esempio StackExchange.Redis, è consigliabile usare SSL.If you are connecting to Azure Redis Cache and your client supports SSL, like StackExchange.Redis, then you should use SSL. Per impostazione predefinita, la porta non SSL è disabilitata per le nuove istanze di Cache Redis di Azure.By default non-SSL port is disabled for new Azure Redis Cache instances. Verificare che le impostazioni predefinite sicure non vengano modificate a meno che non esista una dipendenza dei client Redis dal supporto per SSL.Ensure that the secure defaults are not changed unless there is a dependency on SSL support for redis clients.

Si noti che Redis è progettato per essere accessibile da client attendibili all'interno di ambienti attendibili.Please note that Redis is designed to be accessed by trusted clients inside trusted environments. Di conseguenza, non è solitamente opportuno esporre l'istanza di Redis direttamente a Internet o, in generale, a un ambiente in cui client non attendibili possono accedere direttamente al socket UNIX o alla porta TCP di Redis.This means that usually it is not a good idea to expose the Redis instance directly to the internet or, in general, to an environment where untrusted clients can directly access the Redis TCP port or UNIX socket.

Proteggere la comunicazione da dispositivo a gateway sul campoSecure Device to Field Gateway communication

TitoloTitle DettagliDetails
ComponenteComponent Gateway IoT sul campoIoT Field Gateway
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
PassaggiSteps Per i dispositivi basati su IP, il protocollo di comunicazione può in genere essere incapsulato in un canale SSL/TLS per proteggere i dati in transito.For IP based devices, the communication protocol could typically be encapsulated in a SSL/TLS channel to protect data in transit. Per altri protocolli che non supportano SSL/TLS, verificare se sono disponibili versioni sicure del protocollo che offrono sicurezza a livello di trasporto o di messaggio.For other protocols that do not support SSL/TLS investigate if there are secure versions of the protocol that provide security at transport or message layer.

Proteggere la comunicazione da dispositivo a gateway nel cloud con SSL/TLSSecure Device to Cloud Gateway communication using SSL/TLS

TitoloTitle DettagliDetails
ComponenteComponent Gateway IoT cloudIoT Cloud Gateway
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences Scegliere il protocollo di comunicazioneChoose your Communication Protocol
PassaggiSteps Proteggere i protocolli HTTP/AMQP e MQTT con SSL/TLS.Secure HTTP/AMQP or MQTT protocols using SSL/TLS.