Zorg ervoor dat binaire bestanden verborgen zijn als ze gevoelige informatie bevatten
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 binaire bestanden worden verborgen als ze gevoelige informatie bevatten, zoals handelsgeheimen, gevoelige bedrijfslogica die niet moet worden omgekeerd. Dit is om reverse engineering van assembly's te stoppen. Hulpprogramma's zoals CryptoObfuscator deze kunnen voor dit doel worden gebruikt.
Overweeg om EFS (Encrypted File System) te gebruiken om vertrouwelijke gebruikersspecifieke gegevens te beveiligen
Titel
DETAILS
Onderdeel
Grens van machinevertrouwen
SDL-fase
Build
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Overweeg het gebruik van Encrypted File System (EFS) om vertrouwelijke gebruikersspecifieke gegevens te beschermen tegen kwaadwillende personen met fysieke toegang tot de computer.
Zorg ervoor dat gevoelige gegevens die door de toepassing op het bestandssysteem zijn opgeslagen, zijn versleuteld
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 gevoelige gegevens die zijn opgeslagen door de toepassing in het bestandssysteem zijn versleuteld (bijvoorbeeld met DPAPI), als EFS niet kan worden afgedwongen
Zorg ervoor dat gevoelige inhoud niet in de cache wordt opgeslagen in de browser
Titel
DETAILS
Onderdeel
Webtoepassing
SDL-fase
Build
Toepasselijke technologieën
Algemeen, Webformulieren, MVC5, MVC6
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Browsers kunnen informatie opslaan voor caching en geschiedenis. Deze bestanden in de cache worden opgeslagen in een map, zoals de map Tijdelijke internetbestanden in het geval van Internet Explorer. Wanneer deze pagina's opnieuw worden verwezen, worden deze in de browser weergegeven vanuit de cache. Als gevoelige informatie wordt weergegeven aan de gebruiker (zoals het adres, creditcardgegevens, burgerservicenummer of gebruikersnaam), kan deze informatie worden opgeslagen in de cache van de browser en kan deze daarom worden opgehaald door de cache van de browser te bekijken of door simpelweg op de knop Terug van de browser te drukken. Stel de headerwaarde voor antwoordheader voor cachebeheer in op 'no-store' voor alle pagina's.
Dit kan worden geïmplementeerd via een filter. Het volgende voorbeeld kan worden gebruikt:
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);
}
Secties van de configuratiebestanden van web-apps versleutelen die gevoelige gegevens bevatten
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.
Het HTML-kenmerk voor automatisch aanvullen expliciet uitschakelen in gevoelige formulieren en invoer
Het kenmerk voor automatisch aanvullen geeft aan of een formulier automatisch moet worden aangevuld of uitgeschakeld. Wanneer automatisch aanvullen is ingeschakeld, worden in de browser automatisch waarden voltooid op basis van waarden die de gebruiker eerder heeft ingevoerd. Wanneer bijvoorbeeld een nieuwe naam en wachtwoord in een formulier worden ingevoerd en het formulier wordt verzonden, wordt in de browser gevraagd of het wachtwoord moet worden opgeslagen. Wanneer het formulier wordt weergegeven, worden de naam en het wachtwoord automatisch ingevuld of ingevuld wanneer de naam wordt ingevoerd. Een aanvaller met lokale toegang kan het wachtwoord voor duidelijke tekst verkrijgen uit de browsercache. Automatisch aanvullen is standaard ingeschakeld en moet expliciet worden uitgeschakeld.
Zorg ervoor dat gevoelige gegevens die op het scherm van de gebruiker worden weergegeven, zijn gemaskeerd
Titel
DETAILS
Onderdeel
Webtoepassing
SDL-fase
Build
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Gevoelige gegevens, zoals wachtwoorden, creditcardnummers, SSN, enzovoort, moeten worden gemaskeerd wanneer ze op het scherm worden weergegeven. Dit is om te voorkomen dat onbevoegd personeel toegang heeft tot de gegevens (bijvoorbeeld wachtwoorden voor schouder surfen, ondersteuningspersoneel dat SSN-nummers van gebruikers bekijkt) . Zorg ervoor dat deze gegevenselementen niet zichtbaar zijn in tekst zonder opmaak en op de juiste wijze worden gemaskeerd. Dit moet worden geregeld bij het accepteren als invoer (bijvoorbeeld invoertype="password") en het weergeven op het scherm (bijvoorbeeld alleen de laatste 4 cijfers van het creditcardnummer).
Dynamische gegevensmaskering implementeren om de blootstelling van gevoelige gegevens aan niet-bevoegde gebruikers te beperken
Het doel van dynamische gegevensmaskering is om de blootstelling van gevoelige gegevens te beperken, waardoor gebruikers die geen toegang tot de gegevens mogen hebben, deze niet mogen bekijken. Dynamische gegevensmaskering is niet bedoeld om te voorkomen dat databasegebruikers rechtstreeks verbinding maken met de database en uitgebreide query's uitvoeren die delen van de gevoelige gegevens beschikbaar maken. Dynamische gegevensmaskering is een aanvulling op andere SQL Server-beveiligingsfuncties (controle, versleuteling, beveiliging op rijniveau...) en het wordt ten zeerste aanbevolen deze functie te gebruiken in combinatie met deze functies om de gevoelige gegevens in de database beter te beveiligen. Houd er rekening mee dat deze functie alleen wordt ondersteund door SQL Server vanaf 2016 en Azure SQL Database.
Zorg ervoor dat wachtwoorden zijn opgeslagen in gezouten hash-indeling
Wachtwoorden mogen niet worden opgeslagen in aangepaste gebruikersopslagdatabases. Wachtwoordhashes moeten worden opgeslagen met zoutwaarden. Zorg ervoor dat het zout voor de gebruiker altijd uniek is en u b-crypt, s-crypt of PBKDF2 toepast voordat u het wachtwoord opslaat, met een minimumaantal werkfactor iteraties van 150.000 lussen om de mogelijkheid van brute forcering te elimineren.
Zorg ervoor dat gevoelige gegevens in databasekolommen zijn versleuteld
Gevoelige gegevens, zoals creditcardnummers, moeten worden versleuteld in de database. Gegevens kunnen worden versleuteld met versleuteling op kolomniveau of door een toepassingsfunctie met behulp van de versleutelingsfuncties.
Zorg ervoor dat versleuteling op databaseniveau (TDE) is ingeschakeld
De functie Transparent Data Encryption (TDE) in SQL Server helpt bij het versleutelen van gevoelige gegevens in een database en het beveiligen van de sleutels die worden gebruikt voor het versleutelen van de gegevens met een certificaat. Dit voorkomt dat iemand zonder de sleutels de gegevens gebruikt. TDE beschermt gegevens 'at rest', wat betekent dat de gegevens en logboekbestanden. Het biedt de mogelijkheid om te voldoen aan veel wetten, voorschriften en richtlijnen die in verschillende branches zijn vastgesteld.
SQL Server heeft de mogelijkheid om de gegevens te versleutelen tijdens het maken van een back-up. Door het versleutelingsalgoritmen en de versleuteler (een certificaat of asymmetrische sleutel) op te geven bij het maken van een back-up, kunt u een versleuteld back-upbestand maken.
Zorg ervoor dat gevoelige gegevens die relevant zijn voor web-API niet zijn opgeslagen in de opslag van de browser
Titel
DETAILS
Onderdeel
Web-API
SDL-fase
Build
Toepasselijke technologieën
MVC 5, MVC 6
Kenmerken
Id-provider - ADFS, id-provider - Microsoft Entra-id
Naslaginformatie
N.v.t.
Stappen
In bepaalde implementaties worden gevoelige artefacten die relevant zijn voor de verificatie van de web-API opgeslagen in de lokale opslag van de browser. Bijvoorbeeld: Microsoft Entra-verificatieartefacten zoals adal.idtoken, adal.nonce.idtoken, adal.access.token.key, adal.token.keys, adal.state.login, adal.session.state, adal.expiration.key enzovoort.
Al deze artefacten zijn beschikbaar, zelfs nadat afmelden of browser is gesloten. Als een aanvaller toegang krijgt tot deze artefacten, kan hij/zij deze opnieuw gebruiken om toegang te krijgen tot de beveiligde resources (API's). Zorg ervoor dat alle gevoelige artefacten met betrekking tot web-API niet zijn opgeslagen in de opslag van de browser. In gevallen waarin opslag aan de clientzijde onvermijdelijk is (bijvoorbeeld SPA (Single Page Applications) die gebruikmaken van impliciete OpenIdConnect-/OAuth-stromen, moeten toegangstokens lokaal worden opgeslagen), kunt u opslagopties gebruiken met geen persistentie. Bijvoorbeeld, liever SessionStorage naar LocalStorage.
Opmerking
Het onderstaande JavaScript-fragment is afkomstig uit een aangepaste verificatiebibliotheek waarin verificatieartefacten in lokale opslag worden opgeslagen. Dergelijke implementaties moeten worden vermeden.
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.
};
Gevoelige gegevens versleutelen die zijn opgeslagen in Azure Cosmos DB
Titel
DETAILS
Onderdeel
Azure Document DB
SDL-fase
Build
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Gevoelige gegevens versleutelen op toepassingsniveau voordat u gegevens opslaat in document DB of gevoelige gegevens opslaat in andere opslagoplossingen, zoals Azure Storage of Azure SQL
Azure Disk Encryption gebruiken om schijven te versleutelen die worden gebruikt door virtuele machines
Azure Disk Encryption is een nieuwe functie die momenteel in preview is. Met deze functie kunt u de besturingssysteemschijven en gegevensschijven die worden gebruikt door een virtuele IaaS-machine versleutelen. Voor Windows worden de stations versleuteld met behulp van de standaard BitLocker-versleutelingstechnologie. Voor Linux worden de schijven versleuteld met behulp van de DM-Crypt-technologie. Dit is geïntegreerd met Azure Key Vault, zodat u de schijfversleutelingssleutels kunt beheren en beheren. De Azure Disk Encryption-oplossing ondersteunt de volgende drie scenario's voor klantversleuteling:
Schakel versleuteling in op nieuwe IaaS-VM's die zijn gemaakt op basis van door de klant versleutelde VHD-bestanden en door de klant geleverde versleutelingssleutels, die zijn opgeslagen in Azure Key Vault.
Schakel versleuteling in op nieuwe IaaS-VM's die zijn gemaakt op basis van Azure Marketplace.
Schakel versleuteling in op bestaande IaaS-VM's die al worden uitgevoerd in Azure.
Geheimen versleutelen in Service Fabric-toepassingen
Geheimen kunnen gevoelige informatie zijn, zoals opslag verbindingsreeks s, wachtwoorden of andere waarden die niet mogen worden verwerkt in tekst zonder opmaak. Gebruik Azure Key Vault om sleutels en geheimen te beheren in Service Fabric-toepassingen.
Waar nodig beveiligingsmodellering uitvoeren en bedrijfseenheden/Teams gebruiken
Titel
DETAILS
Onderdeel
Dynamics CRM
SDL-fase
Build
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Waar nodig beveiligingsmodellering uitvoeren en bedrijfseenheden/Teams gebruiken
De toegang tot de functie voor delen op kritieke entiteiten minimaliseren
Titel
DETAILS
Onderdeel
Dynamics CRM
SDL-fase
Implementatie
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
De toegang tot de functie voor delen op kritieke entiteiten minimaliseren
Gebruikers trainen op de risico's die zijn gekoppeld aan de Dynamics CRM Share-functie en goede beveiligingsprocedures
Titel
DETAILS
Onderdeel
Dynamics CRM
SDL-fase
Implementatie
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Gebruikers trainen op de risico's die zijn gekoppeld aan de Dynamics CRM Share-functie en goede beveiligingsprocedures
Voeg een regel voor ontwikkelingsstandaarden toe met configuratiedetails in uitzonderingsbeheer
Titel
DETAILS
Onderdeel
Dynamics CRM
SDL-fase
Implementatie
Toepasselijke technologieën
Algemeen
Kenmerken
N.v.t.
Naslaginformatie
N.v.t.
Stappen
Neem een regel voor ontwikkelingsstandaarden op met configuratiedetails in uitzonderingsbeheer buiten ontwikkeling. Test hiervoor als onderdeel van codebeoordelingen of periodieke inspectie.
Azure Storage Service Encryption (SSE) gebruiken voor data-at-rest (preview)
Azure Storage Service Encryption (SSE) voor Data at Rest helpt u bij het beveiligen en beveiligen van uw gegevens om te voldoen aan de beveiligings- en nalevingsverplichtingen van uw organisatie. Met deze functie worden uw gegevens automatisch versleuteld door Azure Storage voordat deze worden opgeslagen en ontsleutelt voordat ze weer worden opgehaald. Het versleutelings-, ontsleutelings- en sleutelbeheer is volledig transparant voor gebruikers. SSE is alleen van toepassing op blok-blobs, pagina-blobs en toevoeg-blobs. De andere typen gegevens, waaronder tabellen, wachtrijen en bestanden, worden niet versleuteld.
Werkstroom voor versleuteling en ontsleuteling:
De klant schakelt versleuteling in voor het opslagaccount
Wanneer de klant nieuwe gegevens schrijft (PUT Blob, PUT-blok, PUT-pagina, enzovoort) naar Blob-opslag; elke schrijfbewerking wordt versleuteld met 256-bits AES-versleuteling, een van de sterkste blokcoderingen die beschikbaar zijn
Wanneer de klant toegang nodig heeft tot gegevens (GET Blob, enzovoort), worden gegevens automatisch ontsleuteld voordat ze terugkeren naar de gebruiker
Als versleuteling is uitgeschakeld, worden nieuwe schrijfbewerkingen niet meer versleuteld en blijven bestaande versleutelde gegevens versleuteld totdat ze door de gebruiker zijn herschreven. Terwijl versleuteling is ingeschakeld, worden schrijfbewerkingen naar Blob Storage versleuteld. De status van gegevens verandert niet met de gebruiker die schakelt tussen het in- of uitschakelen van versleuteling voor het opslagaccount
Alle versleutelingssleutels worden opgeslagen, versleuteld en beheerd door Microsoft
Houd er rekening mee dat op dit moment de sleutels die voor de versleuteling worden gebruikt, worden beheerd door Microsoft. Microsoft genereert de sleutels oorspronkelijk en beheert de veilige opslag van de sleutels, evenals de reguliere rotatie zoals gedefinieerd door intern Microsoft-beleid. In de toekomst krijgen klanten de mogelijkheid om hun eigen versleutelingssleutels te beheren en bieden ze een migratiepad van door Microsoft beheerde sleutels naar door de klant beheerde sleutels.
Versleuteling aan de clientzijde gebruiken om gevoelige gegevens op te slaan in Azure Storage
Het Azure Storage-clientbibliotheek voor .NET Nuget-pakket ondersteunt het versleutelen van gegevens in clienttoepassingen voordat u uploadt naar Azure Storage en het ontsleutelen van gegevens tijdens het downloaden naar de client. De bibliotheek ondersteunt ook integratie met Azure Key Vault voor het beheer van sleutels voor opslagaccounts. Hier volgt een korte beschrijving van hoe versleuteling aan de clientzijde werkt:
De Azure Storage-client-SDK genereert een inhoudsversleutelingssleutel (CEK), een eenmalige symmetrische sleutel
Klantgegevens worden versleuteld met behulp van deze CEK
De CEK wordt vervolgens verpakt (versleuteld) met behulp van de versleutelingssleutel voor sleutel (KEK). De KEK wordt geïdentificeerd aan de hand van een sleutel-id en kan een asymmetrisch sleutelpaar of een symmetrische sleutel zijn en kan lokaal worden beheerd of opgeslagen in Azure Key Vault. De Storage-client zelf heeft nooit toegang tot de KEK. Deze roept alleen het algoritme voor sleutelverpakking op die wordt geleverd door Key Vault. Klanten kunnen ervoor kiezen om aangepaste providers te gebruiken voor sleutelterugloop/uitpakken als ze dat willen
De versleutelde gegevens worden vervolgens geüpload naar de Azure Storage-service. Raadpleeg de koppelingen in de sectie Met verwijzingen voor implementatiedetails op laag niveau.
Gevoelige of PII-gegevens versleutelen die naar lokale telefoons worden geschreven
Als de toepassing gevoelige informatie schrijft, zoals piI van de gebruiker (e-mail, telefoonnummer, voornaam, achternaam, voorkeuren, enzovoort)- op het bestandssysteem van mobiele apparaten moet het worden versleuteld voordat u naar het lokale bestandssysteem schrijft. Als de toepassing een bedrijfstoepassing is, verkent u de mogelijkheid om een toepassing te publiceren met Behulp van Windows Intune.
Opmerking
Intune kan worden geconfigureerd met het volgende beveiligingsbeleid om gevoelige gegevens te beveiligen:
Require encryption on mobile device
Require encryption on storage cards
Allow screen capture
Opmerking
Als de toepassing geen bedrijfstoepassing is, gebruikt u de door het platform geleverde sleutelarchief, sleutelhangers om versleutelingssleutels op te slaan, waarmee cryptografische bewerking kan worden uitgevoerd op het bestandssysteem. In het volgende codefragment ziet u hoe u toegang hebt tot de sleutel van de sleutelhanger met behulp van 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;
}
}
Gegenereerde binaire bestanden verdoezelen voordat ze worden gedistribueerd naar eindgebruikers
Gegenereerde binaire bestanden (assembly's binnen apk) moeten worden verborgen om reverse engineering van assembly's te stoppen. Hulpprogramma's zoals CryptoObfuscator deze kunnen voor dit doel worden gebruikt.
ClientCredentialType instellen op Certificaat of Windows
Als u een UsernameToken met een wachtwoord zonder opmaak gebruikt via een niet-versleuteld kanaal, wordt het wachtwoord zichtbaar voor aanvallers die de SOAP-berichten kunnen snuiven. Serviceproviders die de UsernameToken gebruiken, kunnen wachtwoorden accepteren die in tekst zonder opmaak worden verzonden. Het verzenden van niet-versleutelde wachtwoorden via een niet-versleuteld kanaal kan de referenties blootstellen aan aanvallers die het SOAP-bericht kunnen snuiven.
Opmerking
De volgende configuratie van de WCF-serviceprovider maakt gebruik van het UsernameToken:
Er is geen transport- of berichtbeveiliging gedefinieerd. Toepassingen die berichten verzenden zonder transport- of berichtbeveiliging kunnen de integriteit of vertrouwelijkheid van de berichten niet garanderen. Wanneer een WCF-beveiligingsbinding is ingesteld op Geen, worden zowel transport- als berichtbeveiliging uitgeschakeld.
Opmerking
Met de volgende configuratie wordt de beveiligingsmodus ingesteld op Geen.
Beveiligingsmodus voor alle servicebindingen zijn er vijf mogelijke beveiligingsmodi:
Geen. Hiermee schakelt u beveiliging uit.
Vervoer. Maakt gebruik van transportbeveiliging voor wederzijdse verificatie en berichtbeveiliging.
Message. Maakt gebruik van berichtbeveiliging voor wederzijdse verificatie en berichtbeveiliging.
Beide. Hiermee kunt u instellingen opgeven voor beveiliging op transport- en berichtniveau (alleen MSMQ ondersteunt dit).
TransportWithMessageCredential. Referenties worden doorgegeven met de bericht- en berichtbeveiliging en serververificatie worden geleverd door de transportlaag.
TransportCredentialOnly. Clientreferenties worden doorgegeven met de transportlaag en er wordt geen berichtbeveiliging toegepast. Gebruik transport- en berichtbeveiliging om de integriteit en vertrouwelijkheid van berichten te beschermen. De onderstaande configuratie geeft aan dat de service transportbeveiliging met berichtreferenties moet gebruiken.