Se till att binärfilerna är dolda om de innehåller känslig information
Title
Details
Komponent
Gränsen för datorförtroende
SDL-fas
Distribution
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Se till att binärfilerna är dolda om de innehåller känslig information, till exempel affärshemligheter, känslig affärslogik som inte bör ångras. Detta för att stoppa omvänd konstruktion av sammansättningar. Verktyg som CryptoObfuscator kan användas för detta ändamål.
Överväg att använda EFS (Encrypted File System) för att skydda konfidentiella användarspecifika data
Title
Details
Komponent
Gränsen för datorförtroende
SDL-fas
Skapa
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Överväg att använda EFS (Encrypted File System) för att skydda konfidentiella användarspecifika data från angripare med fysisk åtkomst till datorn.
Se till att känsliga data som lagras av programmet i filsystemet är krypterade
Title
Details
Komponent
Gränsen för datorförtroende
SDL-fas
Distribution
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Se till att känsliga data som lagras av programmet i filsystemet är krypterade (t.ex. med DPAPI), om EFS inte kan tillämpas
Kontrollera att känsligt innehåll inte cachelagras i webbläsaren
Title
Details
Komponent
Webbprogram
SDL-fas
Skapa
Tillämpliga tekniker
Generic, Web Forms, MVC5, MVC6
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Webbläsare kan lagra information för cachelagring och historik. Dessa cachelagrade filer lagras i en mapp, till exempel mappen Temporära Internet-filer när det gäller Internet Explorer. När dessa sidor refereras igen visar webbläsaren dem från cacheminnet. Om känslig information visas för användaren (till exempel deras adress, kreditkortsinformation, personnummer eller användarnamn) kan den här informationen lagras i webbläsarens cacheminne och kan därför hämtas genom att granska webbläsarens cacheminne eller genom att helt enkelt trycka på webbläsarens "Tillbaka"-knapp. Ange värdet för svarshuvud för cachekontroll till "no-store" för alla sidor.
Detta kan implementeras via ett filter. Följande exempel kan användas:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext == null || (filterContext.HttpContext != null && filterContext.HttpContext.Response != null && filterContext.HttpContext.Response.IsRequestBeingRedirected))
{
//// Since this is MVC pipeline, this should never be null.
return;
}
var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(System.Web.Mvc.OutputCacheAttribute), false);
if (attributes == null || **Attributes**.Count() == 0)
{
filterContext.HttpContext.Response.Cache.SetNoStore();
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
if (!filterContext.IsChildAction)
{
filterContext.HttpContext.Response.AppendHeader("Pragma", "no-cache");
}
}
base.OnActionExecuting(filterContext);
}
Kryptera delar av webbappens konfigurationsfiler som innehåller känsliga data
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.
Inaktivera uttryckligen HTML-attributet för automatisk komplettering i känsliga formulär och indata
Attributet komplettera automatiskt anger om ett formulär ska ha automatisk komplettering på eller av. När automatisk komplettering är aktiverat slutför webbläsaren automatiskt värden baserat på värden som användaren har angett tidigare. När ett nytt namn och lösenord till exempel anges i ett formulär och formuläret skickas, frågar webbläsaren om lösenordet ska sparas. Därefter när formuläret visas fylls namnet och lösenordet i automatiskt eller fylls i när namnet anges. En angripare med lokal åtkomst kan hämta lösenordet för klartext från webbläsarens cacheminne. Som standard är automatisk komplettering aktiverat och måste uttryckligen inaktiveras.
Kontrollera att känsliga data som visas på användarskärmen är maskerade
Title
Details
Komponent
Webbprogram
SDL-fas
Skapa
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Känsliga data som lösenord, kreditkortsnummer, SSN osv. ska maskeras när de visas på skärmen. Detta för att förhindra obehörig personal från att komma åt data (t.ex. lösenord för axelsurfning, stöd för personal som visar SSN-antal användare) . Se till att dessa dataelement inte visas i oformaterad text och att de är korrekt maskerade. Detta måste vara noga när du accepterar dem som indata (t.ex. indatatyp ="lösenord") samt visas tillbaka på skärmen (t.ex. visa endast de sista 4 siffrorna i kreditkortsnumret).
Implementera dynamisk datamaskning för att begränsa icke-privilegierade användare med känslig dataexponering
Syftet med dynamisk datamaskering är att begränsa exponeringen av känsliga data, vilket hindrar användare som inte ska ha åtkomst till data från att visa dem. Dynamisk datamaskering syftar inte till att förhindra att databasanvändare ansluter direkt till databasen och kör uttömmande frågor som exponerar delar av känsliga data. Dynamisk datamaskering kompletterar andra SQL Server-säkerhetsfunktioner (granskning, kryptering, säkerhet på radnivå...) och vi rekommenderar starkt att du använder den här funktionen tillsammans med dem för att bättre skydda känsliga data i databasen. Observera att den här funktionen endast stöds av SQL Server från och med 2016 och Azure SQL Database.
Kontrollera att lösenord lagras i saltat hash-format
Lösenord ska inte lagras i anpassade användarlagringsdatabaser. Lösenordshashvärden ska lagras med saltvärden i stället. Kontrollera att saltet för användaren alltid är unikt och att du använder b-crypt, s-crypt eller PBKDF2 innan du lagrar lösenordet, med ett minsta antal iteration av arbetsfaktorn på 150 000 loopar för att eliminera risken för rå forcering.
Kontrollera att känsliga data i databaskolumner är krypterade
Känsliga data, till exempel kreditkortsnummer, måste krypteras i databasen. Data kan krypteras med kryptering på kolumnnivå eller av en programfunktion med hjälp av krypteringsfunktionerna.
Kontrollera att kryptering på databasnivå (TDE) är aktiverat
funktionen transparent datakryptering (TDE) i SQL Server hjälper till att kryptera känsliga data i en databas och skydda de nycklar som används för att kryptera data med ett certifikat. Detta hindrar alla utan nycklar från att använda data. TDE skyddar data "i vila", vilket innebär data och loggfiler. Det ger möjlighet att följa många lagar, förordningar och riktlinjer som fastställts i olika branscher.
Kontrollera att databassäkerhetskopior är krypterade
SQL Server har möjlighet att kryptera data när du skapar en säkerhetskopia. Genom att ange krypteringsalgoritmen och krypteringsfaktorn (ett certifikat eller en asymmetrisk nyckel) när du skapar en säkerhetskopia kan man skapa en krypterad säkerhetskopia.
Se till att känsliga data som är relevanta för webb-API:et inte lagras i webbläsarens lagring
Title
Details
Komponent
Webb-API
SDL-fas
Skapa
Tillämpliga tekniker
MVC 5, MVC 6
Attribut
Identitetsprovider – ADFS, identitetsprovider – Microsoft Entra-ID
Referenser
Inte tillgängligt
Steg
I vissa implementeringar lagras känsliga artefakter som är relevanta för webb-API:ets autentisering i webbläsarens lokala lagring. Till exempel Microsoft Entra-autentiseringsartefakter som adal.idtoken, adal.nonce.idtoken, adal.access.token.key, adal.token.keys, adal.state.login, adal.session.state, adal.expiration.key osv.
Alla dessa artefakter är tillgängliga även när utloggning eller webbläsaren har stängts. Om en angripare får åtkomst till dessa artefakter kan han/hon återanvända dem för att komma åt de skyddade resurserna (API:er). Se till att alla känsliga artefakter som är relaterade till webb-API:et inte lagras i webbläsarens lagring. I de fall där lagring på klientsidan är oundvikligt (t.ex. ensidesprogram (SPA) som utnyttjar Implicita OpenId Anslut/OAuth-flöden måste lagra åtkomsttoken lokalt), använder du lagringsalternativ med har inte beständighet. T.ex. föredrar du SessionStorage till LocalStorage.
Exempel
JavaScript-kodfragmentet nedan kommer från ett anpassat autentiseringsbibliotek som lagrar autentiseringsartefakter i lokal lagring. Sådana implementeringar bör undvikas.
ns.AuthHelper.Authenticate = function () {
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: ns.Configurations.Tenant,
clientId: ns.Configurations.AADApplicationClientID,
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage', // enable this for Internet Explorer, as sessionStorage does not work for localhost.
};
Kryptera känsliga data som lagras i Azure Cosmos DB
Title
Details
Komponent
Azure Document DB
SDL-fas
Skapa
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Kryptera känsliga data på programnivå innan du lagrar i dokumentdatabasen eller lagra känsliga data i andra lagringslösningar som Azure Storage eller Azure SQL
Använda Azure Disk Encryption för att kryptera diskar som används av virtuella datorer
Azure Disk Encryption är en ny funktion som för närvarande är i förhandsversion. Med den här funktionen kan du kryptera os-diskar och datadiskar som används av en virtuell IaaS-dator. För Windows krypteras enheterna med hjälp av bitLocker-krypteringsteknik av branschstandard. För Linux krypteras diskarna med DM-Crypt-tekniken. Detta är integrerat med Azure Key Vault så att du kan styra och hantera diskkrypteringsnycklarna. Azure Disk Encryption-lösningen stöder följande tre scenarier för kundkryptering:
Aktivera kryptering på nya virtuella IaaS-datorer som skapats från kundkrypterade VHD-filer och krypteringsnycklar som tillhandahålls av kunden, som lagras i Azure Key Vault.
Aktivera kryptering på nya virtuella IaaS-datorer som skapats från Azure Marketplace.
Aktivera kryptering på befintliga virtuella IaaS-datorer som redan körs i Azure.
Hemligheter kan vara känslig information, till exempel lagring anslutningssträng, lösenord eller andra värden som inte ska hanteras i oformaterad text. Använd Azure Key Vault för att hantera nycklar och hemligheter i Service Fabric-program.
Utföra säkerhetsmodellering och använda affärsenheter/team där det behövs
Title
Details
Komponent
Dynamics CRM
SDL-fas
Skapa
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Utföra säkerhetsmodellering och använda affärsenheter/team där det behövs
Minimera åtkomsten till delningsfunktionen på kritiska entiteter
Title
Details
Komponent
Dynamics CRM
SDL-fas
Distribution
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Minimera åtkomsten till delningsfunktionen på kritiska entiteter
Utbilda användare om de risker som är kopplade till Dynamics CRM Share-funktionen och goda säkerhetsrutiner
Title
Details
Komponent
Dynamics CRM
SDL-fas
Distribution
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Utbilda användare om de risker som är kopplade till Dynamics CRM Share-funktionen och goda säkerhetsrutiner
Inkludera en regel för utvecklingsstandarder som beskriver konfigurationsinformation i undantagshantering
Title
Details
Komponent
Dynamics CRM
SDL-fas
Distribution
Tillämpliga tekniker
Allmän
Attribut
Inte tillgängligt
Referenser
Inte tillgängligt
Steg
Inkludera en regel för utvecklingsstandarder som beskriver konfigurationsinformation i undantagshantering utanför utveckling. Testa detta som en del av kodgranskningar eller regelbunden inspektion.
Använda Azure Storage Service Encryption (SSE) för vilande data (förhandsversion)
Azure Storage Service Encryption (SSE) for Data at Rest hjälper dig att skydda dina data för att uppfylla organisationens säkerhets- och efterlevnadsåtaganden. Med den här funktionen krypterar Azure Storage automatiskt dina data för beständig lagring och dekrypterar dem före hämtning. Kryptering, dekryptering och nyckelhantering är helt transparent för användarna. SSE gäller endast för blockblobar, sidblobar och tilläggsblobar. De andra typerna av data, inklusive tabeller, köer och filer, krypteras inte.
Arbetsflöde för kryptering och dekryptering:
Kunden aktiverar kryptering på lagringskontot
När kunden skriver nya data (PUT Blob, PUT Block, PUT Page osv.) till Blob Storage; varje skrivning krypteras med 256-bitars AES-kryptering, en av de starkaste blockkrypteringarna som är tillgängliga
När kunden behöver komma åt data (GET Blob osv.) dekrypteras data automatiskt innan de återgår till användaren
Om krypteringen är inaktiverad krypteras inte längre nya skrivningar och befintliga krypterade data förblir krypterade tills de skrivs om av användaren. Medan kryptering är aktiverat krypteras skrivningar till Blob Storage. Datatillståndet ändras inte när användaren växlar mellan aktivering och inaktivering av kryptering för lagringskontot
Alla krypteringsnycklar lagras, krypteras och hanteras av Microsoft
Observera att för närvarande hanteras nycklarna som används för krypteringen av Microsoft. Microsoft genererar nycklarna ursprungligen och hanterar den säkra lagringen av nycklarna samt den vanliga rotation som definieras av den interna Microsoft-principen. I framtiden får kunderna möjlighet att hantera sina egna krypteringsnycklar och tillhandahålla en migreringssökväg från Microsoft-hanterade nycklar till kundhanterade nycklar.
Använda kryptering på klientsidan för att lagra känsliga data i Azure Storage
Azure Storage-klientbiblioteket för .NET Nuget-paketet stöder kryptering av data i klientprogram innan de laddas upp till Azure Storage och dekrypterar data vid nedladdning till klienten. Biblioteket stöder även integrering med Azure Key Vault för hantering av nycklar för lagringskonton. Här är en kort beskrivning av hur kryptering på klientsidan fungerar:
Azure Storage-klientens SDK genererar en innehållskrypteringsnyckel (CEK), som är en symmetrisk nyckel för engångsanvändning
Kunddata krypteras med hjälp av denna CEK
CEK omsluts sedan (krypteras) med nyckelkrypteringsnyckeln (KEK). KEK identifieras av en nyckelidentifierare och kan vara ett asymmetriskt nyckelpar eller en symmetrisk nyckel och kan hanteras lokalt eller lagras i Azure Key Vault. Själva lagringsklienten har aldrig åtkomst till KEK. Den anropar bara nyckelomslutningsalgoritmen som tillhandahålls av Key Vault. Kunder kan välja att använda anpassade leverantörer för nyckelomslutning/avskrivning om de vill
Krypterade data laddas sedan upp till Azure Storage-tjänsten. Kontrollera länkarna i referensavsnittet för information om lågnivåimplementering.
Kryptera känsliga data eller PII-data som skrivits till telefoners lokala lagring
Om programmet skriver känslig information som användarens PII (e-post, telefonnummer, förnamn, efternamn, inställningar osv.) – i mobilens filsystem ska den krypteras innan den skrivs till det lokala filsystemet. Om programmet är ett företagsprogram kan du utforska möjligheten att publicera program med Hjälp av Windows Intune.
Exempel
Intune kan konfigureras med följande säkerhetsprinciper för att skydda känsliga data:
Require encryption on mobile device
Require encryption on storage cards
Allow screen capture
Exempel
Om programmet inte är ett företagsprogram använder du plattformshanterade nyckelarkiv, nyckelringar för att lagra krypteringsnycklar, med vilken kryptografisk åtgärd som kan utföras på filsystemet. Följande kodfragment visar hur du kommer åt nyckeln från nyckelringen med xamarin:
protected static string EncryptionKey
{
get
{
if (String.IsNullOrEmpty(_Key))
{
var query = new SecRecord(SecKind.GenericPassword);
query.Service = NSBundle.MainBundle.BundleIdentifier;
query.Account = "UniqueID";
NSData uniqueId = SecKeyChain.QueryAsData(query);
if (uniqueId == null)
{
query.ValueData = NSData.FromString(System.Guid.NewGuid().ToString());
var err = SecKeyChain.Add(query);
_Key = query.ValueData.ToString();
}
else
{
_Key = uniqueId.ToString();
}
}
return _Key;
}
}
Fördunkla genererade binärfiler innan du distribuerar till slutanvändare
Genererade binärfiler (sammansättningar inom apk) bör döljas för att stoppa omvänd utveckling av sammansättningar. Verktyg som CryptoObfuscator kan användas för detta ändamål.
Ange clientCredentialType till Certifikat eller Windows
Om du använder usernameToken med ett lösenord i klartext över en okrypterad kanal exponeras lösenordet för angripare som kan sniffa SOAP-meddelanden. Tjänstleverantörer som använder UsernameToken kan acceptera lösenord som skickas i klartext. Om du skickar lösenord i klartext över en okrypterad kanal kan autentiseringsuppgifterna exponeras för angripare som kan sniffa soap-meddelandet.
Exempel
Följande konfiguration av WCF-tjänstprovidern använder UsernameToken:
Ingen transport- eller meddelandesäkerhet har definierats. Program som skickar meddelanden utan transport- eller meddelandesäkerhet kan inte garantera meddelandenas integritet eller konfidentialitet. När en WCF-säkerhetsbindning har angetts till Ingen inaktiveras både transport- och meddelandesäkerhet.
Exempel
Följande konfiguration anger säkerhetsläget till Ingen.
Säkerhetsläge För alla tjänstbindningar finns det fem möjliga säkerhetslägen:
Inga. Stänger av säkerheten.
Transport. Använder transportsäkerhet för ömsesidig autentisering och meddelandeskydd.
Meddelande. Använder meddelandesäkerhet för ömsesidig autentisering och meddelandeskydd.
Båda. Gör att du kan ange inställningar för säkerhet på transport- och meddelandenivå (endast MSMQ stöder detta).
TransportWithMessageCredential. Autentiseringsuppgifter skickas med meddelande- och meddelandeskydd och serverautentisering tillhandahålls av transportlagret.
TransportCredentialOnly. Klientautentiseringsuppgifter skickas med transportlagret och inget meddelandeskydd tillämpas. Använd transport- och meddelandesäkerhet för att skydda meddelandenas integritet och konfidentialitet. Konfigurationen nedan instruerar tjänsten att använda transportsäkerhet med autentiseringsuppgifter för meddelanden.