Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Schakel het genereren van beveiligingscontroles van Control Flow Guard in.
Syntaxis
/guard:cf
/guard:cf-
Opmerkingen
De /guard:cf optie zorgt ervoor dat de compiler de controlestroom analyseert voor indirecte aanroepdoelen tijdens het compileren en code invoegt tijdens runtime om de doelen te controleren. Is standaard /guard:cf uitgeschakeld en moet expliciet worden ingeschakeld. Als u deze optie expliciet wilt uitschakelen, gebruikt u /guard:cf-.
Visual Studio 2017 en hoger: met deze optie worden bewakers toegevoegd voor switch instructies die jump tables genereren.
Wanneer de /guard:cf cfg-optie (Control Flow Guard) is opgegeven, voegen de compiler en linker extra runtimebeveiligingscontroles in om pogingen te detecteren om inbreuk te maken op uw code. Tijdens het compileren en koppelen worden alle indirecte aanroepen in uw code geanalyseerd om elke locatie te vinden die de code kan bereiken wanneer deze correct wordt uitgevoerd. Deze informatie wordt opgeslagen in extra structuren in de headers van uw binaire bestanden. De compiler injecteert ook een controle voor elke indirecte aanroep in uw code die ervoor zorgt dat het doel een van de geverifieerde locaties is. Als de controle tijdens runtime mislukt op een CFG-bewust besturingssysteem, sluit het besturingssysteem het programma.
Een veelvoorkomende aanval op software maakt gebruik van bugs bij het verwerken van extreme of onverwachte invoer. Zorgvuldig gemaakte invoer voor de toepassing kan een locatie met een aanwijzer naar uitvoerbare code overschrijven. Deze techniek kan worden gebruikt om de controlestroom om te leiden naar code die wordt beheerd door de aanvaller. Met de CFG-runtimecontroles worden de fouten in beschadigde gegevens in het uitvoerbare bestand niet opgelost. In plaats daarvan maken ze het moeilijker voor een aanvaller om ze te gebruiken om willekeurige code uit te voeren. CFG is een risicobeperkingsprogramma dat aanroepen naar andere locaties dan functieinvoerpunten in uw code voorkomt. Het is vergelijkbaar met hoe DEP (Preventie van gegevensuitvoering), /GS-stackcontroles en /DYNAMICBASE/HIGHENTROPYVA-adresruimte-indeling randomisatie (ASLR) de kans verlaagt dat uw code een exploit vector wordt.
Als u de CFG exploit mitigation technique wilt gebruiken, geeft u de /guard:cf compiler en /GUARD:CF de linker.
Als u de techniek voor het beperken van CFG-aanvallen wilt uitschakelen, geeft /guard:cf- u de compiler /GUARD:NO door aan de linker.
Als u bouwt met één cl opdracht, geeft de compiler de optie door aan de linker. Als u afzonderlijk compileert en koppelt, stelt u de optie in voor zowel de compiler- als linkeropdrachten. De /DYNAMICBASE linkeroptie is ook vereist.
Gebruik de dumpbin /headers /loadconfig opdracht om te controleren of uw binaire bestand CFG-gegevens bevat. Binaire CFG-bestanden hebben Guard in de lijst met EXE- of DLL-kenmerken en guardvlagmen bevatten CF Instrumented en FID table present.
De /guard:cf optie is niet compatibel met /ZI (informatie over bewerken en doorgaan met foutopsporing) of /clr (Common Language Runtime-compilatie).
Code die is gecompileerd met behulp van /guard:cf de optie, kan worden gekoppeld aan bibliotheken en objectbestanden die niet zijn gecompileerd. Alleen deze code, wanneer deze ook is gekoppeld met behulp van de /guard:cf optie en wordt uitgevoerd op een CFG-bewust besturingssysteem, heeft CFG-beveiliging. Omdat code die zonder de optie is gecompileerd, geen aanval stopt, raden we u aan de optie te gebruiken voor alle code die u compileert. Er zijn kleine runtimekosten voor CFG-controles, maar de compileranalyse probeert de controles op indirecte sprongen weg te optimaliseren die kunnen worden bewezen veilig te zijn.
Deze compileroptie instellen in de Ontwikkelomgeving van Visual Studio
- Open het dialoogvenster Eigenschappenpagina's voor het project. Zie Eigenschappen van compiler en build instellen voor meer informatie.
- Selecteer de eigenschappenpagina Configuratie-eigenschappen>C/C++>Code genereren .
- Selecteer de eigenschap Control Flow Guard .
- Kies ja in de vervolgkeuzelijst om Control Flow Guard of Nee in te schakelen.