Delen via


Beveiligingsframe: Configuratiebeheer | Oplossingen

Product/service Artikel
Webtoepassing
Database
Web-API
IoT-apparaat
IoT-veldgateway
IoT Cloud Gateway
Grens van machinevertrouwen
Azure Storage
WCF

CSP (Content Security Policy) implementeren en inline JavaScript uitschakelen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie Een inleiding tot Inhoudsbeveiligingsbeleid, Naslaginformatie over inhoudsbeveiliging, Inleiding tot inhoudsbeveiligingsbeleid, Kan ik CSP gebruiken?
Stappen

Content Security Policy (CSP) is een diepgaande beveiligingsmechanisme, een W3C-standaard, waarmee eigenaren van webtoepassingen controle kunnen hebben over de inhoud die is ingesloten op hun site. CSP wordt toegevoegd als een HTTP-antwoordheader op de webserver en wordt afgedwongen op de client naast browsers. Het is een beleid op basis van een lijst: een website kan een set vertrouwde domeinen declareren waaruit actieve inhoud, zoals JavaScript, kan worden geladen.

CSP biedt de volgende beveiligingsvoordelen:

  • Beveiliging tegen XSS: Als een pagina kwetsbaar is voor XSS, kan een aanvaller deze op twee manieren misbruiken:
    • Injecteren <script>malicious code</script>. Deze aanval werkt niet vanwege de basisbeperking van CSP-1
    • Injecteren <script src="http://attacker.com/maliciousCode.js"/>. Deze aanval werkt niet omdat het door de aanvaller beheerde domein niet in de lijst met toegestane domeinen van CSP staat
  • Controle over gegevensexfiltratie: als schadelijke inhoud op een webpagina probeert verbinding te maken met een externe website en gegevens steelt, wordt de verbinding afgebroken door CSP. Dit komt doordat het doeldomein niet in de lijst met toegestane CSP's staat
  • Verdediging tegen click-jacking: click-jacking is een aanvalstechniek waarmee een kwaadwillende gebruiker een echte website kan omkaderen en gebruikers dwingen om op UI-elementen te klikken. Op dit moment wordt beveiliging tegen klikken bereikt door een antwoordheader- X-Frame-Options te configureren. Niet alle browsers respecteren deze header en de volgende CSP is een standaardmethode om te beschermen tegen click-jacking
  • Realtime aanvalsrapportage: Als er een injectieaanval op een CSP-website is, activeren browsers automatisch een melding naar een eindpunt dat op de webserver is geconfigureerd. Op deze manier fungeert CSP als een realtime waarschuwingssysteem.

Opmerking

Voorbeeldbeleid:

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

Met dit beleid kunnen scripts alleen worden geladen vanaf de server van de webtoepassing en de Google Analytics-server. Scripts die vanaf een andere site worden geladen, worden geweigerd. Wanneer CSP is ingeschakeld op een website, worden de volgende functies automatisch uitgeschakeld om XSS-aanvallen te beperken.

Opmerking

Inlinescripts worden niet uitgevoerd. Hieronder volgen voorbeelden van inlinescripts

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

Opmerking

Tekenreeksen worden niet geëvalueerd als code.

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

XSS-filter van browser inschakelen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie XSS-beveiligingsfilter
Stappen

De configuratie van de antwoordheader van X-XSS-Protection bepaalt het scriptfilter voor meerdere sites van de browser. Deze antwoordheader kan de volgende waarden hebben:

  • 0: Hiermee wordt het filter uitgeschakeld
  • 1: Filter enabled Als er een aanval op meerdere sites wordt gedetecteerd om de aanval te stoppen, wordt de pagina door de browser opgeschoond
  • 1: mode=block : Filter enabled. In plaats van de pagina te opschonen, voorkomt de browser dat de pagina wordt weergegeven wanneer er een XSS-aanval wordt gedetecteerd
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. De pagina wordt door de browser opgeschoond en de schending wordt door de browser opschonen.

Dit is een Chromium-functie die gebruikmaakt van CSP-schendingenrapporten om details naar een URI van uw keuze te verzenden. De laatste twee opties worden beschouwd als veilige waarden.

ASP.NET toepassingen moeten tracering en foutopsporing uitschakelen voordat ze worden geïmplementeerd

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie ASP.NET Overzicht van foutopsporing, overzicht van ASP.NET tracering, tracering inschakelen voor een ASP.NET-toepassing, instructies: Foutopsporing inschakelen voor ASP.NET-toepassingen
Stappen Wanneer tracering is ingeschakeld voor de pagina, verkrijgt elke browser die deze aanvraagt ook de traceringsgegevens die gegevens over de interne serverstatus en werkstroom bevatten. Deze informatie kan beveiligingsgevoelig zijn. Wanneer foutopsporing is ingeschakeld voor de pagina, worden fouten op de server veroorzaakt door een volledige stacktraceringsgegevens die in de browser worden weergegeven. Deze gegevens bevatten mogelijk beveiligingsgevoelige informatie over de werkstroom van de server.

Alleen toegang krijgen tot JavaScripts van derden vanuit vertrouwde bronnen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Er mag alleen naar JavaScripts van derden worden verwezen vanuit vertrouwde bronnen. De referentie-eindpunten moeten altijd op TLS zijn.

Zorg ervoor dat geverifieerde ASP.NET-pagina's ui-verhaal- of click-jacking-verdediging bevatten

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie OWASP click-jacking Defense Cheat Sheet, Internet Explorer Internals - Combating click-jacking with X-Frame-Options
Stappen

Klik-jacking, ook wel bekend als een 'aanval op gebruikersinterfaceherstel', is wanneer een aanvaller meerdere transparante of ondoorzichtige lagen gebruikt om een gebruiker te misleiden om op een knop of koppeling op een andere pagina te klikken wanneer ze op de pagina op het hoogste niveau wilden klikken.

Deze gelaagdheid wordt bereikt door een schadelijke pagina te maken met een iframe, waarmee de pagina van het slachtoffer wordt geladen. De aanvaller is dus 'hijacking' klikken die bedoeld zijn voor hun pagina en deze doorsturen naar een andere pagina, waarschijnlijk eigendom van een andere toepassing, domein of beide. Als u click-jacking-aanvallen wilt voorkomen, stelt u de juiste HTTP-antwoordheaders van X-Frame-Options in die de browser instrueren om framelijsten van andere domeinen niet toe te staan

Opmerking

De X-FRAME-OPTIONS-header kan worden ingesteld via IIS web.config. Codefragment web.config voor sites die nooit mogen worden omkaderd:

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

Opmerking

Web.config-code voor sites die alleen door pagina's in hetzelfde domein mogen worden omlijst:

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

Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld voor ASP.NET-webtoepassingen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Webformulieren, MVC5
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen

Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen indient bij een ander domein. Deze beperking, die bekendstaat als beleid voor zelfde oorsprong, voorkomt dat een kwaadwillende site gevoelige gegevens leest vanaf een andere site. Soms kan het echter nodig zijn om API's veilig beschikbaar te maken die andere sites kunnen gebruiken. Cross Origin Resource Sharing (CORS) is een W3C-standaard waarmee een server hetzelfde origin-beleid kan versoepelen. Met CORS kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere aanvragen worden geweigerd.

CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP. Het inschakelen van CORS wordt in de kern omgezet in het toevoegen van enkele HTTP-antwoordheaders (Access-Control-*) aan de webtoepassing. Dit kan op een aantal manieren worden gedaan.

Opmerking

Als toegang tot Web.config beschikbaar is, kan CORS worden toegevoegd via de volgende code:

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

Opmerking

Als toegang tot web.config niet beschikbaar is, kan CORS worden geconfigureerd door de volgende C#-code toe te voegen:

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

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk Access-Control-Allow-Origin is ingesteld op een eindige en vertrouwde set origins. Als u dit niet op ongepaste wijze configureert (bijvoorbeeld het instellen van de waarde als *), kunnen kwaadwillende sites aanvragen voor cross-origin-aanvragen naar de webtoepassing >zonder beperkingen activeren, waardoor de toepassing kwetsbaar wordt voor CSRF-aanvallen.

Het kenmerk ValidateRequest inschakelen op ASP.NET Pagina's

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Webformulieren, MVC5
Kenmerken N.v.t.
Naslaginformatie Aanvraagvalidatie : scriptaanvallen voorkomen
Stappen

Aanvraagvalidatie, een functie van ASP.NET sinds versie 1.1, voorkomt dat de server inhoud accepteert die niet-gecodeerde HTML bevat. Deze functie is ontworpen om bepaalde scriptinjectieaanvallen te helpen voorkomen, waarbij clientscriptcode of HTML onbewust naar een server kan worden verzonden, opgeslagen en vervolgens aan andere gebruikers kan worden gepresenteerd. We raden u nog steeds ten zeerste aan alle invoergegevens te valideren en HTML te coderen wanneer dit nodig is.

Aanvraagvalidatie wordt uitgevoerd door alle invoergegevens te vergelijken met een lijst met mogelijk gevaarlijke waarden. Als er een overeenkomst optreedt, ASP.NET een HttpRequestValidationException. De functie Validatie van aanvragen is standaard ingeschakeld.

Opmerking

Deze functie kan echter worden uitgeschakeld op paginaniveau:

<%@ Page validateRequest="false" %> 

of, op toepassingsniveau

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

Houd er rekening mee dat de functie Validatie van aanvragen niet wordt ondersteund en geen deel uitmaakt van de MVC6-pijplijn.

Lokaal gehoste nieuwste versies van JavaScript-bibliotheken gebruiken

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen

Ontwikkelaars die standaard JavaScript-bibliotheken gebruiken, zoals JQuery, moeten goedgekeurde versies van algemene JavaScript-bibliotheken gebruiken die geen bekende beveiligingsfouten bevatten. Een goede gewoonte is om de meest recente versie van de bibliotheken te gebruiken, omdat deze beveiligingsoplossingen bevatten voor bekende beveiligingsproblemen in hun oudere versies.

Als de meest recente release niet kan worden gebruikt vanwege compatibiliteitsredenen, moeten de onderstaande minimumversies worden gebruikt.

Acceptabele minimumversies:

  • 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
  • Ajax Control Toolkit
    • Ajax Control Toolkit 40412
  • ASP.NET webformulieren en Ajax
    • ASP.NET Web Forms en Ajax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Laad nooit een JavaScript-bibliotheek van externe sites, zoals openbare CDN's

Automatische MIME-sniffing uitschakelen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie IE8-beveiligingsonderdeel V: Uitgebreide beveiliging, MIME-type
Stappen De header X-Content-Type-Options is een HTTP-header waarmee ontwikkelaars kunnen opgeven dat hun inhoud niet MIME-sniffed mag zijn. Deze header is ontworpen om MIME-Sniffing-aanvallen te beperken. Voor elke pagina die besturingselementbare inhoud van de gebruiker kan bevatten, moet u de HTTP-header X-Content-Type-Options:nosniff gebruiken. Als u de vereiste header globaal wilt inschakelen voor alle pagina's in de toepassing, kunt u een van de volgende handelingen uitvoeren

Opmerking

Voeg de header toe aan het web.config-bestand als de toepassing wordt gehost door IIS (Internet Information Services) 7 en hoger.

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

Opmerking

Voeg de header toe via de globale Application_BeginRequest

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

Opmerking

Aangepaste HTTP-module implementeren

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

Opmerking

U kunt de vereiste header alleen inschakelen voor specifieke pagina's door deze toe te voegen aan afzonderlijke antwoorden:

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

Standaardserverheaders verwijderen op Windows Azure-websites om vingerafdrukken te voorkomen

Titel DETAILS
Onderdeel Webtoepassing
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken EnvironmentType - Azure
Naslaginformatie Standaardserverheaders verwijderen op Windows Azure-websites
Stappen Headers zoals Server, X-Powered-By, X-AspNet-Version onthullen informatie over de server en de onderliggende technologieën. Het wordt aanbevolen om deze headers te onderdrukken, waardoor vingerafdruk van de toepassing wordt voorkomen

Een Windows Firewall configureren voor Database Engine Access

Titel DETAILS
Onderdeel Database
SDL-fase Build
Toepasselijke technologieën SQL Azure, OnPrem
Kenmerken N.v.v., SQL-versie - V12
Naslaginformatie Een Azure SQL Database-firewall configureren, een Windows Firewall configureren voor Database Engine Access
Stappen Firewallsystemen helpen onbevoegde toegang tot computerresources te voorkomen. Als u toegang wilt krijgen tot een exemplaar van de SQL Server Database Engine via een firewall, moet u de firewall op de computer met SQL Server configureren om toegang toe te staan

Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld op ASP.NET Web-API

Titel DETAILS
Onderdeel Web-API
SDL-fase Build
Toepasselijke technologieën MVC 5
Kenmerken N.v.t.
Naslaginformatie Cross-Origin-aanvragen inschakelen in ASP.NET Web-API 2, ASP.NET Web-API - CORS-ondersteuning in ASP.NET Web-API 2
Stappen

Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen indient bij een ander domein. Deze beperking, die bekendstaat als beleid voor zelfde oorsprong, voorkomt dat een kwaadwillende site gevoelige gegevens leest vanaf een andere site. Soms kan het echter nodig zijn om API's veilig beschikbaar te maken die andere sites kunnen gebruiken. Cross Origin Resource Sharing (CORS) is een W3C-standaard waarmee een server hetzelfde origin-beleid kan versoepelen.

Met CORS kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere aanvragen worden geweigerd. CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP.

Opmerking

Voeg in de App_Start/WebApiConfig.cs de volgende code toe aan de methode 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 }
            );
        }
    }
}

Opmerking

EnableCors-kenmerk kan als volgt worden toegepast op actiemethoden in een controller:

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

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk EnableCors is ingesteld op een eindige en vertrouwde set origins. Als u dit niet op ongepaste wijze configureert (bijvoorbeeld door de waarde in te stellen als '*'), kunnen kwaadwillende sites aanvragen voor meerdere oorsprongen zonder beperkingen activeren voor de API, >waardoor de API kwetsbaar wordt voor CSRF-aanvallen. EnableCors kan worden ingericht op controllerniveau.

Opmerking

Als u CORS wilt uitschakelen voor een bepaalde methode in een klasse, kan het kenmerk DisableCors worden gebruikt zoals hieronder wordt weergegeven:

[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
Onderdeel Web-API
SDL-fase Build
Toepasselijke technologieën MVC 6
Kenmerken N.v.t.
Naslaginformatie CORS (Cross-Origin Requests) inschakelen in ASP.NET Core 1.0
Stappen

In ASP.NET Core 1.0 kan CORS worden ingeschakeld met behulp van middleware of MVC. Wanneer u MVC gebruikt om CORS in te schakelen, worden dezelfde CORS-services gebruikt, maar de CORS-middleware is dat niet.

Aanpak-1 CORS met middleware inschakelen: als u CORS wilt inschakelen voor de hele toepassing, voegt u de CORS-middleware toe aan de aanvraagpijplijn met behulp van de UseCors-extensiemethode. Er kan een cross-origin-beleid worden opgegeven bij het toevoegen van de CORS-middleware met behulp van de klasse CorsPolicyBuilder. Er zijn twee manieren om dit te doen:

Opmerking

De eerste is het aanroepen van UseCors met een lambda. De lambda neemt een CorsPolicyBuilder-object:

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

Opmerking

Ten tweede definieert u een of meer benoemde CORS-beleidsregels en selecteert u vervolgens het beleid op naam tijdens runtime.

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

Aanpak-2 CORS inschakelen in MVC: ontwikkelaars kunnen MVC ook gebruiken om specifieke CORS per actie, per controller of globaal toe te passen voor alle controllers.

Opmerking

Per actie: Als u een CORS-beleid voor een specifieke actie wilt opgeven, voegt u het kenmerk [EnableCors] toe aan de actie. Geef de beleidsnaam op.

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

Opmerking

Per controller:

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

Opmerking

Wereldwijd:

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

Houd er rekening mee dat het essentieel is om ervoor te zorgen dat de lijst met oorsprongen in het kenmerk EnableCors is ingesteld op een eindige en vertrouwde set origins. Als u dit niet op ongepaste wijze configureert (bijvoorbeeld door de waarde in te stellen als '*'), kunnen kwaadwillende sites aanvragen voor meerdere oorsprongen zonder beperkingen activeren voor de API, >waardoor de API kwetsbaar wordt voor CSRF-aanvallen.

Opmerking

Als u CORS wilt uitschakelen voor een controller of actie, gebruikt u het kenmerk [DisableCors]..

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

Secties van de configuratiebestanden van de web-API versleutelen die gevoelige gegevens bevatten

Titel DETAILS
Onderdeel Web-API
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie Procedure: Configuratiesecties versleutelen in ASP.NET 2.0 met behulp van DPAPI, het opgeven van een beveiligde configuratieprovider, het gebruik van Azure Key Vault om toepassingsgeheimen te beveiligen
Stappen Configuratiebestanden zoals web.config, appsettings.json worden vaak gebruikt voor het opslaan van gevoelige informatie, waaronder gebruikersnamen, wachtwoorden, database-verbindingsreeks s en versleutelingssleutels. Als u deze gegevens niet beveiligt, is uw toepassing kwetsbaar voor aanvallers of kwaadwillende gebruikers die gevoelige informatie verkrijgen, zoals gebruikersnamen en wachtwoorden van accounts, databasenamen en servernamen. Versleutel de gevoelige secties van configuratiebestanden op basis van het implementatietype (azure/on-premises) met behulp van DPAPI of services zoals Azure Key Vault.

Zorg ervoor dat alle beheerinterfaces zijn beveiligd met sterke referenties

Titel DETAILS
Onderdeel IoT-apparaat
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Alle beheerinterfaces die het apparaat of de veldgateway beschikbaar maakt, moeten worden beveiligd met sterke referenties. Bovendien moeten alle andere blootgestelde interfaces, zoals WiFi, SSH, Bestandsshares, FTP worden beveiligd met sterke referenties. Standaard zwakke wachtwoorden mogen niet worden gebruikt.

Zorg ervoor dat onbekende code niet kan worden uitgevoerd op apparaten

Titel DETAILS
Onderdeel IoT-apparaat
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie Beveiligd opstarten en BitLocker-apparaatversleuteling inschakelen in Windows 10 IoT Core
Stappen Met UEFI Secure Boot wordt het systeem beperkt tot het alleen uitvoeren van binaire bestanden die zijn ondertekend door een opgegeven instantie. Met deze functie voorkomt u dat onbekende code wordt uitgevoerd op het platform en mogelijk de beveiligingspostuur ervan verzwakt. Schakel UEFI Secure Boot in en beperk de lijst met certificeringsinstanties die worden vertrouwd voor ondertekeningscode. Onderteken alle code die op het apparaat is geïmplementeerd met behulp van een van de vertrouwde autoriteiten.

Besturingssysteem en andere partities van IoT-apparaat versleutelen met BitLocker

Titel DETAILS
Onderdeel IoT-apparaat
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Windows 10 IoT Core implementeert een lichtgewicht versie van BitLocker-apparaatversleuteling, die sterk afhankelijk is van de aanwezigheid van een TPM op het platform, met inbegrip van het benodigde preOS-protocol in UEFI die de benodigde metingen uitvoert. Deze preOS-metingen zorgen ervoor dat het besturingssysteem later een definitieve record heeft over hoe het besturingssysteem is gestart. Besturingssysteempartities versleutelen met BitLocker en eventuele andere partities, ook voor het geval ze gevoelige gegevens opslaan.

Zorg ervoor dat alleen de minimale services/functies zijn ingeschakeld op apparaten

Titel DETAILS
Onderdeel IoT-apparaat
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Schakel functies of services in het besturingssysteem die niet vereist zijn voor het functioneren van de oplossing niet in of uit. Als voor het apparaat bijvoorbeeld geen gebruikersinterface is vereist, installeert u Windows IoT Core in de headless-modus.

Besturingssysteem en andere partities van IoT Field Gateway versleutelen met BitLocker

Titel DETAILS
Onderdeel IoT-veldgateway
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Windows 10 IoT Core implementeert een lichtgewicht versie van BitLocker-apparaatversleuteling, die sterk afhankelijk is van de aanwezigheid van een TPM op het platform, met inbegrip van het benodigde preOS-protocol in UEFI die de benodigde metingen uitvoert. Deze preOS-metingen zorgen ervoor dat het besturingssysteem later een definitieve record heeft over hoe het besturingssysteem is gestart. Besturingssysteempartities versleutelen met BitLocker en eventuele andere partities, ook voor het geval ze gevoelige gegevens opslaan.

Zorg ervoor dat de standaardaanmeldingsreferenties van de veldgateway tijdens de installatie worden gewijzigd

Titel DETAILS
Onderdeel IoT-veldgateway
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Zorg ervoor dat de standaardaanmeldingsreferenties van de veldgateway tijdens de installatie worden gewijzigd

Zorg ervoor dat de Cloud Gateway een proces implementeert om de firmware van verbonden apparaten up-to-date te houden

Titel DETAILS
Onderdeel IoT Cloud Gateway
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken Gatewaykeuze - Azure IoT Hub
Naslaginformatie IoT Hub Apparaatbeheer Overview, Device Update for Azure IoT Hub tutorial using the Raspberry Pi 3 B+ Reference Image.
Stappen LWM2M is een protocol van de Open Mobile Alliance for IoT Apparaatbeheer. Met Azure IoT-apparaatbeheer kunt u communiceren met fysieke apparaten met behulp van apparaattaken. Zorg ervoor dat de Cloud Gateway een proces implementeert om het apparaat en andere configuratiegegevens regelmatig up-to-date te houden met behulp van Azure IoT Hub Apparaatbeheer.

Zorg ervoor dat apparaten eindpuntbeveiligingsbesturingselementen hebben die zijn geconfigureerd volgens het organisatiebeleid

Titel DETAILS
Onderdeel Grens van machinevertrouwen
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie N.v.t.
Stappen Zorg ervoor dat apparaten eindpuntbeveiligingsmechanismen hebben, zoals BitLocker voor versleuteling op schijfniveau, antivirusprogramma's met bijgewerkte handtekeningen, firewall op basis van een host, upgrades van het besturingssysteem, groepsbeleid, enzovoort, zijn geconfigureerd volgens het beveiligingsbeleid van de organisatie.

Veilig beheer van Toegangssleutels voor Azure Storage garanderen

Titel DETAILS
Onderdeel Azure Storage
SDL-fase Implementatie
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie Beveiligingshandleiding voor Azure Storage - Uw opslagaccountsleutels beheren
Stappen

Sleutelopslag: het wordt aanbevolen om de Azure Storage-toegangssleutels in Azure Key Vault op te slaan als geheim en de toepassingen de sleutel uit de sleutelkluis laten ophalen. Dit wordt aanbevolen om de volgende redenen:

  • De toepassing heeft de opslagsleutel nooit vastgelegd in een configuratiebestand, waardoor iemand zonder specifieke machtigingen toegang krijgt tot de sleutels
  • Toegang tot de sleutels kan worden beheerd met behulp van Microsoft Entra-id. Dit betekent dat een accounteigenaar toegang kan verlenen tot de handvol toepassingen die de sleutels moeten ophalen uit Azure Key Vault. Andere toepassingen hebben geen toegang tot de sleutels zonder ze specifiek toestemming te geven
  • Sleutelherstel: het wordt aanbevolen om een proces in te stellen om Azure Storage-toegangssleutels opnieuw te genereren om veiligheidsredenen. Meer informatie over waarom en hoe u een sleutelregeneratie plant, worden beschreven in het naslagartikel over de Azure Storage-beveiligingshandleiding

Zorg ervoor dat alleen vertrouwde origins zijn toegestaan als CORS is ingeschakeld in Azure Storage

Titel DETAILS
Onderdeel Azure Storage
SDL-fase Build
Toepasselijke technologieën Algemeen
Kenmerken N.v.t.
Naslaginformatie CORS-ondersteuning voor Azure Storage Services
Stappen Met Azure Storage kunt u CORS – Cross Origin Resource Sharing inschakelen. Voor elk opslagaccount kunt u domeinen opgeven die toegang hebben tot de resources in dat opslagaccount. CORS is standaard uitgeschakeld voor alle services. U kunt CORS inschakelen met behulp van de REST API of de opslagclientbibliotheek om een van de methoden aan te roepen om het servicebeleid in te stellen.

De servicebeperkingsfunctie van WCF inschakelen

Titel DETAILS
Onderdeel WCF
SDL-fase Build
Toepasselijke technologieën .NET Framework 3
Kenmerken N.v.t.
Naslaginformatie MSDN, Fortify Kingdom
Stappen

Het niet plaatsen van een limiet voor het gebruik van systeemresources kan leiden tot uitputting van resources en uiteindelijk een Denial of Service.

  • UITLEG: Windows Communication Foundation (WCF) biedt de mogelijkheid om serviceaanvragen te beperken. Het toestaan van te veel clientaanvragen kan een systeem overspoelen en de bijbehorende resources uitputten. Aan de andere kant kan het toestaan van slechts een klein aantal aanvragen voor een service verhinderen dat legitieme gebruikers de service gebruiken. Elke service moet afzonderlijk worden afgestemd op en geconfigureerd om de juiste hoeveelheid resources toe te staan.
  • AANBEVELINGEN : schakel de servicebeperkingsfunctie van WCF in en stel limieten in die geschikt zijn voor uw toepassing.

Opmerking

Hier volgt een voorbeeldconfiguratie waarbij beperking is ingeschakeld:

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

Openbaarmaking van WCF-informatie via metagegevens

Titel DETAILS
Onderdeel WCF
SDL-fase Build
Toepasselijke technologieën .NET Framework 3
Kenmerken N.v.t.
Naslaginformatie MSDN, Fortify Kingdom
Stappen Met metagegevens kunnen aanvallers meer te weten komen over het systeem en een vorm van aanvallen plannen. WCF-services kunnen worden geconfigureerd om metagegevens beschikbaar te maken. Metagegevens geven gedetailleerde informatie over de servicebeschrijving en mogen niet worden uitgezonden in productieomgevingen. De HttpGetEnabled / HttpsGetEnabled eigenschappen van de ServiceMetaData-klasse bepalen of een service de metagegevens beschikbaar maakt

Opmerking

De onderstaande code geeft WCF opdracht om de metagegevens van een service uit te zenden

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

Verzend geen servicemetagegevens in een productieomgeving. Stel de eigenschappen HttpGetEnabled/HttpsGetEnabled van de ServiceMetaData-klasse in op false.

Opmerking

De onderstaande code geeft WCF opdracht om de metagegevens van een service niet uit te zenden.

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