Megosztás:


/Qspectre

Az 1. spectre-variáns biztonsági réseinek elhárítására szolgáló utasítások fordítását adja meg a fordító számára.

Szemantika

/Qspectre

Megjegyzések

A /Qspectre beállítás hatására a fordító utasításokat szúr be bizonyos Spectre biztonsági rések elhárításához. Ezeket a biztonsági réseket spekulatív végrehajtási mellékcsatornás támadásoknak nevezzük. Számos operációs rendszert és modern processzort érintenek, beleértve az Intel, az AMD és az ARM processzorokat is.

Ez /Qspectre a lehetőség a Visual Studio 2017 15.5.5-ös és minden későbbi verziójától kezdve érhető el. Elérhető a Visual Studio 2015 3. frissítésében kb-4338871.

A /Qspectre beállítás alapértelmezés szerint ki van kapcsolva.

A kezdeti kiadásban a /Qspectre lehetőség csak optimalizált kódon működött. A Visual Studio 2017 15.7-es verziójától kezdve a /Qspectre lehetőség minden optimalizálási szinten támogatott.

Számos Microsoft C++ kódtár is elérhető a Spectre-kockázatcsökkentéssel rendelkező verziókban. A Visual Studio Spectre-alapú kódtárai letölthetők a Visual Studio Installerben. A fordítók, a buildelési eszközök és a futtatókörnyezetekalatt az Egyes összetevők lapon találhatók, és a névben szerepel a "Libs for Spectre". Mind a DLL, mind a statikus futásidejű kódtárak engedélyezve vannak a Visual C++ futtatókörnyezetek egy részhalmazához: VC++ indítási kód, vcruntime140, msvcp140, concrt140 és vcamp140. A DLL-ek csak az alkalmazás helyi telepítéséhez támogatottak. A Visual C++ futtatókörnyezeti kódtárak terjeszthető tartalma nem módosítható.

Az MFC-hez és az ATL-hez spectre-alapú kódtárakat is telepíthet. Ezek megtalálhatók az Egyes összetevők lapon az SDK-k, kódtárak és keretrendszerek alatt.

Megjegyzés:

Az univerzális Windows-alkalmazásokhoz vagy -összetevőkhöz nem érhetők el Spectre-alapú kódtárak. Az ilyen kódtárak alkalmazásalapú üzembe helyezése nem lehetséges.

Alkalmazhatóság

Ha a kód olyan adatokon működik, amelyek átlépik a megbízhatósági határt, javasoljuk, hogy használja a lehetőséget a /Qspectre kód újraépítésére és ismételt üzembe helyezésére a probléma mielőbbi megoldása érdekében. Ilyen kód például az a kód, amely nem megbízható bemenetet tölt be, amely befolyásolhatja a végrehajtást. Például olyan kód, amely távoli eljáráshívásokat kezdeményez, nem megbízható bemeneteket vagy fájlokat elemez, vagy más helyi folyamatközi kommunikációs (IPC-) interfészeket használ. Előfordulhat, hogy a szabványos tesztkörnyezeti technikák nem elegendőek. Vizsgálja meg alaposan a tesztkörnyezeteket, mielőtt eldöntené, hogy a kód nem lépi át a megbízhatósági határt.

Elérhetőség

Ez /Qspectre a lehetőség a Visual Studio 2017 15.5.5-ös verziójától kezdve, valamint a Microsoft C/C++ fordítók (MSVC) 2018. január 23-án vagy azt követően végrehajtott frissítéseiben érhető el. A Visual Studio Installer használatával frissítse a fordítót, és telepítse a Spectre által csökkentett kódtárakat különálló összetevőkként. Ez /Qspectre a lehetőség a Visual Studio 2015 3. frissítésében is elérhető egy javításon keresztül. További információ: KB 4338871.

A Visual Studio 2017 15.5-ös és a Visual Studio 2017 15.6-os verziójának összes előzetes verziója. a egy nem dokumentált beállítást tartalmaz. /d2guardspecload Ez egyenértékű a kezdeti viselkedésével /Qspectre. /d2guardspecload A fordító ezen verzióiban ugyanezeket a kockázatcsökkentéseket alkalmazhatja a kódra. Javasoljuk, hogy frissítse a buildet úgy, hogy az a lehetőséget támogató fordítókban legyen használva /Qspectre . A /Qspectre beállítás a fordító későbbi verzióiban is támogathatja az új megoldásokat.

Hatás

A /Qspectre beállítás a Specter 1. variánsának, a Határellenőrzés megkerülésének, a CVE-2017-5753- nak a csökkentésére szolgáló kódot adja ki. Olyan utasítások beszúrásával működik, amelyek spekulatív kódvégrehajtási akadályként működnek. A processzorspekuláció mérséklésére használt konkrét utasítások a processzortól és annak mikroarchitektúrájától függenek, és a fordító későbbi verzióiban változhatnak.

Ha engedélyezi a /Qspectre beállítást, a fordító megpróbálja azonosítani azokat a példányokat, ahol a spekulatív végrehajtás megkerülheti a korlátok ellenőrzését. Itt szúrja be a sorompó utasításait. Fontos tisztában lenni az elemzés korlátaival, amelyeket a fordító képes az 1. változat példányainak azonosítására. Így nincs garancia arra, hogy az 1. változat összes lehetséges példánya a /Qspectre.

A teljesítményre gyakorolt hatás

A teljesítményre gyakorolt hatás /Qspectre több méretezhető kódbázisban elhanyagolhatónak tűnt. Nincs azonban garancia arra, hogy a kód /Qspectre teljesítménye változatlan marad. A beállítás teljesítményre gyakorolt hatásának meghatározásához mérje fel a kódot. Ha tudja, hogy a teljesítménykritikus blokkokban vagy hurkokban nincs szükség a kockázatcsökkentésre, az irányelv használatával szelektíven letilthatja a kockázatcsökkentést __declspec(spectre(nomitigation)) . Ez az irányelv nem érhető el olyan fordítókban, amelyek csak a /d2guardspecload lehetőséget támogatják.

Kötelező kódtárak

A /Qspectre fordító beállítás a saját kódban előforduló problémákat enyhíti. A nagyobb védelem érdekében határozottan javasoljuk, hogy a Spectre-kockázatcsökkentések biztosítására létrehozott kódtárakat is használjon. Számos Microsoft-futtatókörnyezeti kódtár érhető el a Spectre-megoldásokkal.

Ezek a kódtárak nem kötelező összetevők, amelyeket a Visual Studio Installer használatával kell telepíteni:

  • MSVC-verzió version_numbers Libs for Spectre [(x86 és x64) | (ARM) | (ARM64)]
  • Visual C++ ATL for [(x86/x64) | ARM | ARM64] a Spectre-kockázatcsökkentésekkel
  • Visual C++ MFC for [x86/x64 | ARM | ARM64] a Spectre-kockázatcsökkentésekkel

A Visual Studio IDE alapértelmezett MSBuild-alapú projektrendszere lehetővé teszi egy Spectre Mitigation tulajdonság megadását a projektekhez. Ez a tulajdonság beállítja a /Qspectre fordítót, és módosítja a kódtár elérési útját a Spectre által csökkentett futtatókörnyezeti kódtárak összekapcsolásához. Ha ezek a kódtárak nincsenek telepítve a kód létrehozásakor, a buildelési rendszer figyelmeztetést MSB8040. Ha az MFC- vagy ATL-kód összeállítása sikertelen, és a hivatkozáskezelő "végzetes hiba LNK1104: nem tudja megnyitni a"oldnames.lib" fájlt, ezek a hiányzó kódtárak okozhatják az okot.

A Visual Studio IDE alapértelmezett MSBuild-alapú projektrendszere lehetővé teszi egy Spectre Mitigation tulajdonság megadását a projektekhez. Ez a tulajdonság beállítja a /Qspectre fordítót, és módosítja a kódtár elérési útját a Spectre által csökkentett futtatókörnyezeti kódtárak összekapcsolásához. Ha ezek a kódtárak nincsenek telepítve a kód létrehozásakor, a buildelési rendszer a MSB8038 következő figyelmeztetést jelenti: "A Spectre-kockázatcsökkentés engedélyezve van, de a Spectre által enyhített kódtárak nem találhatók." Ha az MFC- vagy ATL-kód összeállítása sikertelen, és a hivatkozáskezelő "végzetes hiba LNK1104: nem tudja megnyitni a"oldnames.lib" fájlt, ezek a hiányzó kódtárak okozhatják az okot.

A Spectre által enyhített kódtárakat többféleképpen is megadhatja a buildelési parancssorba. A Spectre által enyhített kódtárak elérési útját a hivatkozási beállítással /LIBPATH adhatja meg, hogy azok legyenek az alapértelmezett kódtárak. Használhatja a /NODEFAULTLIB linker lehetőséget, és explicit módon csatolhatja a Spectre által csökkentett kódtárakat. Vagy beállíthatja úgy is a LIBPATH környezeti változót, hogy tartalmazza a célplatform Spectre-alapú kódtárainak elérési útját. Az elérési út beállításának egyik módja a beállítással spectre_mode beállított fejlesztői parancssor használata. További információ: A fejlesztői eszközök használata meglévő parancsablakban.

Az x86-os, x64- és ARM-platformokhoz készült spectre-alapú futtatókörnyezeti kódtárak a KB 4338871 keresztül elérhető javítás részeként érhetők el. Alapértelmezés szerint ezek a kódtárak a következő könyvtárakban vannak telepítve:

  • x86: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\spectre
  • x64: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\spectre\amd64
  • KAR: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\spectre\arm

A Spectre által enyhített kódtárakat többféleképpen is megadhatja a buildelési parancssorba. A Spectre által enyhített kódtárak elérési útját a hivatkozási beállítással /LIBPATH adhatja meg, hogy azok legyenek az alapértelmezett kódtárak. Használhatja a /NODEFAULTLIB linker lehetőséget, és explicit módon csatolhatja a Spectre által csökkentett kódtárakat. Vagy beállíthatja úgy is a LIBPATH környezeti változót, hogy tartalmazza a célarchitektúra Spectre-alapú kódtárainak elérési útját. További információ: A Microsoft C++ eszközkészlet használata a parancssorból.

További információk

További információkért lásd a Microsoft biztonsági tanácsadójának hivatalos ADV180002, útmutató a spekulatív végrehajtás oldalcsatornás biztonsági réseinek csökkentéséhez. Útmutatást az Intel, a spekulatív végrehajtás oldalcsatornáinak kockázatcsökkentései és az ARM, a Gyorsítótár-spekuláció oldalcsatornái is találhatnak.

A Spectre- és a Meltdown-kockázatcsökkentések Windows-specifikus áttekintéséért lásd : A Spectre és a Meltdown-kockázatcsökkentések windowsos rendszerekre gyakorolt teljesítményhatásának ismertetése.

Az MSVC-kockázatcsökkentések által kezelt Spectre-biztonsági rések áttekintéséért tekintse meg az MSVC Spectre-megoldásait a C++ csapatblogon.

A fordító beállításának beállítása a Visual Studio fejlesztői környezetében

  1. Nyissa meg a projekt Tulajdonságlapok párbeszédpanelt. További információ: C++ fordító és buildtulajdonságok beállítása a Visual Studio.

  2. Válassza a Konfiguráció tulajdonságai>C/C++>Kódgenerálás tulajdonságlapját.

  3. Válasszon egy új értéket a Spectre Mitigation tulajdonsághoz . Kattintson az OK gombra a módosítás alkalmazásához.

  1. Nyissa meg a projekt Tulajdonságlapok párbeszédpanelt. További információ: C++ fordító és buildtulajdonságok beállítása a Visual Studio.

  2. Válassza a Konfiguráció tulajdonságai>C/C++>parancssori tulajdonságlapját.

  3. Írja be a /Qspectre fordítót a További beállítások mezőbe. A módosítás alkalmazásához válassza az Alkalmaz lehetőséget.

  4. Válassza a Configuration Properties>Linker>General tulajdonságlapot.

  5. A projekttulajdonságok minden platformjához szerkessze a További könyvtárkönyvtárak tulajdonságot . Állítsa be a célplatform Spectre által csökkentett futtatókörnyezeti könyvtárának elérési útját, majd válassza az Alkalmaz elemet a módosítás alkalmazásához. Ha elkészült, válassza az OK gombot.

A fordítóprogram programozott beállítása

Lásd még

/Qspectre-jmp
/Qspectre-load
/Qspectre-load-cf
/Q beállítások (alacsony szintű műveletek)
MSVC-fordító beállításai
MSVC fordító parancssori szintaxisa