Delen via


Aanbevolen beveiligingsprocedures voor C++

Dit artikel bevat informatie over beveiligingshulpprogramma's en -procedures. Als u ze gebruikt, worden toepassingen niet immuun voor aanvallen, maar het maakt succesvolle aanvallen minder waarschijnlijk.

Beveiligingsfuncties van Microsoft C++

Deze beveiligingsfuncties zijn ingebouwd in de Microsoft C++-compiler en linker:

/guard (Controlestroombeveiliging inschakelen)
Zorgt ervoor dat de compiler de controlestroom analyseert voor indirecte aanroepdoelen tijdens het compileren en vervolgens code invoegt om de doelen tijdens runtime te verifiëren.

/GS (Bufferbeveiligingscontrole)
Hiermee wordt de compiler geïnstrueerd om detectiecode voor overschrijdingen in te voegen in functies die risico lopen misbruik te maken. Wanneer er een overschrijding wordt gedetecteerd, wordt de uitvoering gestopt. Deze optie is standaard ingeschakeld.

/SAFESEH (Afbeelding heeft veilige exception handlers)
Instrueer de linker om een tabel op te nemen in de uitvoerafbeelding die het adres van elke uitzonderingshandler bevat. Tijdens runtime gebruikt het besturingssysteem deze tabel om ervoor te zorgen dat alleen legitieme uitzonderingshandlers worden uitgevoerd. Dit helpt voorkomen dat uitzonderingshandlers worden uitgevoerd die tijdens runtime worden geïntroduceerd door een schadelijke aanval. Deze optie is standaard uitgeschakeld.

/NXCOMPAT, /NXCOMPAT (compatibel met preventie van gegevensuitvoering)
Met deze compiler- en linkeropties kunt u DEP-compatibiliteit (Data Execution Prevention) inschakelen. DEP beveiligt de CPU tegen de uitvoering van niet-codepagina's.

/analyze (Codeanalyse)
Met deze compileroptie wordt codeanalyse geactiveerd die potentiële beveiligingsproblemen rapporteert, zoals bufferoverschrijding, niet-geïnitialiseerd geheugen, null-aanwijzerdeferencing en geheugenlekken. Deze optie is standaard uitgeschakeld. Zie Het overzicht van codeanalyse voor C/C++ voor meer informatie.

/DYNAMICBASE (Willekeurige indeling van adresruimte gebruiken)
Met deze linkeroptie kunt u een uitvoerbaar image aanmaken dat bij de start van de uitvoering op verschillende locaties in het geheugen kan worden geladen. Deze optie maakt de stacklocatie ook veel minder voorspelbaar in het geheugen.

Beveiligingsversterkte C Runtime

De C Runtime Library (CRT) is uitgebreid met beveiligde versies van functies die beveiligingsrisico's vormen, zoals de ongecontroleerde functie voor het kopiëren van tekenreeksen. Omdat de oudere, onbeveiligde versies van deze functies zijn afgeschaft, veroorzaken ze compileertijdwaarschuwingen. We raden u aan om de veilige versies van deze CRT-functies te gebruiken in plaats van de compilatiewaarschuwingen te onderdrukken. Zie Beveiligingsfuncties in de CRT voor meer informatie.

SafeInt-bibliotheek

SafeInt Library helpt bij het voorkomen van overloop van gehele getallen en andere misbruikbare fouten die kunnen optreden wanneer de toepassing wiskundige bewerkingen uitvoert. De SafeInt bibliotheek bevat de SafeInt-klasse, de SafeIntException-klasse en verschillende SafeInt-functies.

De SafeInt klasse beschermt tegen overloop van gehele getallen en aanvallen met delen door nul. U kunt deze gebruiken om vergelijkingen tussen waarden van verschillende typen af te handelen. Het biedt twee beleidsregels voor foutafhandeling. Het standaardbeleid is dat de SafeInt klasse een SafeIntException klasse-uitzondering genereert om te rapporteren waarom een wiskundige bewerking niet kan worden voltooid. Het tweede beleid is dat de klasse de SafeInt uitvoering van programma's stopt. U kunt ook een aangepast beleid definiëren.

Elke SafeInt functie beschermt één wiskundige bewerking tegen een misbruikbare fout. U kunt twee verschillende soorten parameters gebruiken zonder ze te converteren naar hetzelfde type. Gebruik de SafeInt klasse om meerdere wiskundige bewerkingen te beveiligen.

Gecontroleerde iterators

Een gecontroleerde iterator dwingt de grenzen van de container af. Wanneer een gecontroleerde iterator buiten de grenzen valt, wordt standaard een uitzondering gegenereerd en wordt de uitvoering van het programma beëindigd. Een gecontroleerde iterator biedt andere responsniveaus die afhankelijk zijn van waarden die aan preprocessor zijn toegewezen, zoals _SECURE_SCL_THROWS en _ITERATOR_DEBUG_LEVEL. Een _ITERATOR_DEBUG_LEVEL=2gecontroleerde iterator biedt bijvoorbeeld uitgebreide correctheidscontroles in de foutopsporingsmodus, die beschikbaar zijn door asserts te gebruiken. Zie Gecontroleerde iterators en _ITERATOR_DEBUG_LEVEL voor meer informatie.

Codeanalyse voor beheerde code

Codeanalyse voor beheerde code, ook wel bekend als FxCop, controleert assembly's op overeenstemming met the.NET Framework-ontwerprichtlijnen. FxCop analyseert de code en metagegevens in elke assembly om te controleren op defecten in de volgende gebieden:

  • Bibliotheekontwerp

  • Lokalisatie

  • Naamgevingsconventies

  • Prestatie

  • Veiligheid

Windows-toepassingsverificator

De Toepassingsverifier (AppVerifier) kan u helpen bij het identificeren van mogelijke toepassingscompatibiliteit, stabiliteit en beveiligingsproblemen.

De AppVerifier controleert hoe een toepassing het besturingssysteem gebruikt. Het controleert het bestandssysteem, het register, het geheugen en de API's terwijl de toepassing wordt uitgevoerd en raadt oplossingen voor broncode aan voor problemen die worden ontdekt.

U kunt de AppVerifier gebruiken om het volgende te doen:

  • Test op mogelijke toepassingscompatibiliteitsfouten die worden veroorzaakt door veelvoorkomende programmeerfouten.

  • Bekijk een toepassing voor problemen met betrekking tot geheugen.

  • Mogelijke beveiligingsproblemen in een toepassing identificeren.

Windows-gebruikersaccounts

Als u Windows-gebruikersaccounts gebruikt die deel uitmaken van de groep Administrators, worden ontwikkelaars en uitbreidingsklanten blootgesteld aan beveiligingsrisico's. Zie Uitvoeren als lid van de gebruikersgroep en hoe gebruikersaccountbeheer (UAC) van invloed is op uw toepassing voor meer informatie.

Richtlijnen voor speculatieve uitvoeringszijdekanalen

Zie C++ Developer Guidance for Speculative Execution Side Channels (Richtlijnen voor ontwikkelaars voor speculatieve uitvoeringszij kanalen) voor informatie over hoe u hardware-fouten in verband met speculatieve uitvoeringszij kanalen in C++-software kunt identificeren en mitigeren.

Zie ook

System.Security
Beveiliging in .NET
Hoe gebruikersaccountbeheer (UAC) van invloed is op uw toepassing