Sdílet prostřednictvím


Bezpečnostní rámec: Zabezpečení komunikace | Zmírnění rizik

Produkt/služba Článek
Centrum událostí Azure
Dynamics CRM
Azure Data Factory
Server identit
Webová aplikace
Databáze
Azure Storage
Mobilní klient
WCF
Webové rozhraní API
Azure Cache for Redis
IoT Field Gateway
Cloudová brána IoT

Zabezpečená komunikace s centrem událostí pomocí PROTOKOLU SSL/TLS

Titulek Podrobnosti
Součást Centrum událostí Azure
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy Přehled ověřování a modelu zabezpečení služby Event Hubs
Kroky Zabezpečení připojení AMQP nebo HTTP ke službě Event Hub pomocí PROTOKOLU SSL/TLS

Zkontrolujte oprávnění účtu služby a zkontrolujte, jestli vlastní služby nebo ASP.NET Pages respektují zabezpečení CRM.

Titulek Podrobnosti
Součást Dynamics CRM
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy není k dispozici
Kroky Zkontrolujte oprávnění účtu služby a zkontrolujte, jestli vlastní služby nebo ASP.NET Pages respektují zabezpečení CRM.

Použití brány pro správu dat při připojování místního SQL Serveru ke službě Azure Data Factory

Titulek Podrobnosti
Součást Azure Data Factory
Fáze SDL Nasazení
Použitelné technologie Obecná
Atributy Typy propojených služeb – Azure a místní prostředí
Odkazy Přesun dat mezi místním prostředím a službou Azure Data Factory
Kroky

Nástroj Data Management Gateway (DMG) je vyžadován pro připojení ke zdrojům dat, které jsou chráněné za firewallem nebo korporátní sítí.

  1. Uzamčení počítače izoluje nástroj DMG a zabraňuje poruchovým programům v poškození nebo špehování zdrojového počítače dat. (Např. musí být nainstalovány nejnovější aktualizace, povolte minimální požadované porty, řízené zřizování účtů, auditování povoleno, šifrování disků povoleno atd.)
  2. Klíč brány dat se musí obměňovat v častých intervalech nebo při každém prodloužení platnosti hesla účtu služby DMG.
  3. Přenosy dat přes linkovou službu musí být šifrované.

Ujistěte se, že veškerý provoz na server identit je přes připojení HTTPS.

Titulek Podrobnosti
Součást Server identit
Fáze SDL Nasazení
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy není k dispozici
Kroky Ve výchozím nastavení identityServer vyžaduje, aby se všechna příchozí připojení přecházela přes PROTOKOL HTTPS. Je naprosto povinné, že komunikace s IdentityServerem se provádí pouze přes zabezpečené přenosy. Existují určité scénáře nasazení, jako je přesměrování zpracování TLS, kde lze tento požadavek zmírnit. Další informace najdete na stránce nasazení serveru identit v referenčních informacích.

Ověření certifikátů X.509 používaných k ověřování připojení SSL, TLS a DTLS

Titulek Podrobnosti
Součást Webová aplikace
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy není k dispozici
Kroky

Aplikace, které používají protokol SSL, TLS nebo DTLS, musí plně ověřit certifikáty X.509 entit, ke kterým se připojují. To zahrnuje ověření certifikátů pro:

  • Název domény
  • Data platnosti (počáteční i vypršení platnosti)
  • Stav odvolání
  • Použití (například Ověřování serveru pro servery, Ověřování klientů pro klienty)
  • Řetězec důvěry. Certifikáty musí být zřetězené s kořenovou certifikační autoritou (CA), která je důvěryhodná platformou nebo explicitně nakonfigurované správcem.
  • Délka klíče veřejného klíče certifikátu musí být >2048 bitů.
  • Algoritmus hash musí být SHA256 a vyšší.

Konfigurace certifikátu TLS/SSL pro vlastní doménu ve službě Azure App Service

Titulek Podrobnosti
Součást Webová aplikace
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy EnvironmentType – Azure
Odkazy Povolení HTTPS pro aplikaci ve službě Azure App Service
Kroky Azure už ve výchozím nastavení povoluje HTTPS pro každou aplikaci se zástupným certifikátem pro doménu *.azurewebsites.net. Stejně jako všechny zástupné domény není tak bezpečné jako použití vlastní domény s vlastním certifikátem Refer. Doporučujeme povolit protokol TLS pro vlastní doménu, ke které bude nasazená aplikace přistupovat prostřednictvím

Vynucení veškerého provozu do služby Azure App Service přes připojení HTTPS

Titulek Podrobnosti
Součást Webová aplikace
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy EnvironmentType – Azure
Odkazy Vynucení HTTPS ve službě Azure App Service
Kroky

I když Azure už pro aplikační služby Azure povoluje https s certifikátem se zástupnými znamény pro doménu *.azurewebsites.net, nevynucuje HTTPS. Návštěvníci můžou k aplikaci dál přistupovat pomocí protokolu HTTP, což může ohrozit zabezpečení aplikace, a proto je nutné explicitně vynutit HTTPS. ASP.NET aplikace MVC by měly používat filtr RequireHttps , který vynutí opětovné odeslání nezabezpečeného požadavku HTTP přes HTTPS.

Případně můžete použít modul pro přepsání adresy URL, který je součástí služby Azure App Service k vynucování HTTPS. Modul pro přepsání adresy URL umožňuje vývojářům definovat pravidla, která se použijí na příchozí požadavky, než se požadavky předají vaší aplikaci. Pravidla přepsání adresy URL jsou definována v souboru web.config uloženém v kořenovém adresáři aplikace.

Příklad

Následující příklad obsahuje základní pravidlo přepsání adresy URL, které vynutí, aby veškerý příchozí provoz používal PROTOKOL 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>

Toto pravidlo funguje tak, že vrátí stavový kód HTTP 301 (trvalé přesměrování), když uživatel požádá o stránku pomocí protokolu HTTP. 301 přesměruje požadavek na stejnou adresu URL, jakou návštěvník požadoval, ale nahradí část požadavku HTTP s HTTPS. Například HTTP://contoso.com by bylo přesměrováno na HTTPS://contoso.com.

Povolení přísného zabezpečení přenosu HTTP (HSTS)

Titulek Podrobnosti
Součást Webová aplikace
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy Stručná nápověda k zabezpečení přenosu HTTP OWASP
Kroky

Http Strict Transport Security (HSTS) je vylepšení zabezpečení výslovného souhlasu určené webovou aplikací pomocí speciální hlavičky odpovědi. Jakmile podporovaný prohlížeč obdrží tuto hlavičku, zabrání prohlížeči, aby se veškerá komunikace odesílala přes protokol HTTP do zadané domény a místo toho odešle veškerou komunikaci přes PROTOKOL HTTPS. Zabraňuje také přeskočení výzev HTTPS kliknutím v prohlížečích.

Aby bylo možné implementovat HSTS, musí být následující hlavička odpovědi nakonfigurovaná pro web globálně, a to buď v kódu, nebo v konfiguraci. Striktní transportní zabezpečení: max-age=300; includeSubDomains HSTS řeší následující hrozby:

  • Uživatelské záložky nebo ručně zadá https://example.com a může být napaden útokem typu man-in-the-middle: HSTS automaticky přesměruje požadavky HTTP na HTTPS pro cílovou doménu.
  • Webová aplikace, která má být pouze HTTPS, neúmyslně obsahuje odkazy HTTP nebo zobrazuje obsah přes HTTP: HSTS automaticky přesměruje požadavky HTTP na HTTPS pro cílovou doménu.
  • Útočník typu man-in-the-middle se pokusí zachytit provoz od oběti pomocí neplatného certifikátu a doufá, že uživatel přijme chybný certifikát: HSTS neumožňuje uživateli obejít varování o neplatném certifikátu.

Zajištění šifrování připojení k SQL Serveru a ověření certifikátu

Titulek Podrobnosti
Součást Databáze
Fáze SDL Stavět
Použitelné technologie SQL Azure
Atributy Verze SQL – V12
Odkazy Osvědčené postupy pro zápis zabezpečených připojovacích řetězců pro SQL Database
Kroky

Veškerá komunikace mezi SQL Database a klientskou aplikací se šifruje pomocí protokolu TLS (Transport Layer Security), dříve označovaného jako SSL (Secure Sockets Layer). SQL Database nepodporuje nešifrovaná připojení. Pokud chcete ověřit certifikáty pomocí kódu aplikace nebo nástrojů, explicitně požádejte o šifrované připojení a nedůvěřujte certifikátům serveru. Pokud kód nebo nástroje vaší aplikace nevyžadují šifrované připojení, budou stále přijímat šifrovaná připojení.

Ale nemusí ověřovat certifikáty serveru, a proto budou náchylné k útokům typu man-in-the-middle. Pokud chcete ověřit certifikáty pomocí ADO.NET kódu aplikace, nastavte Encrypt=True a TrustServerCertificate=False v připojovacím řetězci databáze. Pokud chcete ověřit certifikáty prostřednictvím aplikace SQL Server Management Studio, otevřete dialogové okno Připojit k serveru. Na kartě Vlastnosti připojení klikněte na Tlačítko Zašifrovat připojení.

Vynucení šifrované komunikace na SQL Server

Titulek Podrobnosti
Součást Databáze
Fáze SDL Stavět
Použitelné technologie Místní
Atributy Verze SQL – MsSQL2016, verze SQL – MsSQL2012, verze SQL – MsSQL2014
Odkazy Povolení šifrovaných připojení k databázovému stroji
Kroky Povolení šifrování TLS zvyšuje zabezpečení dat přenášených mezi sítěmi mezi instancemi SQL Serveru a aplikacemi.

Ujistěte se, že komunikace se službou Azure Storage je přes PROTOKOL HTTPS.

Titulek Podrobnosti
Součást Azure Storage
Fáze SDL Nasazení
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy Šifrování Azure Storage Transport-Level – použití HTTPS
Kroky K zajištění zabezpečení přenášených dat Azure Storage vždy při volání rozhraní REST API nebo přístupu k objektům v úložišti používejte protokol HTTPS. Sdílené přístupové podpisy, které se dají použít k delegování přístupu k objektům Azure Storage, obsahují také možnost určit, že se při použití sdílených přístupových podpisů dá použít jenom protokol HTTPS a zajistit, aby každý, kdo odesílá odkazy s tokeny SAS, používal správný protokol.

Ověřte MD5 hash po stažení objektu blob, pokud nelze povolit HTTPS.

Titulek Podrobnosti
Součást Azure Storage
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy StorageType – blob
Odkazy Přehled MD5 pro Windows Azure Blob
Kroky

Služba Windows Azure Blob Service poskytuje mechanismy pro zajištění integrity dat v aplikační i přenosové vrstvě. Pokud z nějakého důvodu potřebujete místo HTTPS použít protokol HTTP a pracujete s blokovými blob objekty, můžete k ověření integrity přenášených blobů použít kontrolu MD5.

To vám pomůže s ochranou před chybami síťové/přenosové vrstvy, ale nemusí to být nutně u zprostředkujících útoků. Pokud můžete použít protokol HTTPS, který poskytuje zabezpečení na úrovni přenosu, je použití kontroly MD5 redundantní a nepotřebné.

Použití klienta kompatibilního s protokolem SMB 3.x k zajištění šifrování přenášených dat do sdílených složek Azure

Titulek Podrobnosti
Součást Mobilní klient
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy StorageType – soubor
Odkazy Azure Files, podpora SMB pro Windows klienty služby Azure Files
Kroky Azure Files podporuje https při použití rozhraní REST API, ale častěji se používá jako sdílená složka SMB připojená k virtuálnímu počítači. Protokol SMB 2.1 nepodporuje šifrování, takže připojení jsou povolená pouze ve stejné oblasti v Azure. Protokol SMB 3.x však podporuje šifrování a lze ho použít s Windows Serverem 2012 R2, Windows 8, Windows 8.1 a Windows 10, což umožňuje přístup mezi oblastmi a dokonce i přístup na ploše.

Implementace připnutí certifikátu

Titulek Podrobnosti
Součást Azure Storage
Fáze SDL Stavět
Použitelné technologie Obecné, Windows Phone
Atributy není k dispozici
Odkazy Připnutí certifikátu a veřejného klíče
Kroky

Připnutí certifikátu brání útokům man-in-The-Middle (MITM). Připnutí je proces přidružení hostitele k očekávanému certifikátu X509 nebo veřejnému klíči. Jakmile je certifikát nebo veřejný klíč známý nebo viditelný pro hostitele, je certifikát nebo veřejný klíč přidružený nebo připnutý k hostiteli.

Pokud se tedy útočník pokusí provést útok typu MITM na TLS, během handshake protokolu TLS se klíč ze serveru útočníka bude lišit od klíče připnutého certifikátu a požadavek bude zahozen, což zabrání útoku MITM. Připnutí certifikátu lze dosáhnout implementací delegáta ServerCertificateValidationCallback v ServicePointManageru.

Příklad

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

Povolení HTTPS – zabezpečený přenosový kanál

Titulek Podrobnosti
Součást WCF (Windows Communication Foundation)
Fáze SDL Stavět
Použitelné technologie NET Framework 3
Atributy není k dispozici
Odkazy MSDN, Fortify Kingdom
Kroky Konfigurace aplikace by měla zajistit, aby se protokol HTTPS používal pro veškerý přístup k citlivým informacím.
  • VYSVĚTLENÍ: Pokud aplikace zpracovává citlivé informace a nepoužívá šifrování na úrovni zpráv, měla by být povolena pouze komunikace přes šifrovaný přenosový kanál.
  • DOPORUČENÍ: Ujistěte se, že je zakázaný přenos HTTP, a místo toho povolte přenos HTTPS. Například nahraďte <httpTransport/> značkou <httpsTransport/>. Nespoléhejte na konfiguraci sítě (firewall), abyste zajistili, že k aplikaci bude možné přistupovat pouze přes zabezpečený kanál. Z hlediska filozofie by aplikace neměla záviset na síti pro její zabezpečení.

Z praktického hlediska lidé zodpovědní za zabezpečení sítě nesledují vždy požadavky na zabezpečení aplikace při vývoji.

WCF: Nastavení úrovně ochrany zabezpečení zpráv na EncryptAndSign

Titulek Podrobnosti
Součást WCF (Windows Communication Foundation)
Fáze SDL Stavět
Použitelné technologie .NET Framework 3
Atributy není k dispozici
Odkazy MSDN
Kroky
  • VYSVĚTLENÍ: Pokud je úroveň ochrany nastavená na hodnotu Žádný, zakáže ochranu zpráv. Důvěrnost a integrita se dosahuje s odpovídající úrovní nastavení.
  • DOPORUČENÍ:
    • když Mode=None - Deaktivuje ochranu zpráv
    • když Mode=Sign – Znaménka, ale nezašifruje zprávu; měla by se použít, když je integrita dat důležitá.
    • when Mode=EncryptAndSign – Podepíše a zašifruje zprávu.

Zvažte vypnutí šifrování a podepisování zprávy jenom v případě, že potřebujete ověřit integritu informací bez obav o důvěrnost. To může být užitečné pro operace nebo servisní kontrakty, ve kterých potřebujete ověřit původního odesílatele, ale nepřenesou se žádná citlivá data. Při snížení úrovně ochrany buďte opatrní, že zpráva neobsahuje žádné osobní údaje.

Příklad

Konfigurace služby a operace pouze pro podepsání zprávy je zobrazena v následujících příkladech. Příklad kontraktu ProtectionLevel.Signslužby: Následující příklad použití ProtectionLevel.Sign na úrovni kontraktu služby:

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

Příklad

Příklad kontraktu ProtectionLevel.Sign operace (pro podrobné řízení): Následuje příklad použití ProtectionLevel.Sign na úrovni OperationContract:

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

WCF: Použití nejméně privilegovaného účtu ke spuštění služby WCF

Titulek Podrobnosti
Součást WCF (Windows Communication Foundation)
Fáze SDL Stavět
Použitelné technologie .NET Framework 3
Atributy není k dispozici
Odkazy MSDN
Kroky
  • VYSVĚTLENÍ: Nespousít služby WCF v rámci účtu s oprávněními správce nebo vysoké úrovně oprávnění. v případě ohrožení služeb to povede k vysokému dopadu.
  • DOPORUČENÍ: K hostování služby WCF použijte nejméně privilegovaný účet, protože sníží prostor pro útoky vaší aplikace a sníží potenciální škody, pokud dojde k útoku. Pokud účet služby vyžaduje další přístupová práva k prostředkům infrastruktury, jako je MSMQ, protokol událostí, čítače výkonu a systém souborů, měla by být těmto prostředkům udělena příslušná oprávnění, aby služba WCF byla úspěšně spuštěna.

Pokud vaše služba potřebuje přístup ke konkrétním prostředkům na účet původního volajícího, použijte zosobnění a delegování k přenosu identity volajícího pro následnou autorizaci. Ve scénáři vývoje použijte účet místní síťové služby, což je speciální integrovaný účet s omezenými oprávněními. V produkčním prostředí vytvořte účet služby domény s nejnižšími možnými oprávněními.

Vynucení veškerého provozu do webových rozhraní API přes připojení HTTPS

Titulek Podrobnosti
Součást Webové rozhraní API
Fáze SDL Stavět
Použitelné technologie MVC5, MVC6
Atributy není k dispozici
Odkazy Vynucení SSL v kontroleru webového rozhraní API
Kroky Pokud má aplikace jak https, tak vazbu HTTP, můžou klienti dál používat protokol HTTP pro přístup k lokalitě. Abyste tomu zabránili, použijte filtr akcí, abyste zajistili, že žádosti na chráněná rozhraní API budou vždy přes HTTPS.

Příklad

Následující kód ukazuje filtr ověřování webového rozhraní API, který kontroluje protokol 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);
        }
    }
}

Přidejte tento filtr do všech akcí webového rozhraní API, které vyžadují protokol TLS:

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

Ujistěte se, že komunikace se službou Azure Cache for Redis je přes protokol TLS.

Titulek Podrobnosti
Součást Azure Cache pro Redis
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy Podpora TLS pro Azure Redis
Kroky Server Redis nepodporuje protokol TLS, ale Azure Cache for Redis funguje. Pokud se připojujete ke službě Azure Cache for Redis a váš klient podporuje protokol TLS, jako je StackExchange.Redis, měli byste použít protokol TLS. Ve výchozím nastavení není pro nové instance Azure Cache for Redis povolen port bez TLS. Ujistěte se, že nejsou změněny zabezpečené výchozí hodnoty, pokud není závislá na podpoře protokolu TLS pro klienty Redis.

Upozorňujeme, že Redis je navržený tak, aby byl přístupný důvěryhodnými klienty v důvěryhodných prostředích. To znamená, že obvykle není vhodné zveřejnit instanci Redis přímo na internetu nebo obecně pro prostředí, kde nedůvěryhodní klienti můžou přímo přistupovat k portu Redis TCP nebo soketu UNIX.

Zabezpečení komunikace mezi zařízením a branou Field Gateway

Titulek Podrobnosti
Součást IoT brána pro pole
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy není k dispozici
Kroky Pro zařízení založená na PROTOKOLU IP by komunikační protokol mohl být obvykle zapouzdřen v kanálu SSL/TLS za účelem ochrany přenášených dat. V případě jiných protokolů, které nepodporují protokol SSL/TLS, zkontrolujte, jestli existují zabezpečené verze protokolu, které poskytují zabezpečení na přenosové vrstvě nebo vrstvě zpráv.

Zabezpečená komunikace zařízení s cloudovou bránou pomocí PROTOKOLU SSL/TLS

Titulek Podrobnosti
Součást Cloudová brána IoT
Fáze SDL Stavět
Použitelné technologie Obecná
Atributy není k dispozici
Odkazy Volba komunikačního protokolu
Kroky Zabezpečení protokolů HTTP/AMQP nebo MQTT pomocí SSL/TLS