Sicherheitsrahmen: Konfigurationsverwaltung | Risikominderung
Implementieren Sie die Inhaltssicherheitsrichtlinie (Content Security Policy, CSP), und deaktivieren Sie Inline-JavaScript.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Informationsquellen | Einführung in die Inhaltssicherheitsrichtlinie, Referenz für die Inhaltssicherheitsrichtlinie, Einführung in die Inhaltssicherheitsrichtlinie, Kann ich die Inhaltssicherheitsrichtlinie verwenden? |
Schritte | Die Inhaltssicherheitsrichtlinie (Content Security Policy, CSP) ist ein umfassender defensiver Sicherheitsmechanismus – ein W3C-Standard, mit dem Besitzer von Webanwendungen den in Ihre Website eingebetteten Inhalt steuern können. CSP wird auf dem Webserver als HTTP-Antwortheader hinzugefügt und clientseitig vom Browser erzwungen. Die Richtlinie basiert auf einer Zulassungsliste: Eine Website kann einen Satz vertrauenswürdiger Domänen deklarieren, aus denen aktive Inhalte wie etwa JavaScript geladen werden können. CSP bietet folgende Sicherheitsvorteile:
|
Beispiel
Beispielrichtlinie:
Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com
Bei dieser Richtlinie können Skripts nur vom Server der Webanwendung und vom Google Analytics-Server geladen werden. Von anderen Websites geladene Skripts werden abgelehnt. Wenn CSP auf einer Website aktiviert ist, werden folgende Features automatisch deaktiviert, um XSS-Angriffe zu vermeiden.
Beispiel
Es werden keine Inlineskripts ausgeführt. Beispiele für Inlineskripts:
<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);
Beispiel
Zeichenfolgen werden nicht als Code ausgewertet.
Example: var str="alert(1)"; eval(str);
Aktivieren Sie die XSS-Filter des Browsers.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | XSS Protection Filter (XSS-Schutzfilter) |
Schritte | Die Konfiguration des X-XSS-Protection-Antwortheaders steuert den websiteübergreifenden Skriptfilter des Browsers. Dieser Antwortheader kann folgende Werte besitzen:
Hierbei handelt es sich um eine Chromium-Funktion, die CSP-Verletzungsberichte verwendet, um Details an einen URI Ihrer Wahl zu senden. Die letzten beiden Optionen werden als sichere Werte betrachtet. |
ASP.NET-Anwendungen müssen vor der Bereitstellung die Ablaufverfolgung und das Debugging deaktivieren.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Übersicht über das ASP.NET-Debugging, Übersicht über die ASP.NET-Ablaufverfolgung, Vorgehensweise: Aktivieren der Ablaufverfolgung für eine ASP.NET-Anwendung, Vorgehensweise: Aktivieren des Debuggens von ASP.NET-Anwendungen |
Schritte | Wenn die Ablaufverfolgung für die Seite aktiviert ist, erhält jeder Browser, der die Seite anfordert, auch die Ablaufverfolgungsinformationen, die Daten zum internen Serverzustand und zum Workflow enthalten. Diese Informationen sind möglicherweise sicherheitsrelevant. Wenn das Debuggen für die Seite aktiviert ist, führen Fehler auf dem Server dazu, dass der Browser die vollständigen Daten der Stapelüberwachung erhält. Diese Daten enthalten möglicherweise sicherheitsrelevante Informationen zum Workflow des Servers. |
Greifen Sie nur auf Drittanbieter-JavaScripts aus vertrauenswürdigen Quellen zu.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Auf Drittanbieter-JavaScripts darf nur verwiesen werden, wenn diese aus vertrauenswürdigen Quellen stammen. Die Verweisendpunkte müssen immer TLS verwenden. |
Stellen Sie sicher, dass authentifizierte ASP.NET-Seiten gegen UI Redressing und Clickjacking geschützt sind.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Informationsquellen | OWASP-Spickzettel zur Abwehr von Clickjacking, Internet Explorer intern – Abwehren von Clickjacking mit X-Frame-Optionen |
Schritte | Beim Clickjacking (oder UI Redressing) verwendet ein Angreifer mehrere transparente oder undurchsichtige Ebenen, um einen Benutzer dazu zu bringen, auf eine Schaltfläche oder auf einen Link auf einer anderen Seite zu klicken, obwohl der Benutzer eigentlich mit der Seite auf der obersten Ebene interagieren wollte. Zur Erstellung dieser Ebenenstruktur wird eine schädliche Seite mit einem IFrame erstellt, der die Seite des Opfers lädt. Dadurch „kapert“ der Angreifer Klicks, die eigentlich für die ursprüngliche Seite gedacht waren, und leitet sie auf eine andere Seite um, die wahrscheinlich zu einer anderen Anwendung und/oder zu einer anderen Domäne gehört. Legen Sie zur Verhinderung von Clickjacking-Angriffen die richtigen X-Frame-Options-HTTP-Antwortheader fest, die den Browser anweisen, kein Framing von anderen Domänen zuzulassen. |
Beispiel
Der X-FRAME-OPTIONS-Header kann über „web.config“ von IIS festgelegt werden. Codeausschnitt aus „web.config“ für Websites, die niemals mit einem Frame versehen werden dürfen:
<system.webServer>
<httpProtocol>
<customHeader>
<add name="X-FRAME-OPTIONS" value="DENY"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Beispiel
Codeausschnitt aus „web.config“ für Websites, die nur von Seiten aus der gleichen Domäne mit einem Frame versehen werden dürfen:
<system.webServer>
<httpProtocol>
<customHeader>
<add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Stellen Sie sicher, dass nur vertrauenswürdige Ursprünge zulässig sind, wenn CORS für ASP.NET-Webanwendungen aktiviert ist.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Web Forms, MVC5 |
Attribute | – |
Referenzen | – |
Schritte | Die Browsersicherheit verhindert, dass eine Webseite AJAX-Anforderungen an eine andere Domäne richtet. Diese Einschränkung wird als Richtlinie des gleichen Ursprungs bezeichnet und verhindert, dass eine schädliche Website sensible Daten von einer anderen Website liest. Manchmal müssen jedoch unter Umständen APIs sicher verfügbar gemacht werden, damit sie von anderen Websites genutzt werden können. CORS (Cross Origin Resource Sharing; Ressourcenfreigabe zwischen verschiedenen Ursprüngen) ist ein W3C-Standard, der einem Server eine weniger strenge Anwendung der Richtlinie des gleichen Ursprungs ermöglicht. Mit CORS kann ein Server explizit einige ursprungsübergreifende Anforderungen zulassen und andere ablehnen. CORS ist sicherer und flexibler als frühere Techniken wie etwa JSONP. Durch die Aktivierung von CORS werden der Webanwendung im Grunde einige HTTP-Antwortheader (Access-Control-*) hinzugefügt. Dies ist auf mehrere Arten möglich. |
Beispiel
Wenn der Zugriff auf „web.config“ möglich ist, kann CORS über den folgenden Code hinzugefügt werden:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="https://example.com" />
</customHeaders>
</httpProtocol>
Beispiel
Wenn der Zugriff auf „web.config“ nicht möglich ist, kann CORS durch Hinzufügen des folgenden C#-Codes konfiguriert werden:
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")
Stellen Sie unbedingt sicher, dass die Liste mit Ursprüngen im Attribut „Access-Control-Allow-Origin“ auf eine begrenzte Anzahl vertrauenswürdiger Ursprünge festgelegt ist. Ist dieser Aspekt nicht ordnungsgemäß konfiguriert (also der Wert beispielsweise auf „*“ festgelegt), können schädliche Websites ursprungsübergreifende Anforderungen ohne jegliche Einschränkungen an die Webanwendung >richten, wodurch die Anwendung für CSRF-Angriffe anfällig wird.
Aktivieren Sie für ASP.NET-Seiten das ValidateRequest-Attribut.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Web Forms, MVC5 |
Attribute | – |
Referenzen | Request Validation - Preventing Script Attacks (Anforderungsüberprüfung – Verhindern von Skriptangriffen) |
Schritte | Das Anforderungsüberprüfungsfeature von ASP.NET ist seit Version 1.1 verfügbar und verhindert, dass der Server Inhalte mit nicht codierter HTML akzeptiert. Diese Funktion soll dazu beitragen, einige Skript-Injektions-Angriffe zu verhindern, bei denen Skriptcode oder HTML vom Client unwissentlich an einen Server übermittelt, gespeichert und dann anderen Benutzern präsentiert werden kann. Es wird weiterhin dringend empfohlen, sämtliche Eingabedaten zu überprüfen und gegebenenfalls als HTML zu codieren. Bei der Anforderungsüberprüfung werden sämtliche Eingabedaten mit einer Liste potenziell gefährlicher Werte verglichen. Im Falle einer Übereinstimmung löst ASP.NET Folgendes aus: |
Beispiel
Dieses Feature kann jedoch auf Seitenebene deaktiviert werden:
<%@ Page validateRequest="false" %>
Oder auf Anwendungsebene:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
Beachten Sie, dass das Anforderungsüberprüfungsfeature nicht unterstützt wird und nicht Teil der MVC6-Pipeline ist.
Verwenden Sie die neuesten Versionen von JavaScript-Bibliotheken (lokal gehostet).
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Entwickler, die mit standardmäßigen JavaScript-Bibliotheken wie JQuery arbeiten, müssen genehmigte Versionen gängiger JavaScript-Bibliotheken verwenden, die keine bekannten Sicherheitsmängel enthalten. Es empfiehlt sich, stets die neueste Version der Bibliotheken zu verwenden, da sie Sicherheitsfixes für bekannte Sicherheitsrisiken aus älteren Versionen enthalten. Falls die neueste Version aus Kompatibilitätsgründen nicht verwendet werden kann, sollten folgende Mindestversionen verwendet werden. Akzeptable Mindestversionen:
Laden Sie niemals eine JavaScript-Bibliothek von externen Websites (beispielsweise von öffentlichen CDNs). |
Deaktivieren Sie die automatische MIME-Ermittlung.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | IE8 Security Part V: Comprehensive Protection (IE8-Sicherheit Teil V: Umfassender Schutz), MIME-Typ |
Schritte | Der Header „X-Content-Type-Options“ ist ein HTTP-Header, mit dem Entwickler festlegen, dass für ihre Inhalte keine MIME-Ermittlung erfolgen soll. Dieser Header dient zur Minderung von MIME-Ermittlungsangriffen. Für jede Seite, die möglicherweise von Benutzern steuerbare Inhalte enthält, muss der HTTP-Header „X-Content-Type-Options:nosniff“ verwendet werden. Verwenden Sie eines der folgenden Verfahren, um den erforderlichen Header global für alle Seiten in der Anwendung zu aktivieren: |
Beispiel
Fügen Sie den Header der Datei „web.config“ hinzu, wenn die Anwendung von Internet Information Services (IIS; ab Version 7) gehostet wird.
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Beispiel
Den Header über die globale Anforderung „Application_BeginRequest“ hinzufügen
void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}
Beispiel
Implementieren des benutzerdefinierten HTTP-Moduls
public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}
Beispiel
Sie können den erforderlichen Header nur für bestimmte Seiten aktivieren, indem sie ihn einzelnen Antworten hinzufügen:
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
Entfernen Sie Serverstandardheader für Windows Azure-Websites, um Fingerprinting zu vermeiden.
Titel | Details |
---|---|
Komponente | Webanwendung. |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | EnvironmentType: Azure |
Referenzen | Removing standard server headers on Windows Azure Web Sites (Entfernen von Serverstandardheadern für Windows Azure-Websites) |
Schritte | Header wie „Server“, „X-Powered-By“ und „X-AspNet-Version“ geben Informationen zum Server und zu den zugrunde liegenden Technologien preis. Es empfiehlt sich, diese Header zu unterdrücken, um das Fingerprinting der Anwendung zu verhindern. |
Konfigurieren einer Windows-Firewall für Datenbank-Engine-Zugriff
Titel | Details |
---|---|
Komponente | Datenbank |
SDL-Phase | Entwickeln |
Zutreffende Technologien | SQL Azure, lokal |
Attribute | N/V, SQL-Version: V12 |
Referenzen | Azure SQL-Datenbank- und Azure Synapse-IP-Firewallregeln, Konfigurieren einer Windows-Firewall für Datenbank-Engine-Zugriff |
Schritte | Durch Firewallsysteme kann der nicht autorisierte Zugriff auf Computerressourcen verhindert werden. Wenn Sie durch eine Firewall auf eine Instanz der SQL Server-Datenbank-Engine zugreifen möchten, müssen Sie die Firewall auf dem Computer, auf dem SQL Server ausgeführt wird, entsprechend konfigurieren. |
Stellen Sie sicher, dass nur vertrauenswürdige Ursprünge zulässig sind, wenn CORS für die ASP.NET-Web-API aktiviert ist.
Titel | Details |
---|---|
Komponente | Web-API |
SDL-Phase | Entwickeln |
Zutreffende Technologien | MVC 5 |
Attribute | – |
Referenzen | Enabling Cross-Origin Requests in ASP.NET Web API 2 (Ermöglichen ursprungsübergreifender Anforderungen in der ASP.NET-Web-API 2), ASP.NET-Web-API – CORS-Unterstützung in der ASP.NET-Web-API 2 |
Schritte | Die Browsersicherheit verhindert, dass eine Webseite AJAX-Anforderungen an eine andere Domäne richtet. Diese Einschränkung wird als Richtlinie des gleichen Ursprungs bezeichnet und verhindert, dass eine schädliche Website sensible Daten von einer anderen Website liest. Manchmal müssen jedoch unter Umständen APIs sicher verfügbar gemacht werden, damit sie von anderen Websites genutzt werden können. CORS (Cross Origin Resource Sharing; Ressourcenfreigabe zwischen verschiedenen Ursprüngen) ist ein W3C-Standard, der einem Server eine weniger strenge Anwendung der Richtlinie des gleichen Ursprungs ermöglicht. Mit CORS kann ein Server explizit einige ursprungsübergreifende Anforderungen zulassen und andere ablehnen. CORS ist sicherer und flexibler als frühere Techniken wie etwa JSONP. |
Beispiel
Fügen Sie den folgenden Code in „App_Start/WebApiConfig.cs“ der Methode „WebApiConfig.Register“ hinzu:
using System.Web.Http;
namespace WebService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
Beispiel
Das EnableCors-Attribut kann wie folgt auf Aktionsmethoden in einem Controller angewendet werden:
public class ResourcesController : ApiController
{
[EnableCors("http://localhost:55912", // Origin
null, // Request headers
"GET", // HTTP methods
"bar", // Response headers
SupportsCredentials=true // Allow credentials
)]
public HttpResponseMessage Get(int id)
{
var resp = Request.CreateResponse(HttpStatusCode.NoContent);
resp.Headers.Add("bar", "a bar value");
return resp;
}
[EnableCors("http://localhost:55912", // Origin
"Accept, Origin, Content-Type", // Request headers
"PUT", // HTTP methods
PreflightMaxAge=600 // Preflight cache duration
)]
public HttpResponseMessage Put(Resource data)
{
return Request.CreateResponse(HttpStatusCode.OK, data);
}
[EnableCors("http://localhost:55912", // Origin
"Accept, Origin, Content-Type", // Request headers
"POST", // HTTP methods
PreflightMaxAge=600 // Preflight cache duration
)]
public HttpResponseMessage Post(Resource data)
{
return Request.CreateResponse(HttpStatusCode.OK, data);
}
}
Stellen Sie unbedingt sicher, dass die Liste mit Ursprüngen im EnableCors-Attribut auf eine begrenzte Anzahl vertrauenswürdiger Ursprünge festgelegt ist. Ist dieser Aspekt nicht ordnungsgemäß konfiguriert (also der Wert beispielsweise auf „*“ festgelegt), können schädliche Websites ursprungsübergreifende Anforderungen ohne jegliche Einschränkungen >an die API richten, wodurch die API für CSRF-Angriffe anfällig wird. EnableCors kann auf Controllerebene ausgestattet werden.
Beispiel
Wenn Sie CORS für eine bestimmte Methode in einer Klasse deaktivieren möchten, kann das DisableCors-Attribut wie folgt verwendet werden:
[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
public HttpResponseMessage Put(Resource data)
{
return Request.CreateResponse(HttpStatusCode.OK, data);
}
public HttpResponseMessage Post(Resource data)
{
return Request.CreateResponse(HttpStatusCode.OK, data);
}
// CORS not allowed because of the [DisableCors] attribute
[DisableCors]
public HttpResponseMessage Delete(int id)
{
return Request.CreateResponse(HttpStatusCode.NoContent);
}
}
Titel | Details |
---|---|
Komponente | Web-API |
SDL-Phase | Entwickeln |
Zutreffende Technologien | MVC 6 |
Attribute | – |
Referenzen | Enabling Cross-Origin Requests (CORS) in ASP.NET Core 1.0 (Aktivieren von CORS in ASP.NET Core 1.0) |
Schritte | In ASP.NET Core 1.0 kann CORS entweder mithilfe von Middleware oder mithilfe von MVC aktiviert werden. Bei Verwendung von MVC werden die gleichen CORS-Dienste verwendet, aber nicht die CORS-Middleware. |
Vorgehensweise 1: Aktivieren von CORS mithilfe von Middleware: Wenn Sie CORS für die gesamte Anwendung aktivieren möchten, fügen Sie die CORS-Middleware mithilfe der UseCors-Erweiterungsmethode der Anforderungspipeline hinzu. Beim Hinzufügen der CORS-Middleware kann mithilfe der CorsPolicyBuilder-Klasse eine ursprungsübergreifende Richtlinie angegeben werden. Hierfür gibt es zwei Möglichkeiten:
Beispiel
Das erste Beispiel dient zum Aufrufen von „UseCors“ mit einem Lambda. Das Lambda akzeptiert ein CorsPolicyBuilder-Objekt:
public void Configure(IApplicationBuilder app)
{
app.UseCors(builder =>
builder.WithOrigins("https://example.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}
Beispiel
Das zweite Beispiel dient dazu, mindestens eine benannte CORS-Richtlinie zu definieren und anschließenden zur Laufzeit anhand des Namens auszuwählen.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("https://example.com"));
});
}
public void Configure(IApplicationBuilder app)
{
app.UseCors("AllowSpecificOrigin");
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
Vorgehensweise 2: Aktivieren von CORS in MVC: Entwickler können alternativ MVC verwenden, um bestimmte CORS pro Aktion, pro Controller oder global für alle Controller anzuwenden.
Beispiel
Pro Aktion: Fügen Sie einer Aktion das EnableCors-Attribut hinzu, um eine CORS-Richtlinie für eine bestimmte Aktion anzugeben. Geben Sie den Namen der Richtlinie an.
public class HomeController : Controller
{
[EnableCors("AllowSpecificOrigin")]
public IActionResult Index()
{
return View();
}
Beispiel
Pro Controller:
[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{
Beispiel
Global:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
});
}
Stellen Sie unbedingt sicher, dass die Liste mit Ursprüngen im EnableCors-Attribut auf eine begrenzte Anzahl vertrauenswürdiger Ursprünge festgelegt ist. Ist dieser Aspekt nicht ordnungsgemäß konfiguriert (also der Wert beispielsweise auf „*“ festgelegt), können schädliche Websites ursprungsübergreifende Anforderungen ohne jegliche Einschränkungen >an die API richten, wodurch die API für CSRF-Angriffe anfällig wird.
Beispiel
Wenn Sie CORS für einen Controller oder eine Aktion deaktivieren möchten, verwenden Sie das DisableCors-Attribut.
[DisableCors]
public IActionResult About()
{
return View();
}
Verschlüsseln Sie Abschnitte der Web-API-Konfigurationsdateien, die sensible Daten enthalten.
Titel | Details |
---|---|
Komponente | Web-API |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Vorgehensweise: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI (Gewusst wie: Verschlüsseln von Konfigurationsabschnitten in ASP.NET 2.0 mithilfe von DPAPI), Angeben eines geschützten Konfigurationsanbieters, Verwenden von Azure Key Vault zum Schützen von Anwendungsgeheimnissen |
Schritte | In Konfigurationsdateien wie „web.config“ und „appsettings.json“ werden häufig sensible Informationen wie Benutzernamen, Kennwörter, Datenbankverbindungszeichenfolgen und Verschlüsselungsschlüssel gespeichert. Wenn Sie diese Informationen nicht schützen, können Angreifer oder böswillige Benutzer an sensible Informationen wie Kontobenutzernamen und Kennwörter, Datenbanknamen und Servernamen gelangen. Verschlüsseln Sie daher die sensiblen Abschnitte von Konfigurationsdateien basierend auf dem Bereitstellungstyp (Azure/lokal) mithilfe von DPAPI oder mithilfe von Diensten wie Azure Key Vault. |
Stellen Sie sicher, dass alle Administratoroberflächen durch sichere Anmeldeinformationen geschützt sind.
Titel | Details |
---|---|
Komponente | IoT-Gerät |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Administratoroberflächen, die das Gerät oder das zwischengeschaltete Gateway verfügbar macht, müssen mit sicheren Anmeldeinformationen geschützt werden. Weitere verfügbar gemachte Schnittstellen wie WLAN, SSH, Dateifreigaben und FTP müssen mit sicheren Anmeldeinformationen geschützt werden. Verwenden Sie keine unsicheren Standardkennwörter. |
Stellen Sie sicher, dass auf Geräten kein unbekannter Code ausgeführt werden kann.
Titel | Details |
---|---|
Komponente | IoT-Gerät |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Enabling Secure Boot and BitLocker Device Encryption on Windows 10 IoT Core (Aktivieren des sicheren Starts und der BitLocker-Geräteverschlüsselung unter Windows 10 IoT Core) |
Schritte | Der sichere UEFI-Start sorgt mittels Einschränkung des Systems dafür, dass nur Binärdateien ausgeführt werden können, die von einer angegebenen Stelle signiert wurden. Dieses Feature verhindert die Ausführung von unbekanntem Code auf der Plattform und damit eine potenzielle Beeinträchtigung ihres Sicherheitsstatus. Aktivieren Sie den sicheren UEFI-Start, und schränken Sie die Liste mit den vertrauenswürdigen Zertifizierungsstellen ein, die Code signieren können. Lassen Sie sämtlichen Code, der auf dem Gerät bereitgestellt wird, von einer der vertrauenswürdigen Zertifizierungsstellen signieren. |
Verschlüsseln Sie die Betriebssystempartition und andere Partitionen des IoT-Geräts mit BitLocker.
Titel | Details |
---|---|
Komponente | IoT-Gerät |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Windows 10 IoT Core implementiert eine vereinfachte Version der BitLocker-Geräteverschlüsselung, die stark davon abhängig ist, dass die Plattform über ein TPM verfügt – einschließlich des erforderlichen preOS-Protokolls in UEFI zur Durchführung der erforderlichen Messungen. Mit diesen preOS-Messungen wird sichergestellt, dass das Betriebssystem später eindeutig nachvollziehen kann, wie es gestartet wurde. Verschlüsseln Sie Betriebssystempartitionen und andere Partitionen, auf denen sensible Daten gespeichert sind, mit BitLocker. |
Stellen Sie sicher, dass auf Geräten nur unbedingt erforderliche Dienste/Features aktiviert sind.
Titel | Details |
---|---|
Komponente | IoT-Gerät |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Lassen Sie alle Features oder Dienste des Betriebssystems, die nicht für den ordnungsgemäßen Betrieb der Lösung benötigt werden, deaktiviert, bzw. deaktivieren Sie sie. Falls für das Gerät also beispielsweise keine Benutzeroberfläche bereitgestellt werden muss, installieren Sie Windows IoT Core im monitorlosen Modus. |
Verschlüsseln Sie die Betriebssystempartition und andere Partitionen des zwischengeschalteten IoT-Gateways mit BitLocker.
Titel | Details |
---|---|
Komponente | Zwischengeschaltetes IoT-Gateway |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Windows 10 IoT Core implementiert eine vereinfachte Version der BitLocker-Geräteverschlüsselung, die stark davon abhängig ist, dass die Plattform über ein TPM verfügt – einschließlich des erforderlichen preOS-Protokolls in UEFI zur Durchführung der erforderlichen Messungen. Mit diesen preOS-Messungen wird sichergestellt, dass das Betriebssystem später eindeutig nachvollziehen kann, wie es gestartet wurde. Verschlüsseln Sie Betriebssystempartitionen und andere Partitionen, auf denen sensible Daten gespeichert sind, mit BitLocker. |
Stellen Sie sicher, dass die Standardanmeldeinformationen des zwischengeschalteten Gateways bei der Installation geändert werden.
Titel | Details |
---|---|
Komponente | Zwischengeschaltetes IoT-Gateway |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Stellen Sie sicher, dass die Standardanmeldeinformationen des zwischengeschalteten Gateways bei der Installation geändert werden. |
Stellen Sie sicher, dass das Cloudgateway einen Prozess implementiert, der die Firmware verbundener Geräte auf dem neuesten Stand hält.
Titel | Details |
---|---|
Komponente | IoT-Cloudgateway |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | Wahl des Gateways: Azure IoT Hub |
Referenzen | Übersicht über die IoT Hub-Geräteverwaltung,Tutorial: Device Update for Azure IoT Hub unter Verwendung des Raspberry Pi 3 B+-Referenzimages. |
Schritte | LWM2M ist ein Protokoll der Open Mobile Alliance zur Verwaltung von IoT-Geräten. Die Azure IoT-Geräteverwaltung ermöglicht die Interaktion mit physischen Geräten über Geräteaufträge. Stellen Sie sicher, dass das Cloudgateway einen Prozess implementiert, der das Gerät und andere Konfigurationsdaten mithilfe der Geräteverwaltung von Azure IoT Hub regelmäßig auf den neuesten Stand bringt. |
Stellen Sie sicher, dass für Geräte organisationsrichtlinienkonforme Endpunktsicherheitskontrollen konfiguriert sind.
Titel | Details |
---|---|
Komponente | Computer-Vertrauensstellungsgrenze |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | – |
Schritte | Stellen Sie sicher, dass für Geräte organisationsrichtlinienkonforme Endpunktsicherheitskontrollen konfiguriert sind. Beispiele wären etwa BitLocker für die Verschlüsselung auf Datenträgerebene, Virenschutz mit aktualisierten Signaturen, eine hostbasierte Firewall, Betriebssystemupgrades und Gruppenrichtlinien. |
Gewährleisten Sie die sichere Verwaltung von Azure-Speicherzugriffsschlüsseln.
Titel | Details |
---|---|
Komponente | Azure Storage |
SDL-Phase | Bereitstellung |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Azure Storage-Sicherheitsleitfaden – Verwalten Ihres Speicherkontoschlüssels |
Schritte | Schlüsselspeicher: Es wird empfohlen, die Azure-Speicherzugriffsschlüssel als Geheimnis in Azure Key Vault zu speichern und von den Anwendungen aus dem Schlüsseltresor abrufen zu lassen. Dies empfiehlt sich aus folgenden Gründen:
|
Stellen Sie sicher, dass nur vertrauenswürdige Ursprünge zulässig sind, wenn CORS für Azure Storage aktiviert ist.
Titel | Details |
---|---|
Komponente | Azure Storage |
SDL-Phase | Entwickeln |
Zutreffende Technologien | Allgemein |
Attribute | – |
Referenzen | Cross-Origin Resource Sharing (CORS) Support for the Azure Storage Services (Unterstützung von CORS (Cross-Origin Resource Sharing; ursprungsübergreifende Freigabe) für die Azure Storage-Dienste) |
Schritte | Mit Azure Storage können Sie CORS aktivieren – Ressourcenfreigabe zwischen verschiedenen Ursprüngen. Für jedes Speicherkonto können Sie Domänen angeben, die auf die Ressourcen in diesem Speicherkonto zugreifen können. CORS ist standardmäßig für alle Dienste deaktiviert. Sie können CORS mithilfe der REST-API oder der Speicherclientbibliothek für den Aufruf einer der Methoden zum Festlegen von Dienstrichtlinien aktivieren. |
Aktivieren Sie das Diensteinschränkungsfeature von WCF.
Titel | Details |
---|---|
Komponente | WCF |
SDL-Phase | Entwickeln |
Zutreffende Technologien | .NET Framework 3 |
Attribute | – |
Referenzen | MSDN, Fortify Kingdom |
Schritte | Wird die Verwendung der Systemressourcen nicht begrenzt, gehen die Ressourcen unter Umständen zur Neige, was letztendlich zu einem Denial-of-Service-Zustand führt.
|
Beispiel
Das folgende Beispiel zeigt eine Konfiguration mit aktivierter Drosselung:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Throttled">
<serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" />
...
</system.serviceModel>
Offenlegung von WCF-Informationen durch Metadaten
Titel | Details |
---|---|
Komponente | WCF |
SDL-Phase | Entwickeln |
Zutreffende Technologien | .NET Framework 3 |
Attribute | – |
Referenzen | MSDN, Fortify Kingdom |
Schritte | Anhand von Metadaten kann ein Angreifer Informationen zum System erlangen und einen Angriff planen. WCF-Dienste können so konfiguriert werden, dass sie Metadaten verfügbar machen. Metadaten liefern eine ausführliche Dienstbeschreibung und dürfen in Produktionsumgebungen nicht weitergegeben werden. Die Eigenschaften HttpGetEnabled / HttpsGetEnabled der ServiceMetaData-Klasse definieren, ob ein Dienst Metadaten verfügbar macht. |
Beispiel
Der folgende Code weist WCF an, die Metadaten eines Diensts weiterzugeben:
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri(EndPointAddress);
Host.Description.Behaviors.Add(smb);
Dienstmetadaten dürfen in Produktionsumgebungen nicht weitergegeben werden. Legen Sie die Eigenschaften „HttpGetEnabled“ und „HttpsGetEnabled“ der ServiceMetaData-Klasse auf „false“ fest.
Beispiel
Der folgende Code weist WCF an, die Metadaten eines Diensts nicht weiterzugeben:
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = false;
smb.HttpGetUrl = new Uri(EndPointAddress);
Host.Description.Behaviors.Add(smb);