Sicherheitsrahmen: Kommunikationssicherheit | Gegenmaßnahmen
Produkt/Dienst | Artikel |
---|---|
Azure Event Hub | |
Dynamics CRM | |
Azure Data Factory | |
Identity Server | |
Web Application |
|
Datenbank | |
Azure Storage (in englischer Sprache) |
|
Mobiler Client | |
WCF | |
Web-API | |
Azure Cache for Redis | |
Zwischengeschaltetes IoT-Gateway | |
IoT-Cloudgateway |
Schützen Sie die Kommunikation mit dem Event Hub mithilfe von SSL/TLS.
Titel | Details |
---|---|
Komponente | Azure Event Hub |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Event Hubs-Authentifizierung und -Sicherheitsmodell (Übersicht) |
Schritte | Verwenden Sie SSL/TLS, um AMQP- oder HTTP-Verbindungen mit Event Hub zu schützen. |
Überprüfen Sie die Dienstkontoberechtigungen, und vergewissern Sie sich, dass die benutzerdefinierten Dienste oder ASP.NET-Seiten die CRM-Sicherheit respektieren.
Titel | Details |
---|---|
Komponente | Dynamics CRM |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Überprüfen Sie die Dienstkontoberechtigungen, und vergewissern Sie sich, dass die benutzerdefinierten Dienste oder ASP.NET-Seiten die CRM-Sicherheit respektieren. |
Verwenden Sie das Datenverwaltungsgateway, um eine Verbindung zwischen einer lokalen SQL Server-Instanz und Azure Data Factory herzustellen.
Titel | Details |
---|---|
Komponente | Azure Data Factory |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | Verknüpfte Diensttypen: Azure und lokal |
Informationsquellen | Verschieben von Daten zwischen lokaler Umgebung und Azure Data Factory |
Schritte | Das DMG-Tool (Data Management Gateway; Datenverwaltungsgateway) wird benötigt, um eine Verbindung mit Datenquellen herzustellen, die durch ein Unternehmensnetzwerk oder eine Firewall geschützt sind.
|
Stellen Sie sicher, dass der gesamte an Identity Server gerichtete Datenverkehr über eine HTTPS-Verbindung abgewickelt wird.
Titel | Details |
---|---|
Komponente | Identity Server |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | IdentityServer3 - Keys, Signatures and Cryptography (IdentityServer3: Schlüssel, Signaturen und Kryptografie), IdentityServer3 - Deployment (IdentityServer3: Bereitstellung) |
Schritte | Bei Identity Server muss für alle eingehenden Verbindungen standardmäßig HTTPS verwendet werden. Wichtig: Die Kommunikation mit Identity Server darf ausschließlich über geschützte Transportkanäle erfolgen. In bestimmten Bereitstellungsszenarien (etwa bei der TLS-Abladung) kann diese Anforderung gelockert werden. Weitere Informationen finden Sie auf der unter „Referenzen“ angegebenen Seite zur Identity Server-Bereitstellung. |
Überprüfen Sie die X.509 Zertifikate, die zum Authentifizieren von SSL-, TLS- und DTLS-Verbindungen verwendet werden.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Anwendungen, die SSL, TLS oder DTLS verwenden, müssen die X.509-Zertifikate der Entitäten, mit denen sie eine Verbindung herstellen, umfassend überprüfen. Hierzu muss für die Zertifikate Folgendes überprüft werden:
|
Konfigurieren eines TLS/SSL-Zertifikats für eine benutzerdefinierte Domäne in Azure App Service
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | EnvironmentType: Azure |
Referenzen | Aktivieren von HTTPS für eine App in Azure App Service |
Schritte | Standardmäßig aktiviert Azure HTTPS bereits für jede App mit einem Platzhalterzertifikat für die Domäne „*.azurewebsites.net“. Platzhalterdomänen sind jedoch generell nicht so sicher wie die Verwendung einer benutzerdefinierten Domäne mit eigenem Zertifikat. (Weitere Informationen finden Sie hier.) Es empfiehlt sich, TLS für die benutzerdefinierte Domäne zu aktivieren, über die auf die bereitgestellte App zugegriffen wird. |
Erzwingen Sie, dass der gesamte an Azure App Service gerichtete Datenverkehr über eine HTTPS-Verbindung abgewickelt wird.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | EnvironmentType: Azure |
Referenzen | Erzwingen von HTTPS in Azure App Service |
Schritte | Azure aktiviert zwar bereits standardmäßig HTTPS für Azure App Services mit einem Platzhalterzertifikat für die Domäne „*.azurewebsites.net“, erzwingt es aber nicht. Besucher können weiterhin über HTTP auf die App zugreifen, dies kann allerdings die Sicherheit der App gefährden. Daher muss explizit HTTPS erzwungen werden. ASP.NET-MVC-Anwendungen müssen den RequireHttps-Filter verwenden. Dieser sorgt dafür, dass ungeschützte HTTP-Anforderungen erneut über HTTPS gesendet werden müssen. Alternativ kann HTTPS mithilfe des in Azure App Service enthaltenen URL-Rewrite-Moduls erzwungen werden. Mit dem URL-Rewrite-Modul können Entwickler Regeln definieren, die auf eingehende Anforderungen angewendet werden, bevor diese an Ihre Anwendung übergeben werden. URL-Rewrite-Regeln werden im Stammverzeichnis der Anwendung in einer Datei vom Typ „web.config“ gespeichert. |
Beispiel
Das folgende Beispiel enthält eine einfache URL-Rewrite-Regel, die für sämtlichen eingehenden Datenverkehr die Verwendung von HTTPS erzwingt.
<?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>
Diese Regel funktioniert durch die Rückgabe eines HTTP-Statuscode von 301 (Permanent Redirect), wenn der Benutzer eine Seite mit HTTP anfragt. Der Code 301 leitet die Anfrage an die gleiche URL weiter, die der Besucher angefragt hat, aber ersetzt den HTTP-Teil der Anfrage mit HTTPS. HTTP://contoso.com
wird beispielsweise an HTTPS://contoso.com
umgeleitet.
Aktivieren Sie HSTS (HTTP Strict Transport Security).
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | OWASP HTTP Strict Transport Security Cheat Sheet (OWASP-Cheat Sheet zu HTTP Strict Transport Security) |
Schritte | Bei HSTS (HTTP Strict Transport Security) handelt es sich um eine optionale Sicherheitserweiterung, die von einer Webanwendung mithilfe eines speziellen Antwortheaders angegeben wird. Wenn ein unterstützter Browser diesen Header empfängt, verhindert er, dass die Kommunikation über HTTP an die angegebene Domäne gesendet wird, und sendet die gesamte Kommunikation stattdessen über HTTPS. Darüber hinaus werden in Browsern auch HTTPS-Clickthrough-Aufforderungen verhindert. Zur Implementierung von HSTS muss der folgende Antwortheader global für eine Website konfiguriert werden (entweder im Code oder in der Konfiguration): Strict-Transport-Security: max-age=300; includeSubDomains. HSTS dient zur Abwehr folgender Bedrohungen:
|
Verwenden Sie SQL Server-Verbindungsverschlüsselung und Zertifikatüberprüfung.
Titel | Details |
---|---|
Komponente | Datenbank |
SDL-Phase | Entwickeln |
Zutreffende Technologien | SQL Azure |
Attribute | SQL-Version: V12 |
Referenzen | Best Practices on Writing Secure Connection Strings for SQL Database (Bewährte Methoden zum Schreiben sicherer Verbindungszeichenfolgen für SQL-Datenbank) |
Schritte | Die gesamte Kommunikation zwischen SQL-Datenbank und einer Clientanwendung wird mit Transport Layer Security (TLS) verschlüsselt, früher als Secure Sockets Layer (SSL) bezeichnet. SQL-Datenbank unterstützt keine unverschlüsselten Verbindungen. Um Zertifikate mit Anwendungscode oder Tools zu überprüfen, sollten Sie explizit eine verschlüsselte Verbindung anfordern und den Serverzertifikaten nicht vertrauen. Verschlüsselte Verbindungen werden auch dann verwendet, wenn von Ihrem Anwendungscode oder von Ihren Tools keine verschlüsselte Verbindung angefordert wird. Es kann aber sein, dass hierbei die Serverzertifikate nicht überprüft werden, sodass die Gefahr von Man-in-the-Middle-Angriffen besteht. Legen Sie |
Erzwingen Sie die Verschlüsselung der Kommunikation mit SQL Server.
Titel | Details |
---|---|
Komponente | Datenbank |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Lokal |
Attribute | SQL-Version: MsSQL2016, SQL-Version: MsSQL2012, SQL-Version: MsSQL2014 |
Referenzen | Aktivieren von verschlüsselten Verbindungen mit der Datenbank-Engine |
Schritte | Die Aktivierung der TLS-Verschlüsselung erhöht die Sicherheit von Daten, die über Netzwerke zwischen Instanzen von SQL Server und Anwendungen übertragen werden. |
Stellen Sie sicher, dass die Kommunikation mit Azure Storage über HTTPS abgewickelt wird.
Titel | Details |
---|---|
Komponente | Azure Storage |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Azure Storage-Sicherheitsleitfaden: Verschlüsselung auf Transportebene – mithilfe von HTTPS |
Schritte | Um die Sicherheit von Azure Storage-Daten während der Übertragung zu gewährleisten, verwenden Sie immer das HTTPS-Protokoll, wenn Sie die REST-APIs aufrufen oder auf gespeicherte Objekte zugreifen. Mit Shared Access Signatures, die zum Delegieren des Zugriffs auf Azure Storage-Objekte verwendet werden können, können Sie außerdem festlegen, dass bei Verwendung von Shared Access Signatures nur das HTTPS-Protokoll verwendet werden darf. So können Sie sicherstellen, dass jeder, der Links mit SAS-Token sendet, das richtige Protokoll verwendet. |
Überprüfen Sie nach dem Herunterladen eines Blobs den MD5-Hash, falls HTTPS nicht aktiviert werden kann.
Titel | Details |
---|---|
Komponente | Azure Storage |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | StorageType: Blob |
Referenzen | Windows Azure Blob MD5 Overview (MD5-Übersicht für Windows Azure-Blobs) |
Schritte | Der Windows Azure-Blob-Dienst stellt Mechanismen bereit, um die Datenintegrität sowohl auf der Anwendungs- als auch auf der Transportebene zu gewährleisten. Falls Sie aus irgendeinem Grund HTTP statt HTTPS verwenden müssen und mit Blockblobs arbeiten, können Sie die Integrität der übertragenen Blobs mithilfe einer MD5-Prüfung überprüfen. Dies bietet Schutz vor Fehlern der Vermittlungs-/Transportschicht, aber nicht notwendigerweise vor zwischengeschalteten Angriffen. Wenn Sie HTTPS verwenden können, welches Schutz auf der Transportschicht bietet, ist eine MD5-Prüfung redundant und unnötig. |
Verwenden Sie einen SMB 3-kompatiblen Client, um die Verschlüsselung von Daten während der Übertragung an Azure-Dateifreigaben sicherzustellen
Titel | Details |
---|---|
Komponente | Mobiler Client |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | StorageType: Datei |
Referenzen | Azure Files, Azure Files SMB-Unterstützung für Windows Clients |
Schritte | Azure Files unterstützt HTTPS bei Verwendung der REST-API, wird jedoch häufiger als SMB-Dateifreigabe verwendet, die einem virtuellen Computer angefügt ist. SMB 2.1 unterstützt keine Verschlüsselung, sodass Verbindungen nur innerhalb der gleichen Region in Azure zulässig sind. Allerdings unterstützt SMB 3.x die Verschlüsselung und kann mit Windows Server 2012 R2, Windows 8, Windows 8.1 und Windows 10 verwendet werden, sodass regionsübergreifender Zugriff und sogar Zugriff auf dem Desktop möglich ist. |
Implementieren Sie das Anheften von Zertifikaten.
Titel | Details |
---|---|
Komponente | Azure Storage |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein, Windows Phone |
Attribute | – |
Referenzen | Certificate and Public Key Pinning (Anheften von Zertifikaten und öffentlichen Schlüsseln) |
Schritte | Das Anheften von Zertifikaten dient zur Abwehr von MITM-Angriffen (Man-in-the-Middle). Beim Anheften wird ein Host mit dem erwarteten X.509-Zertifikat oder öffentlichen Schlüssel verknüpft. Sobald ein Zertifikat oder öffentlicher Schlüssel für einen Host bekannt ist oder angezeigt wird, wird das Zertifikat oder der öffentliche Schlüssel mit dem Host verknüpft (angeheftet). Startet ein Angreifer nun einen TLS-MITM-Angriff, unterscheidet sich der Schlüssel des für den Angriff verwendeten Servers beim TLS-Handshake vom Schlüssel des angehefteten Zertifikats, woraufhin die Anforderung verworfen und der MITM-Angriff abgewehrt wird. Das Anheften von Zertifikaten kann durch Implementieren des ServicePointManager-Delegaten |
Beispiel
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();
}
}
}
Aktivieren Sie den sicheren HTTPS-Transportkanal.
Titel | Details |
---|---|
Komponente | WCF |
SDL-Phase | Entwickeln |
Zutreffende Technologien | .NET Framework 3 |
Attribute | – |
Referenzen | MSDN, Fortify Kingdom |
Schritte | Die Anwendungskonfiguration muss sicherstellen, dass bei jedem Zugriff auf sensible Daten HTTPS verwendet wird.
In der Praxis sind die für den Schutz des Netzwerks zuständigen Personen bei den Sicherheitsanforderungen der Anwendung nicht immer auf dem neuesten Stand. |
WCF: Legen Sie die Schutzebene für die Nachrichtensicherheit auf „EncryptAndSign“ fest.
Titel | Details |
---|---|
Komponente | WCF |
SDL-Phase | Entwickeln |
Zutreffende Technologien | .NET Framework 3 |
Attribute | – |
Referenzen | MSDN |
Schritte |
Wenn Sie lediglich die Integrität der Informationen gewährleisten müssen und die Vertraulichkeit keine Rolle spielt, können Sie die Verschlüsselung ggf. deaktivieren und Ihre Nachricht nur signieren. Dies ist unter Umständen bei Vorgängen oder Dienstverträgen hilfreich, bei denen Sie den ursprünglichen Absender überprüfen müssen, aber keine sensiblen Daten übertragen werden. Achten Sie beim Verringern der Schutzebene darauf, dass die Nachricht keine personenbezogenen Daten enthält. |
Beispiel
In den folgenden Beispielen wird gezeigt, wie Sie Dienst und Vorgang so konfiguriert, dass die Nachricht nur signiert wird. Dienstvertragsbeispiel mit ProtectionLevel.Sign
: Das folgende Beispiel veranschaulicht die Verwendung von „ProtectionLevel.Sign“ auf Dienstvertragsebene:
[ServiceContract(Protection Level=ProtectionLevel.Sign]
public interface IService
{
string GetData(int value);
}
Beispiel
Vorgangsvertragsbeispiel mit ProtectionLevel.Sign
(für präzise Steuerung): Das folgende Beispiel veranschaulicht die Verwendung von ProtectionLevel.Sign
auf Vorgangsvertragsebene:
[OperationContract(ProtectionLevel=ProtectionLevel.Sign]
string GetData(int value);
WCF: Führen Sie den WCF-Dienst mit einem Konto mit möglichst wenigen Berechtigungen aus.
Titel | Details |
---|---|
Komponente | WCF |
SDL-Phase | Entwickeln |
Zutreffende Technologien | .NET Framework 3 |
Attribute | – |
Referenzen | MSDN |
Schritte |
Falls Ihr Dienst im Auftrag des ursprünglichen Aufrufers auf bestimmte Ressourcen zugreifen muss, verwenden Sie Identitätswechsel und Delegierung, um die Identität des Aufrufers für eine nachgelagerte Autorisierungsprüfung weiterzugeben. Verwenden Sie in einem Entwicklungsszenario das lokale Netzwerkdienstkonto. Hierbei handelt es sich um ein spezielles integriertes Konto mit eingeschränkten Berechtigungen. Erstellen Sie in einem Produktionsszenario ein benutzerdefiniertes Domänendienstkonto mit möglichst wenigen Berechtigungen. |
Erzwingen Sie, dass der gesamte an Web-APIs gerichtete Datenverkehr über eine HTTPS-Verbindung abgewickelt wird.
Titel | Details |
---|---|
Komponente | Web-API |
SDL-Phase | Entwickeln |
Zutreffende Technologien | MVC5, MVC6 |
Attribute | – |
Referenzen | Enforcing SSL in a Web API Controller (Erzwingen von SSL in einem Web-API-Controller) |
Schritte | Wenn eine Anwendung sowohl über eine HTTPS-Bindung als auch über eine HTTP-Bindung verfügt, können Clients weiterhin über HTTP auf die Website zugreifen. Stellen Sie daher mithilfe eines Aktionsfilters sicher, dass Anforderungen an geschützte APIs immer über HTTPS abgewickelt werden. |
Beispiel
Der folgende Code zeigt einen Web-API-Authentifizierungsfilter mit Überprüfung auf 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);
}
}
}
Fügen Sie diesen Filter allen Web-API-Aktionen hinzu, die TLS erfordern:
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
Sicherstellen, dass die Kommunikation mit Azure Cache for Redis über TLS abgewickelt wird
Titel | Details |
---|---|
Komponente | Azure Cache for Redis |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Azure Redis: TLS-Unterstützung |
Schritte | Der Redis-Server bietet keine integrierte TLS-Unterstützung, Azure Cache for Redis dagegen schon. Wenn Sie eine Verbindung mit Azure Cache for Redis herstellen und Ihr Client TLS unterstützt (z. B. StackExchange.Redis), sollten Sie TLS verwenden. Bei neuen Azure Cache for Redis-Instanzen ist der TLS-fremde Port standardmäßig deaktiviert. Die sicheren Standardeinstellungen sollten nur geändert werden, wenn Redis-Clients auf TLS-Unterstützung angewiesen sind. |
Redis ist für den Zugriff durch vertrauenswürdige Clients in vertrauenswürdigen Umgebungen konzipiert. Es empfiehlt sich daher in der Regel nicht, die Redis-Instanz direkt dem Internet auszusetzen (oder ganz allgemein einer Umgebung, in der nicht vertrauenswürdige Clients direkt auf den Redis-TCP-Port oder UNIX-Socket zugreifen können).
Schützen Sie die Kommunikation zwischen Gerät und zwischengeschaltetem Gateway.
Titel | Details |
---|---|
Komponente | Zwischengeschaltetes IoT-Gateway |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Bei IP-basierten Geräten kann das Kommunikationsprotokoll in der Regel in einem SSL-/TLS-Kanal gekapselt werden, um die Daten während der Übertragung zu schützen. Ermitteln Sie bei anderen Protokollen ohne SSL-/TLS-Unterstützung, ob sichere Versionen des Protokolls zur Verfügung stehen, die Sicherheit auf Transport- oder Nachrichtenebene bieten. |
Schützen Sie die Kommunikation zwischen Gerät und Cloudgateway mithilfe von SSL/TLS.
Titel | Details |
---|---|
Komponente | IoT-Cloudgateway |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Choose your Communication Protocol (Auswählen Ihres Kommunikationsprotokolls) |
Schritte | Schützen Sie HTTP-/AMQP- oder MQTT-Protokolle mithilfe von SSL/TLS. |