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.
|
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:
|
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:
|
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 |
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 |
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.
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 |
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.Sign
služ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 |
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 |