Sdílet prostřednictvím


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

Produkt/služba Článek
Azure Event Hub
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

Název Detaily
Součást Azure Event Hub
Fáze SDL Build
Použitelné technologie Obecná
Atributy
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.

Název Detaily
Součást Dynamics CRM
Fáze SDL Build
Použitelné technologie Obecná
Atributy
Odkazy
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

Název Detaily
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 Správa dat Gateway (DMG) se vyžaduje pro připojení ke zdrojům dat, které jsou chráněné za corpnetem nebo bránou firewall.

  1. Uzamčení počítače izoluje nástroj DMG a zabraňuje nefunkčním programům v poškození nebo odchytání na počítači zdroje 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.

Název Detaily
Součást Server identit
Fáze SDL Nasazení
Použitelné technologie Obecná
Atributy
Odkazy IdentityServer3 – klíče, podpisy a kryptografie, IdentityServer3 – Nasazení
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 může být tento požadavek uvolněný. 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

Název Detaily
Součást Webová aplikace
Fáze SDL Build
Použitelné technologie Obecná
Atributy
Odkazy
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ěz vztahů důvěryhodnosti. 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ě Aplikace Azure Service

Název Detaily
Součást Webová aplikace
Fáze SDL Build
Použitelné technologie Obecná
Atributy EnvironmentType – Azure
Odkazy Povolení HTTPS pro aplikaci ve službě Aplikace Azure 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 Aplikace Azure přes připojení HTTPS

Název Detaily
Součást Webová aplikace
Fáze SDL Build
Použitelné technologie Obecná
Atributy EnvironmentType – Azure
Odkazy Vynucení HTTPS ve službě Aplikace Azure
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 Aplikace Azure Service k vynucení 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 požadoval návštěvník, ale nahradí část požadavku HTTP 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)

Název Detaily
Součást Webová aplikace
Fáze SDL Build
Použitelné technologie Obecná
Atributy
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. Brání také kliknutí https prostřednictvím výzev 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ě typy https://example.com a podléhá útočníkovi 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 čistě HTTPS neúmyslně, obsahuje odkazy HTTP nebo obsluhuje 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 uživatele oběti pomocí neplatného certifikátu a doufá, že uživatel přijme chybný certifikát: HSTS neumožňuje uživateli přepsat neplatnou zprávu certifikátu.

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

Název Detaily
Součást Databáze
Fáze SDL Build
Použitelné technologie SQL Azure
Atributy Verze SQL – V12
Odkazy Osvědčené postupy při psaní řetězců zabezpečeného Připojení 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í.

Nemusí ale ověřovat certifikáty serveru, a proto budou náchylné k útokům "muž uprostřed". Pokud chcete ověřit certifikáty pomocí ADO.NET kódu aplikace, nastavte Encrypt=True a TrustServerCertificate=False v databázi připojovací řetězec. Pokud chcete ověřit certifikáty prostřednictvím aplikace SQL Server Management Studio, otevřete dialogové okno Připojení na server. Na kartě Vlastnosti Připojení ion klikněte na Šifrovat připojení.

Vynucení šifrované komunikace na SQL Server

Název Detaily
Součást Databáze
Fáze SDL Build
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.

Název Detaily
Součást Azure Storage
Fáze SDL Nasazení
Použitelné technologie Obecná
Atributy
Odkazy Šifrování na úrovni přenosu služby Azure Storage – použití PROTOKOLU 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ěření hodnoty hash MD5 po stažení objektu blob, pokud se https nedá povolit

Název Detaily
Součást Azure Storage
Fáze SDL Build
Použitelné technologie Obecná
Atributy StorageType – objekt blob
Odkazy Přehled md5 objektů blob Windows Azure
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 objekty blob bloku, můžete pomocí kontroly MD5 ověřit integritu přenášených objektů blob.

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

Název Detaily
Součást Mobilní klient
Fáze SDL Build
Použitelné technologie Obecná
Atributy StorageType – soubor
Odkazy Azure Files, podpora protokolu SMB služby Soubory Azure pro klienty Windows
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 dá se 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

Název Detaily
Součást Azure Storage
Fáze SDL Build
Použitelné technologie Obecné, Windows Telefon
Atributy
Odkazy Připnutí certifikátu a veřejného klíče
Kroky

Připnutí certifikátu chrání proti útokům MITM (Man-In-The-Middle). 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 nežádoucí osoba pokusí provést útok TLS MITM, 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 se zahodí, čímž zabrání připnutí certifikátu MITM implementací delegáta ServerCertificateValidationCallback správce ServicePointManager.

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

Název Detaily
Součást WCF
Fáze SDL Build
Použitelné technologie NET Framework 3
Atributy
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 povolte místo toho přenos HTTPS. Nahraďte <httpTransport/> například značku 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

Název Detaily
Součást WCF
Fáze SDL Build
Použitelné technologie .NET Framework 3
Atributy
Odkazy MSDN
Kroky
  • VYSVĚTLENÍ: Pokud je úroveň ochrany nastavena na hodnotu "none", zakáže ochranu zpráv. Důvěrnost a integrita se dosahuje s odpovídající úrovní nastavení.
  • DOPORUČENÍ:
    • when Mode=None - Disables message protection
    • 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 pro podepsání zprávy se zobrazí 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

Název Detaily
Součást WCF
Fáze SDL Build
Použitelné technologie .NET Framework 3
Atributy
Odkazy MSDN
Kroky
  • VYSVĚTLENÍ: Nespousítejte služby WCF v rámci účtu s oprávněním správce nebo vysoké 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 omezí prostor pro útoky vaší aplikace a sníží potenciální poškození, 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 jménem původního volajícího, použijte zosobnění a delegování k toku identity volajícího pro kontrolu podřízené autorizace. 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 scénáři vytvořte účet služby domain service s nejnižšími oprávněními.

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

Název Detaily
Součást Webové rozhraní API
Fáze SDL Build
Použitelné technologie MVC5, MVC6
Atributy
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.

Název Detaily
Součást Azure Cache for Redis
Fáze SDL Build
Použitelné technologie Obecná
Atributy
Odkazy Podpora protokolu 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í je pro nové instance Azure Cache for Redis zakázaný 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 mohou přímo přistupovat k portu TCP Redis nebo systém UNIX soketu.

Zabezpečená komunikace se službou Field Gateway

Název Detaily
Součást IoT Field Gateway
Fáze SDL Build
Použitelné technologie Obecná
Atributy
Odkazy
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

Název Detaily
Součást Cloudová brána IoT
Fáze SDL Build
Použitelné technologie Obecná
Atributy
Odkazy Volba komunikačního protokolu
Kroky Zabezpečení protokolů HTTP/AMQP nebo MQTT pomocí SSL/TLS