Doporučené postupy zabezpečení pro jazyk C++
Tento článek obsahuje informace o nástrojích a postupech zabezpečení. Jejich použití nenutí aplikace imunní proti útoku, ale dělá úspěšné útoky méně pravděpodobné.
Funkce zabezpečení jazyka Visual C++
Tyto funkce zabezpečení jsou integrované do kompilátoru a linkeru Microsoft C++:
/guard
(Povolení ochrany toku řízení)
Způsobí, že kompilátor analyzuje tok řízení pro nepřímé cíle volání v době kompilace a potom vloží kód pro ověření cílů za běhu.
/GS
(Kontrola zabezpečení vyrovnávací paměti)
Dává kompilátoru pokyn, aby vložil kód detekce přetečení do funkcí, které jsou ohroženy zneužitím. Když se zjistí přetečení, spuštění se zastaví. Ve výchozím nastavení je tato možnost zapnutá.
/SAFESEH
(Image obsahuje bezpečné obslužné rutiny výjimek)
Dává linkeru pokyn, aby do výstupního obrázku zahrnul tabulku, která obsahuje adresu každé obslužné rutiny výjimky. V době běhu používá operační systém tuto tabulku, aby se zajistilo, že se spustí pouze legitimní obslužné rutiny výjimek. To pomáhá zabránit spuštění obslužných rutin výjimek, které jsou zavedeny škodlivým útokem za běhu. Tento parametr je standardně vypnutý.
/NXCOMPAT
, /NXCOMPAT
(kompatibilní s zabráněním spuštění dat) Tyto možnosti kompilátoru a linkeru umožňují kompatibilitu před spuštěním dat (DEP). PROGRAM DEP chrání procesor před spuštěním nekódových stránek.
/analyze
(Analýza kódu)
Tato možnost kompilátoru aktivuje analýzu kódu, která hlásí potenciální problémy se zabezpečením, jako je přetečení vyrovnávací paměti, neicializovaná paměť, dereferencování ukazatele null a nevracení paměti. Tento parametr je standardně vypnutý. Další informace naleznete v tématu Analýza kódu pro C/C++ Přehled.
/DYNAMICBASE
(Použití randomizace rozložení adresního prostoru)
Tato možnost linkeru umožňuje sestavení spustitelné image, která se dá načíst v různých umístěních v paměti na začátku spuštění. Díky této možnosti je umístění zásobníku v paměti mnohem méně předvídatelné.
CrT s rozšířeným zabezpečením
Knihovna C Runtime Library (CRT) byla rozšířena tak, aby zahrnovala zabezpečené verze funkcí, které představují bezpečnostní rizika – například nezaškrtnutou strcpy
funkci kopírování řetězců. Vzhledem k tomu, že starší, nezabezpečené verze těchto funkcí jsou zastaralé, způsobují upozornění v době kompilace. Doporučujeme místo potlačení upozornění kompilace používat zabezpečené verze těchto funkcí CRT. Další informace naleznete v tématu Funkce zabezpečení v CRT.
SafeInt – knihovna
SafeInt Library pomáhá zabránit přetečení celého čísla a dalším zneužitelným chybám, ke kterým může dojít, když aplikace provádí matematické operace. Knihovna SafeInt
obsahuje SafeInt – třída, SafeIntException – třída a několik funkcí SafeInt.
Třída SafeInt
chrání před přetečením celých čísel a zneužitím dělením nulou. Můžete ho použít ke zpracování porovnání mezi hodnotami různých typů. Poskytuje dvě zásady zpracování chyb. Výchozí zásadou je, SafeInt
aby třída vyvolala SafeIntException
výjimku třídy, která hlásí, proč nelze dokončit matematickou operaci. Druhou zásadou SafeInt
je, aby třída zastavila provádění programu. Můžete také definovat vlastní zásadu.
Každá SafeInt
funkce chrání jednu matematickou operaci před zneužitelnou chybou. Můžete použít dva různé druhy parametrů, aniž byste je převáděli na stejný typ. Pokud chcete chránit více matematických operací, použijte SafeInt
třídu.
Checked – iterátory
Kontrolovaná iterátor vynucuje hranice kontejneru. Ve výchozím nastavení, když je zaškrtnutý iterátor mimo hranice, vygeneruje výjimku a ukončí provádění programu. Kontrolovaná iterátor poskytuje další úrovně odpovědi, které závisí na hodnotách přiřazených k preprocesoru, například _SECURE_SCL_THROWS
a _ITERATOR_DEBUG_LEVEL
. Například v _ITERATOR_DEBUG_LEVEL=2
, kontrolovaná iterátor poskytuje komplexní kontroly správnosti v režimu ladění, které jsou k dispozici pomocí kontrolních výrazů. Další informace naleznete v tématu Zaškrtnuté iterátory a _ITERATOR_DEBUG_LEVEL
.
Analýza kódu pro spravovaný kód
Analýza kódu pro spravovaný kód, označovaná také jako FxCop, kontroluje soulad sestavení s pokyny pro návrh the.NET Framework. FxCop analyzuje kód a metadata v každém sestavení a kontroluje chyby v následujících oblastech:
Návrh knihovny
Lokalizace
Zásady vytváření názvů
Výkon
Zabezpečení
Ověřovatel aplikací pro Windows
Nástroj Application Verifier (AppVerifier) vám může pomoct identifikovat potenciální problémy s kompatibilitou, stabilitou a zabezpečením aplikací.
AppVerifier monitoruje, jak aplikace používá operační systém. Sleduje systém souborů, registr, paměť a rozhraní API v době, kdy je aplikace spuštěná, a doporučuje opravu zdrojového kódu pro problémy, které odhalí.
AppVerifier můžete použít k:
Otestujte potenciální chyby kompatibility aplikací způsobené běžnými chybami programování.
Zkontrolujte problémy související s pamětí v aplikaci.
Identifikace potenciálních problémů se zabezpečením v aplikaci
Uživatelské účty Systému Windows
Používání uživatelských účtů Systému Windows, které patří do skupiny Administrators, zveřejňuje vývojáře a zákazníky s rozšířením na rizika zabezpečení. Další informace najdete v tématu Spuštění jako člen skupiny Uživatelé a jak řízení uživatelských účtů (UAC) ovlivňuje vaši aplikaci.
Pokyny pro spekulativní kanály na straně spuštění
Informace o odsazení a zmírnění ohrožení zabezpečení hardwaru kanálu na straně spekulativního spuštění v softwaru C++ najdete v pokynech pro vývojáře C++ pro spekulativní kanály na straně spuštění.
Viz také
System.Security
Zabezpečení
Jak nástroj Řízení uživatelských účtů (UAC) ovlivňuje vaši aplikaci