Säkerhetsram: Kommunikationssäkerhet | Mitigations
Produkt/tjänst | Artikel |
---|---|
Azure Event Hubs | |
Dynamics CRM | |
Azure Data Factory | |
Identitetsserver | |
Webbprogram | |
Databas | |
Azure Storage | |
Mobil klient | |
WCF | |
Webb-API | |
Azure Cache for Redis | |
IoT-fältgateway | |
IoT Cloud Gateway |
Säker kommunikation till Händelsehubb med SSL/TLS
Title | Details |
---|---|
Komponent | Azure Event Hub |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Översikt över Event Hubs-autentisering och säkerhetsmodell |
Steg | Skydda AMQP- eller HTTP-anslutningar till Händelsehubb med SSL/TLS |
Kontrollera tjänstkontobehörigheter och kontrollera att anpassade tjänster eller ASP.NET sidor respekterar CRM:s säkerhet
Title | Details |
---|---|
Komponent | Dynamics CRM |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Inte tillgängligt |
Steg | Kontrollera tjänstkontobehörigheter och kontrollera att anpassade tjänster eller ASP.NET sidor respekterar CRM:s säkerhet |
Använda datahanteringsgateway när du ansluter lokal SQL Server till Azure Data Factory
Title | Details |
---|---|
Komponent | Azure Data Factory |
SDL-fas | Distribution |
Tillämpliga tekniker | Allmän |
Attribut | Länkade tjänsttyper – Azure och lokalt |
Referenser | Flytta data mellan lokal och Azure Data Factory |
Steg | Verktyget Datahantering Gateway (DMG) krävs för att ansluta till datakällor som skyddas bakom corpnet eller en brandvägg.
|
Kontrollera att all trafik till identitetsservern är över HTTPS-anslutningen
Title | Details |
---|---|
Komponent | Identitetsserver |
SDL-fas | Distribution |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | IdentityServer3 – Nycklar, signaturer och kryptografi, IdentityServer3 – distribution |
Steg | Som standard kräver IdentityServer att alla inkommande anslutningar kommer via HTTPS. Det är absolut obligatoriskt att kommunikationen med IdentityServer endast sker via skyddade transporter. Det finns vissa distributionsscenarier som TLS-avlastning där det här kravet kan lösas. Mer information finns på sidan för distribution av identitetsserver i referenserna. |
Verifiera X.509-certifikat som används för att autentisera SSL-, TLS- och DTLS-anslutningar
Title | Details |
---|---|
Komponent | Webbprogram |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Inte tillgängligt |
Steg | Program som använder SSL, TLS eller DTLS måste fullständigt verifiera X.509-certifikaten för de entiteter som de ansluter till. Detta omfattar verifiering av certifikaten för:
|
Konfigurera TLS/SSL-certifikat för anpassad domän i Azure App Service
Title | Details |
---|---|
Komponent | Webbprogram |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | EnvironmentType – Azure |
Referenser | Aktivera HTTPS för en app i Azure App Service |
Steg | Som standard aktiverar Azure redan HTTPS för varje app med ett jokerteckencertifikat för domänen *.azurewebsites.net. Men precis som alla jokerteckendomäner är det inte lika säkert som att använda en anpassad domän med eget certifikat. Vi rekommenderar att du aktiverar TLS för den anpassade domän som den distribuerade appen kommer att nås via |
Tvinga all trafik till Azure App Service via HTTPS-anslutning
Title | Details |
---|---|
Komponent | Webbprogram |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | EnvironmentType – Azure |
Referenser | Framtvinga HTTPS på Azure App Service |
Steg | Även om Azure redan aktiverar HTTPS för Azure-apptjänster med ett jokerteckencertifikat för domänen *.azurewebsites.net, tillämpas inte HTTPS. Besökare kan fortfarande komma åt appen med HJÄLP av HTTP, vilket kan äventyra appens säkerhet och därför måste HTTPS tillämpas explicit. ASP.NET MVC-program ska använda filtret RequireHttps som tvingar fram att en oskyddad HTTP-begäran skickas på nytt via HTTPS. Alternativt kan modulen URL Rewrite, som ingår i Azure App Service, användas för att framtvinga HTTPS. Med modulen URL Rewrite kan utvecklare definiera regler som tillämpas på inkommande begäranden innan begäranden skickas till ditt program. Url-omskrivningsregler definieras i en web.config-fil som lagras i programmets rot |
Exempel
Följande exempel innehåller en grundläggande URL-omskrivningsregel som tvingar all inkommande trafik att använda 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>
Den här regeln fungerar genom att returnera en HTTP-statuskod på 301 (permanent omdirigering) när användaren begär en sida med HTTP. 301 omdirigerar begäran till samma URL som besökaren begärde, men ersätter HTTP-delen av begäran med HTTPS. Till exempel HTTP://contoso.com
skulle omdirigeras till HTTPS://contoso.com
.
Aktivera STRIKT HTTP-transportsäkerhet (HSTS)
Title | Details |
---|---|
Komponent | Webbprogram |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | OWASP HTTP Strikt transportsäkerhet fuskark |
Steg | HTTP Strict Transport Security (HSTS) är en säkerhetsförbättring som anges av ett webbprogram med hjälp av ett särskilt svarshuvud. När en webbläsare som stöds tar emot den här rubriken förhindrar webbläsaren att kommunikation skickas via HTTP till den angivna domänen och i stället skickar all kommunikation via HTTPS. Det förhindrar också HTTPS-klick via prompter i webbläsare. För att implementera HSTS måste följande svarshuvud konfigureras för en webbplats globalt, antingen i kod eller i konfiguration. Strikt transportsäkerhet: max-age=300; includeSubDomains HSTS hanterar följande hot:
|
Se till att SQL Server-anslutningskryptering och certifikatverifiering
Title | Details |
---|---|
Komponent | Databas |
SDL-fas | Skapa |
Tillämpliga tekniker | SQL Azure |
Attribut | SQL-version – V12 |
Referenser | Metodtips för att skriva säkra Anslut ionssträngar för SQL Database |
Steg | All kommunikation mellan SQL Database och ett klientprogram krypteras alltid med hjälp av TLS (Transport Layer Security), som tidigare kallades Secure Sockets Layer (SSL). SQL Database stöder inte okrypterade anslutningar. Om du vill verifiera certifikat med programkod eller verktyg begär du uttryckligen en krypterad anslutning och litar inte på servercertifikaten. Om programkoden eller verktygen inte begär en krypterad anslutning får de fortfarande krypterade anslutningar De kanske dock inte verifierar servercertifikaten och är därför mottagliga för "man i mitten"-attacker. Om du vill verifiera certifikat med ADO.NET programkod anger du |
Tvinga krypterad kommunikation till SQL Server
Title | Details |
---|---|
Komponent | Databas |
SDL-fas | Skapa |
Tillämpliga tekniker | OnPrem |
Attribut | SQL-version – MsSQL2016, SQL-version – MsSQL2012, SQL-version – MsSQL2014 |
Referenser | Aktivera krypterade anslutningar till databasmotorn |
Steg | Om du aktiverar TLS-kryptering ökar säkerheten för data som överförs mellan nätverk mellan instanser av SQL Server och program. |
Se till att kommunikationen till Azure Storage sker via HTTPS
Title | Details |
---|---|
Komponent | Azure Storage |
SDL-fas | Distribution |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Kryptering på transportnivå i Azure Storage – använda HTTPS |
Steg | För att säkerställa säkerheten för Azure Storage-data under överföring använder du alltid HTTPS-protokollet när du anropar REST-API:erna eller får åtkomst till objekt i lagringen. Signaturer för delad åtkomst, som kan användas för att delegera åtkomst till Azure Storage-objekt, innehåller också ett alternativ för att ange att endast HTTPS-protokollet kan användas när signaturer för delad åtkomst används, vilket säkerställer att alla som skickar ut länkar med SAS-token använder rätt protokoll. |
Verifiera MD5-hash efter nedladdning av blob om HTTPS inte kan aktiveras
Title | Details |
---|---|
Komponent | Azure Storage |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | StorageType – blob |
Referenser | Översikt över Windows Azure Blob MD5 |
Steg | Windows Azure Blob Service tillhandahåller mekanismer för att säkerställa dataintegritet både i program- och transportlagren. Om du av någon anledning behöver använda HTTP i stället för HTTPS och arbetar med blockblobar kan du använda MD5-kontroll för att verifiera integriteten för de blobar som överförs Detta hjälper till med skydd mot nätverks-/transportskiktsfel, men inte nödvändigtvis med mellanliggande attacker. Om du kan använda HTTPS, som ger säkerhet på transportnivå, är md5-kontrollen redundant och onödig. |
Använd SMB 3.x-kompatibel klient för att säkerställa datakryptering under överföring till Azure-filresurser
Title | Details |
---|---|
Komponent | Mobil klient |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | StorageType – fil |
Referenser | Azure Files, Azure Files SMB-stöd för Windows-klienter |
Steg | Azure Files stöder HTTPS när du använder REST-API:et, men används oftare som en SMB-filresurs som är kopplad till en virtuell dator. SMB 2.1 stöder inte kryptering, så anslutningar tillåts endast inom samma region i Azure. SMB 3.x stöder dock kryptering och kan användas med Windows Server 2012 R2, Windows 8, Windows 8.1 och Windows 10, vilket ger åtkomst mellan regioner och till och med åtkomst på skrivbordet. |
Implementera certifikat fästning
Title | Details |
---|---|
Komponent | Azure Storage |
SDL-fas | Skapa |
Tillämpliga tekniker | Generic, Windows Telefon |
Attribut | Inte tillgängligt |
Referenser | Fäst certifikat och offentlig nyckel |
Steg | Certifikatstiftning skyddar mot MITM-attacker (Man-In-The-Middle). Att fästa är processen att associera en värd med deras förväntade X509-certifikat eller offentliga nyckel. När ett certifikat eller en offentlig nyckel har känts eller setts för en värd associeras certifikatet eller den offentliga nyckeln eller "fästs" på värden. När en angripare försöker utföra en TLS MITM-attack kommer nyckeln från angriparens server under TLS-handskakning att skilja sig från nyckeln för det fästa certifikatet och begäran ignoreras, vilket förhindrar att MITM-certifikatet fästs genom att implementera ServicePointManagers |
Exempel
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();
}
}
}
Aktivera HTTPS – säker transportkanal
Title | Details |
---|---|
Komponent | WCF |
SDL-fas | Skapa |
Tillämpliga tekniker | NET Framework 3 |
Attribut | Inte tillgängligt |
Referenser | MSDN, Fortify Kingdom |
Steg | Programkonfigurationen bör se till att HTTPS används för all åtkomst till känslig information.
Ur praktisk synvinkel följer de personer som ansvarar för att skydda nätverket inte alltid programmets säkerhetskrav när de utvecklas. |
WCF: Ange skyddsnivå för meddelandesäkerhet till EncryptAndSign
Title | Details |
---|---|
Komponent | WCF |
SDL-fas | Skapa |
Tillämpliga tekniker | .NET Framework 3 |
Attribut | Inte tillgängligt |
Referenser | MSDN |
Steg |
Överväg att stänga av kryptering och endast signera ditt meddelande när du bara behöver verifiera informationens integritet utan att behöva bry dig om konfidentialitet. Detta kan vara användbart för åtgärder eller tjänstkontrakt där du behöver verifiera den ursprungliga avsändaren men inga känsliga data överförs. När du minskar skyddsnivån bör du vara försiktig så att meddelandet inte innehåller några personuppgifter. |
Exempel
Konfiguration av tjänsten och åtgärden för att endast signera meddelandet visas i följande exempel. Exempel på tjänstkontrakt ProtectionLevel.Sign
: Följande är ett exempel på hur du använder ProtectionLevel.Sign på servicekontraktsnivå:
[ServiceContract(Protection Level=ProtectionLevel.Sign]
public interface IService
{
string GetData(int value);
}
Exempel
Operation Contract Example of ProtectionLevel.Sign
(for Granular Control): Följande är ett exempel på användning ProtectionLevel.Sign
på OperationContract-nivå:
[OperationContract(ProtectionLevel=ProtectionLevel.Sign]
string GetData(int value);
WCF: Använd ett konto med minst privilegier för att köra WCF-tjänsten
Title | Details |
---|---|
Komponent | WCF |
SDL-fas | Skapa |
Tillämpliga tekniker | .NET Framework 3 |
Attribut | Inte tillgängligt |
Referenser | MSDN |
Steg |
Om din tjänst behöver åtkomst till specifika resurser för den ursprungliga anroparens räkning använder du personifiering och delegering för att flöda anroparens identitet för en underordnad auktoriseringskontroll. I ett utvecklingsscenario använder du det lokala nätverkstjänstkontot, som är ett särskilt inbyggt konto som har nedsatt behörighet. I ett produktionsscenario skapar du ett konto för den anpassade domäntjänsten med minst privilegier. |
Tvinga all trafik till webb-API:er via HTTPS-anslutning
Title | Details |
---|---|
Komponent | Webb-API |
SDL-fas | Skapa |
Tillämpliga tekniker | MVC5, MVC6 |
Attribut | Inte tillgängligt |
Referenser | Framtvinga SSL i en webb-API-kontrollant |
Steg | Om ett program har både en HTTPS-bindning och en HTTP-bindning kan klienter fortfarande använda HTTP för att komma åt webbplatsen. För att förhindra detta använder du ett åtgärdsfilter för att säkerställa att begäranden till skyddade API:er alltid finns över HTTPS. |
Exempel
Följande kod visar ett autentiseringsfilter för webb-API:et som söker efter 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);
}
}
}
Lägg till det här filtret i alla webb-API-åtgärder som kräver TLS:
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
Se till att kommunikationen till Azure Cache for Redis sker via TLS
Title | Details |
---|---|
Komponent | Azure Cache for Redis |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Stöd för Azure Redis TLS |
Steg | Redis-servern stöder inte TLS direkt, men Azure Cache for Redis har det. Om du ansluter till Azure Cache for Redis och klienten stöder TLS, till exempel StackExchange.Redis, bör du använda TLS. Som standard är icke-TLS-port inaktiverad för nya Azure Cache for Redis-instanser. Se till att de säkra standardvärdena inte ändras om det inte finns ett beroende av TLS-stöd för Redis-klienter. |
Observera att Redis är utformat för att nås av betrodda klienter i betrodda miljöer. Det innebär att det vanligtvis inte är en bra idé att exponera Redis-instansen direkt på Internet eller, i allmänhet, för en miljö där ej betrodda klienter direkt kan komma åt Redis TCP-porten eller UNIX-socketen.
Säker kommunikation mellan enheter och fältgatewayer
Title | Details |
---|---|
Komponent | IoT-fältgateway |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Inte tillgängligt |
Steg | För IP-baserade enheter kan kommunikationsprotokollet vanligtvis kapslas in i en SSL/TLS-kanal för att skydda data under överföring. För andra protokoll som inte stöder SSL/TLS undersöker du om det finns säkra versioner av protokollet som ger säkerhet på transport- eller meddelandenivå. |
Skydda kommunikation mellan enheter och Cloud Gateway med SSL/TLS
Title | Details |
---|---|
Komponent | IoT Cloud Gateway |
SDL-fas | Skapa |
Tillämpliga tekniker | Allmän |
Attribut | Inte tillgängligt |
Referenser | Välj ditt kommunikationsprotokoll |
Steg | Skydda HTTP/AMQP- eller MQTT-protokoll med SSL/TLS. |