Biztonsági szempontok: Microsoft Windows Shell
Ez a témakör a Windows Shellhez kapcsolódó biztonsági szempontokról nyújt tájékoztatást. Ez a dokumentum nem tud minden szükséges információt megadni a biztonsági problémákról, ehelyett használja kiindulási pontként és hivatkozásként ehhez az adott technológiai területhez.
A Rendszerhéj a rendszer számos fontos aspektusát vezérli, köztük több olyant is, amely potenciális biztonsági kockázatot jelent, ha nem megfelelően kezeli őket. Ez a témakör néhány gyakori problémát ismertet, és ismerteti, hogyan oldhatja meg őket az alkalmazásokban. Ne feledje, hogy a biztonság nem korlátozódik az internetes biztonsági résekre. Megosztott rendszereken, beleértve a terminálszolgáltatásokon keresztül elérhető rendszereket is, gondoskodnia kell arról is, hogy a felhasználók ne tegyenek semmit, amely kárt tehet a rendszer megosztásában részt vevő másokkal.
- az alkalmazás megfelelő telepítése
- Shlwapi
- automatikus kiegészítési
- ShellExecute, ShellExecuteEx és Related Functions
- Fájlok áthelyezése és másolása
- Biztonságos névtérbővítmények írása
- biztonsági riasztások
- Kapcsolódó témakörök
Az alkalmazás megfelelő telepítése
A Shell esetleges biztonsági problémáinak többsége az alkalmazás megfelelő telepítésével hárítható el.
Telepítse az alkalmazást a Program Files mappában.
Operációs rendszer Hely Windows XP, Windows Server 2003 és korábbi verziók CSIDL_PROGRAM_FILES Windows Vista és újabb verziók FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86 vagy FOLDERID_ProgramFilesCommonX64. Részletekért lásd KNOWNFOLDERID. Ne tárolja a felhasználói adatokat a ProgramFájlok mappában.
Használja a megfelelő adatmappát az összes felhasználó számára gyakori adatokhoz.
Operációs rendszer Hely Windows XP, Windows Server 2003 és korábbi verziók CSIDL_COMMON_APPDATA Windows Vista és újabb verziók FOLDERID_ProgramData Az adott felhasználóhoz tartozó adatokhoz használja a megfelelő felhasználói adatmappát.
Operációs rendszer Hely Windows XP, Windows Server 2003 és korábbi verziók CSIDL_APPDATA, CSIDL_PERSONAL és mások. Windows Vista és újabb verziók FOLDERID_RoamingAppData, FOLDERID_Documents és mások. Ha a Program Files mappától eltérő helyre kell telepítenie, győződjön meg arról, hogy a hozzáférés-vezérlési listákat (ACL-eket) megfelelően állította be, hogy a felhasználók ne férhessenek hozzá a fájlrendszer nem megfelelő részeihez. Az adott felhasználóra jellemző adatoknak olyan ACL-sel kell rendelkezniük, amely megakadályozza, hogy más felhasználók hozzáférjenek azokhoz.
A fájltársítások beállításakor ügyeljen arra, hogy megfelelően adja meg a parancssort. Használjon teljes elérési utat, és csomagolja be azokat az elemeket, amelyek idézőjelekben fehér szóközt tartalmaznak. Sortörés parancsparaméterek külön idézőjelekben. Ellenkező esetben előfordulhat, hogy a sztring helytelenül van elemezve, és az alkalmazás nem indul el megfelelően. Itt két példa látható a megfelelően formázott parancssorokra.
"C:\Program Files\MyApp\MyApp.exe" "%1" "%2" C:\MyAppDir\MyApp\MyApp.exe "%1"
Jegyzet
A standard telepítési mappák helye rendszerről rendszerre változhat. Ha egy szabványos mappa helyét egy adott Windows Vista vagy újabb rendszeren szeretné lekérni, hívja meg SHGetKnownFolderPath a megfelelő KNOWNFOLDERID értékkel. Windows XP, Windows Server 2003 vagy korábbi rendszerekben hívja meg SHGetFolderLocation vagy SHGetFolderPath a megfelelő CSIDL értékkel.
Shlwapi
A Shell Lightweight API (Shlwapi) számos sztringmanipulációs függvényt tartalmaz. Ezeknek a függvényeknek a helytelen használata váratlanul csonkolt sztringekhez vezethet, amelyek nem jelzik a csonkolás visszaadását. A következő esetekben a Shlwapi függvényeket nem szabad használni. A felsorolt alternatív függvényeket, amelyek kevesebb kockázatot jelentenek, a helyükön kell használni.
Shlwapi függvény | Alternatív függvény |
---|---|
StrCat,StrNCat | StringCchCat, StringCbCat és kapcsolódó függvények |
StrCpy, StrCpyN | StringCchCopy, StringCbCopy és kapcsolódó függvények |
wnsprintf, wvnsprintf | StringCchPrintf, StringCbPrintf és kapcsolódó függvények |
A fájl elérési útját visszaadó PathRelativePathTo függvények esetén mindig állítsa a puffer méretét MAX_PATH karakterekre. Ezzel biztosítja, hogy a puffer elég nagy legyen a lehető legnagyobb fájlelérési út tárolásához, valamint egy null karaktert végződő karaktert.
További információ az alternatív sztringfüggvényekről: A Strsafe.h.
Automatikus kiegészítés
Ne használja az Automatikus kiegészítés funkciót a jelszavakhoz.
ShellExecute, ShellExecuteEx és kapcsolódó függvények
Számos Shell-függvény használható az alkalmazások elindításához: ShellExecute, ShellExecuteEx, WinExecés SHCreateProcessAsUserW. Győződjön meg arról, hogy megadja a végrehajtandó alkalmazás egyértelmű definícióját.
- A végrehajtható fájl elérési útjának megadásakor adja meg a teljes elérési utat. A fájl megkereséséhez ne függjön a Shelltől.
- Ha olyan parancssori sztringet ad meg, amely üres területet tartalmaz, akkor a sztringet idézőjelek közé kell burkolni. Ellenkező esetben az elemző több elemként értelmezhet egy szóközt tartalmazó elemet.
Fájlok áthelyezése és másolása
A rendszerbiztonság egyik kulcsa az ACL-ek megfelelő hozzárendelése. Titkosított fájlokat is használhat. Győződjön meg arról, hogy a fájlok áthelyezésekor vagy másolásakor a megfelelő ACL-hez vannak rendelve, és hogy nem lettek véletlenül visszafejtve. Ez magában foglalja a fájlok áthelyezését a Lomtár, valamint a fájlrendszeren belül. Használja IFileOperation (Windows Vista vagy újabb) vagy SHFileOperation (Windows XP és korábbi verziók). Ne használja MoveFile, amely esetleg nem állítja be a célfájl várt ACL-ét.
Biztonságos névtérbővítmények írása
A rendszerhéj-névtérbővítmények hatékony és rugalmas módot jelentenek az adatok felhasználónak való bemutatására. Azonban rendszerhibát okozhatnak, ha nem megfelelően vannak megírva. Néhány fontos szempont, amit szem előtt kell tartani:
- Ne feltételezze, hogy az adatok, például a képek megfelelően vannak formázva.
- Ne feltételezze, hogy a MAX_PATH egy sztringben bájtok számával egyenértékű. A karakterek száma.
Biztonsági riasztások
Az alábbi táblázat felsorol néhány olyan funkciót, amely helytelen használat esetén veszélyeztetheti az alkalmazások biztonságát.
Vonás | Mérséklés |
---|---|
ShellExecute, ShellExecuteEx | A hamisítási támadás során olyan keresések használhatók, amelyek az alapértelmezett helyek egy sorától függenek egy adott fájl megkereséséhez. A kívánt fájl eléréséhez használjon teljes elérési utat. |
StrCat | Az első argumentumnak ( psz1) elég nagynak kell lennie ahhoz, hogy psz2 és a záró '\0' legyen, különben puffertúllépés történhet. Használja inkább az alábbi alternatívák egyikét. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNvagy StringCchCatNEx. |
StrCatBuff | Az utolsó sztring nem garantáltan null értékű. Használja inkább az alábbi alternatívák egyikét. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNvagy StringCchCatNEx. |
StrCatChainW | Az utolsó sztring nem garantáltan null értékű. Használja inkább az alábbi alternatívák egyikét. StringCbCatEx, StringCbCatNEx, StringCchCatExvagy StringCchCatNEx. |
StrCpy | Az első argumentumnak ( psz1) elég nagynak kell lennie ahhoz, hogy psz2 és a záró '\0' legyen, különben puffertúllépés történhet. Használja inkább az alábbi alternatívák egyikét. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyNvagy StringCchCopyNEx. |
StrCpyN | A másolt sztring nem garantáltan null értékű. Használja inkább az alábbi alternatívák egyikét. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN, StringCchCopyNEx. |
StrDup | StrDup feltételezi, hogy lpsz null értékű sztring. Továbbá a visszaadott sztring nem garantáltan null értékű lesz. Használja inkább az alábbi alternatívák egyikét. StringCbCat, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyNvagy StringCchCopyNEx. |
StrNCat | Az első argumentumnak ( pszFront) elég nagynak kell lennie ahhoz, hogy pszBack és a záró '\0' legyen, különben puffertúlcsordulás léphet fel. Vegye figyelembe, hogy az utolsó argumentum, cchMax, a pszFrontmásolandó karakterek száma, nem feltétlenül a pszFront mérete bájtban. Használja inkább az alábbi alternatívák egyikét. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNvagy StringCchCatNEx. |
wnsprintf | A másolt sztring nem garantáltan null értékű. Használja inkább az alábbi alternatívák egyikét. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfvagy StringCchVPrintfEx. |
wvnsprintf | A másolt sztring nem garantáltan null értékű. Használja inkább az alábbi alternatívák egyikét. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfvagy StringCchVPrintfEx. |
Kapcsolódó témakörök