Megosztás a következőn keresztül:


Ajánlott biztonsági eljárások a C++ használatához

Ez a cikk a biztonsági eszközökkel és gyakorlatokkal kapcsolatos információkat tartalmazza. Ezek használata nem teszi az alkalmazásokat védetté a támadástól, de kevésbé valószínű, hogy sikeres támadásokat hajt végre.

A Microsoft C++ biztonsági funkciói

Ezek a biztonsági funkciók a Microsoft C++ fordítóba és a linkerbe vannak beépítve:

/guard (Control Flow Guard engedélyezése)
A fordító a fordításkor elemzi a közvetett hívási célok vezérlését, majd futásidőben a célok ellenőrzésére szolgáló kódot beszúrja.

/GS (Puffer biztonsági ellenőrzése)
Utasítja a fordítót, hogy szúrjon be túlfutási észlelési kódot a kihasználtság kockázatának kitett függvényekbe. Túlfuttatás észlelésekor a végrehajtás leáll. Ez a beállítás alapértelmezés szerint be van kapcsolva.

/SAFESEH (A kép biztonsági kivételkezelőkkel rendelkezik)
Arra utasítja a linkert, hogy a kimeneti képben szerepeljen egy olyan tábla, amely tartalmazza az egyes kivételkezelők címét. Futásidőben az operációs rendszer ezt a táblát használja annak biztosítására, hogy csak a jogos kivételkezelők kerüljenek végrehajtásra. Ez segít megakadályozni a futtatáskor rosszindulatú támadás által bevezetett kivételkezelők végrehajtását. Alapértelmezés szerint ez a beállítás ki van kapcsolva.

/NXCOMPAT, /NXCOMPAT (Kompatibilis az adatvégrehajtás megelőzésével)
Ezek a fordító- és csatolóbeállítások lehetővé teszik az adatvégrehajtás-megelőzés (DEP) kompatibilitását. A DEP védi a processzort a nem kódoldalak végrehajtása ellen.

/analyze (Kódelemzés)
Ez a fordítóbeállítás aktiválja a kódelemzést, amely olyan lehetséges biztonsági problémákat jelez, mint a puffertúllépés, a nem inicializált memória, a nullmutató-halasztás és a memóriavesztés. Alapértelmezés szerint ez a beállítás ki van kapcsolva. További információ: Kódelemzés a C/C++ áttekintéséhez.

/DYNAMICBASE (Címtérelrendezés véletlenszerűsítése)
Ez a hivatkozás lehetővé teszi egy végrehajtható rendszerkép készítését, amely a végrehajtás elején a memóriában különböző helyeken tölthető be. Ez a beállítás a memória veremhelyét is sokkal kevésbé kiszámíthatóvá teszi.

Security-Enhanced Katódsugárcső

A C futtatókörnyezeti kódtár (CRT) ki lett egészítve a biztonsági kockázatokat jelentő függvények biztonságos verzióival – például a nem ellenőrzött sztringmásolási strcpy függvénnyel. Mivel ezeknek a függvényeknek a régebbi, nem biztonságos verziói elavultak, fordítási időre vonatkozó figyelmeztetéseket okoznak. Javasoljuk, hogy a fordítási figyelmeztetések mellőzése helyett használja ezeknek a CRT-függvényeknek a biztonságos verzióit. További információ: Biztonsági funkciók a CRT-ben.

SafeInt-kódtár

A SafeInt Library segít megelőzni az egész számok túlcsordulását és az alkalmazás matematikai műveletek végrehajtásakor esetlegesen előforduló egyéb hasznosítható hibákat. A SafeInt kódtár tartalmazza a SafeInt osztályt, a SafeIntException osztályt és számos SafeInt Függvényt.

Az SafeInt osztály védelmet nyújt az egész szám túlcsordulása és a zéró osztásos kihasználások ellen. Ezzel kezelheti a különböző típusú értékek összehasonlítását. Két hibakezelési szabályzatot biztosít. Az alapértelmezett szabályzat az, hogy az SafeInt osztály kivételt SafeIntException adjon ki, amely jelzi, hogy miért nem lehet matematikai műveletet végrehajtani. A második szabályzat az, hogy az osztály leállítja a SafeInt program végrehajtását. Egyéni szabályzatot is definiálhat.

Minden SafeInt függvény egy matematikai műveletet véd a kihasználható hibáktól. Kétféle paramétert használhat anélkül, hogy ugyanazt a típust alakítanák át. Több matematikai művelet védelméhez használja az osztályt SafeInt .

Ellenőrzött iterátorok

Egy ellenőrzött iterátor betartja a tároló határait. Alapértelmezés szerint, ha egy ellenőrzött iterátor túllépi a korlátokat, kivételt hoz létre, és befejezi a program végrehajtását. A ellenőrzött iterátor más válaszszinteket is biztosít, amelyek az előfeldolgozóhoz rendelt értékektől függnek, például _SECURE_SCL_THROWS és _ITERATOR_DEBUG_LEVEL. Egy ellenőrzött iterátor például a _ITERATOR_DEBUG_LEVEL=2-nál hibakeresési módban átfogó korrektségi ellenőrzéseket biztosít, amelyeket az assert parancsok használatával tesz elérhetővé. További információ: Ellenőrzött iterátorok és _ITERATOR_DEBUG_LEVEL.

Felügyelt kód kódelemzése

A felügyelt kód kódelemzése, más néven FxCop, ellenőrzi, hogy a szerelvények megfelelnek-e the.NET keretrendszer tervezési irányelveinek. Az FxCop elemzi az egyes szerelvények kódját és metaadatait, hogy ellenőrizze a hibákat a következő területeken:

  • Kódtár tervezése

  • Lokalizáció

  • Elnevezési konvenciók

  • Teljesítmény

  • Biztonság

Windows Alkalmazásellenőrző

Az Application Verifier (AppVerifier) segítségével azonosíthatja az alkalmazás lehetséges kompatibilitási, stabilitási és biztonsági problémáit.

Az AppVerifier figyeli, hogy egy alkalmazás hogyan használja az operációs rendszert. Figyeli a fájlrendszert, a beállításjegyzéket, a memóriát és az API-kat, miközben az alkalmazás fut, és forráskód-javításokat javasol az általa feltárt problémákhoz.

Az AppVerifier használatával:

  • Tesztelje a gyakori programozási hibák által okozott lehetséges alkalmazáskompatibilitási hibákat.

  • Vizsgálja meg az alkalmazást a memóriával kapcsolatos problémák esetén.

  • Az alkalmazás lehetséges biztonsági problémáinak azonosítása.

Windows felhasználói fiókok

A Rendszergazdák csoporthoz tartozó Windows-felhasználói fiókok használata biztonsági kockázatokat rejt a fejlesztők és a bővítmények számára. További információ: A felhasználói csoport tagjaként való futtatás és a felhasználói fiókok felügyelete (UAC) hatása az alkalmazásra.

Útmutató a spekulatív végrehajtási mellékcsatornákhoz

A C++ szoftver spekulatív végrehajtásioldali hardveres biztonsági réseinek behúzásáról és elhárításáról további információt a C++ spekulatív végrehajtási mellékcsatornák fejlesztői útmutatójában talál.

Lásd még

System.Security
Biztonság a .NET-ben
A felhasználói fiókok felügyelete (UAC) hatása az alkalmazásra