Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan védi az App Control for Business a PowerShellt és az általa előírt korlátozásokat. A PowerShell biztonságos működése a Használt Windows és PowerShell verziójától függően változik.
Rendszerlezárási szabályzat észlelése a PowerShellben
A PowerShell mind az AppLocker, mind az App Control for Business rendszerszintű szabályzatait észleli. Az AppLocker elavult. Az App Control a Windows előnyben részesített alkalmazásvezérlő rendszere.
Régi alkalmazásvezérlési szabályzat kényszerítési észlelése
A PowerShell az örökölt App Control WldpGetLockdownPolicy API-val két dolgot fedez fel:
- Rendszerszintű szabályzatkényszerítés:
None, ,AuditEnforce - Egyéni fájlházirend:
None,Audit(a szabályzat által engedélyezett)Enforce(a szabályzat nem engedélyezi)
A PowerShell (v5.1 - v7.x) minden verziója támogatja ezt az alkalmazásvezérlési szabályzatészlelést.
Legújabb alkalmazásvezérlési szabályzatkényszerítés észlelése
Az App Control új API-kat vezetett be a Windows legújabb verzióiban. A 7.3-as verziótól kezdve a PowerShell az új WldpCanExecuteFile API-val dönti el, hogyan kell kezelni a fájlokat. A Windows PowerShell 5.1 nem támogatja ezt az új API-t. Az új API elsőbbséget élvez az egyes fájlok örökölt API-ival szemben. A PowerShell azonban továbbra is az örökölt API-t használja a rendszerszintű szabályzatkonfiguráció beszerzéséhez. Ha az új API nem érhető el, a PowerShell visszatér a régi API-viselkedéshez.
Az új API az alábbi információkat nyújtja minden fájlhoz:
WLDP_CAN_EXECUTE_ALLOWEDWLDP_CAN_EXECUTE_BLOCKEDWLDP_CAN_EXECUTE_REQUIRE_SANDBOX
A PowerShell viselkedése a zárolási szabályzatban
A PowerShell interaktív és nem interaktív módban is futtatható.
- Interaktív módban a PowerShell egy parancssori alkalmazás, amely parancsként vagy szkriptként futtatja a felhasználók parancssori bemenetét. Az eredmények vissza lesznek jelenítve a felhasználónak.
- Nem interaktív módban a PowerShell betölti a modulokat, és felhasználói bemenet nélkül futtat szkriptfájlokat. A rendszer figyelmen kívül hagyja az eredményadatfolyamokat, vagy átirányítja egy fájlba.
Szabályzatkényszerítés alatt futó interaktív mód
A PowerShell módban futtat parancsokat ConstrainedLanguage . Ez a mód megakadályozza, hogy az interaktív felhasználók bizonyos parancsokat futtasson vagy tetszőleges kódot hajtanak végre. Az ebben a módban érvényes korlátozásokkal kapcsolatos további információkért tekintse meg a cikk Zárolási szabályzat szakaszában található PowerShell-korlátozásokat.
Szabályzatkényszerítés alatt futó neminteraktív mód
Amikor a PowerShell szkriptet futtat vagy betölt egy modult, az App Control API-val lekéri a fájl szabályzatkényszerítését.
A PowerShell 7.3-as vagy újabb verziója az WldpCanExecuteFile API-t használja, ha elérhető. Ez az API az alábbi eredmények egyikét adja vissza:
-
WLDP_CAN_EXECUTE_ALLOWED: A szabályzat néhány korlátozással engedélyezi a fájl használatátFullLanguagemódban. -
WLDP_CAN_EXECUTE_BLOCKED: A házirend letiltja a fájlt. A PowerShell hibát jelez a fájl futtatásakor vagy betöltésekor. -
WLDP_CAN_EXECUTE_REQUIRE_SANDBOX: A szabályzat nem hagyja jóvá a fájlt, de futtatható vagy betölthetőConstrainedLanguagemódban.
A Windows PowerShell 5.1-ben vagy ha WldpCanExecuteFile az API nem érhető el, a PowerShell fájlonkénti viselkedése a következő:
-
None: A fájl néhány korlátozással betöltveFullLanguagefut. -
Audit: A fájl korlátozás nélkül fut vagy töltődik beFullLanguagemódban. A PowerShell 7.4-ben vagy újabb verzióiban a házirend korlátozási információkat naplóz a Windows eseménynaplóira. -
Enforce: A fájl futtatása vagy betöltéseConstrainedLanguagemódban történik.
PowerShell-korlátozások a zárolási szabályzatban
Ha a PowerShell észleli, hogy a rendszer alkalmazásvezérlési zárolási szabályzat alatt áll, akkor is korlátozásokat alkalmaz, ha a szkript megbízható és módban fut FullLanguage . Ezek a korlátozások megakadályozzák a PowerShell ismert viselkedését, amely tetszőleges kódvégrehajtást eredményezhet egy zárolt rendszeren. A zárolási szabályzat a következő korlátozásokat kényszeríti ki:
Modul pontozása helyettesítő függvény exportálási korlátozásával
Minden olyan modul, amely szkriptalapú forráskódokat használ, és helyettesítő karaktereket használó függvényeket exportál, hibát eredményez. A helyettesítő karakterek exportálásának letiltása megakadályozza a parancsfájlok injektálását egy rosszindulatú felhasználótól, aki olyan nem megbízható szkriptet helyezhet el, amely pontforrást kap egy megbízható modulba. A rosszindulatú szkript ezután hozzáférhet a megbízható modul privát funkcióihoz.
Biztonsági javaslat: Soha ne használjon parancsfájl-forrást egy modulban, és mindig exportálja a modulfüggvényeket explicit névvel (helyettesítő karakterek nélkül).
Beágyazott modul helyettesítő függvény exportálási korlátozásával
Ha egy szülőmodul függvényeket exportál helyettesítő karakterekkel, a PowerShell eltávolítja a beágyazott modul összes függvénynevét a függvényexportálási listából. A beágyazott modulok helyettesítő karaktereinek exportálásának blokkolása megakadályozza a veszélyes beágyazott függvények véletlen exportálását helyettesítő karakterek névegyeztetésével.
Biztonsági javaslat: Mindig exportálja a modulfüggvényeket explicit névvel (helyettesítő karakterek nélkül).
Interaktív rendszerhéjparaméter típusának konvertálása
Ha a rendszer zárolva van, az interaktív PowerShell-munkamenetek módban futnak
ConstrainedLanguage, hogy megakadályozzák az tetszőleges kódvégrehajtást. A munkamenetbe betöltött megbízható modulok módban futnakFullLanguage. Ha egy megbízható modul-parancsmag összetett típusokat használ a paramétereihez, a paraméterkötés során a típuskonverzió meghiúsulhat, ha az átalakítás nem engedélyezett a megbízhatósági határokon. A hiba akkor fordul elő, ha a PowerShell egy típuskonstruktor futtatásával próbál átalakítani egy értéket. A típuskonstruktorok nem futtathatókConstrainedLanguagemódban.Ebben a példában
ConstrainedLanguagea paraméterkötés típusának konvertálása általában engedélyezett, de módban való futtatáskor meghiúsul. AConnectionPorttípuskonstruktor nem engedélyezett:PS> Create-ConnectionOnPort -Connection 22 Create-ConnectionOnPort: Cannot bind parameter 'Connection'. Cannot convert the "22" value of type "System.Int32" to type "ConnectionPort".Enter-PSHostProcessa parancsmag nem engedélyezettA
Enter-PSHostProcessparancsmag le van tiltva, és ha használja, hibát jelez. Ez a parancs csatolási és hibakeresési munkamenetekhez használható. Lehetővé teszi, hogy a helyi gépen bármilyen más PowerShell-munkamenethez csatlakozzon. A parancsmag le van tiltva az információk felfedésének és a kód tetszőleges végrehajtásának megakadályozása érdekében.
PowerShell-korlátozások korlátozott nyelvi módban
Az Alkalmazásvezérlési szabályzat által nem jóváhagyott szkriptek vagy függvények nem megbízhatók. Nem megbízható parancs futtatásakor a PowerShell vagy letiltja a parancs futtatását (új viselkedés), vagy módban futtatja a parancsot ConstrainedLanguage . A módra a ConstrainedLanguage következő korlátozások vonatkoznak:
Add-Typea parancsmag nem engedélyezettA blokkolás
Add-Typemegakadályozza az tetszőleges .NET-kód végrehajtását.Import-LocalizedDatakorlátozott parancsmagA SupportedCommand paraméter
Import-LocalizedDataletiltása megakadályozza az tetszőleges kód végrehajtását.Invoke-Expressionkorlátozott parancsmagA parancsmagnak
Invoke-Expressionátadott összes szkriptblokk módban futConstrainedLanguage, hogy megakadályozza a kód tetszőleges végrehajtását.New-Objectkorlátozott parancsmagA
New-Objectparancsmag csak engedélyezett .NET- és COM-típusok használatára korlátozódik, hogy megakadályozza a nem megbízható típusokhoz való hozzáférést.ForEach-Objectparancsmag korlátozásaAzoknak a változóknak a típusmetódus-meghívása, amelyet a
ForeEach-Objectjóváhagyott listában nem szereplő .NET-típusok nem fogadnak el, a rendszer nem engedélyezi a típusmetódus meghívását. A mód általában letiltja az objektummetódusok meghívását,ConstrainedLanguagekivéve a jóváhagyott .NET-típusokat, hogy megakadályozzák a nem megbízható .NET-típusokhoz való hozzáférést.Export-ModuleMemberparancsmag korlátozásaHa parancsmaggal
Export-ModuleMemberexportál függvényeket egy beágyazott modulszkriptfájlba, amelyben a gyermekmodul nem megbízható, és a szülőmodul megbízható, hibaüzenetet eredményez. A forgatókönyv letiltása megakadályozza, hogy egy rosszindulatú, nem megbízható modul veszélyes függvényeket exportáljon egy megbízható modulból.New-Moduleparancsmag korlátozásaHa megbízható szkriptben fut
New-Module, aScriptBlockparaméter által biztosított szkriptblokkok úgy vannak megjelölve, hogy módban fussanakConstrainedLanguage, hogy megakadályozzák az tetszőleges kód injektálását egy megbízható végrehajtási környezetbe.Configurationa kulcsszó nem engedélyezettA
Configurationnyelvi kulcsszó nem engedélyezettConstrainedLanguagemódban a kódinjektálási támadások megakadályozása érdekében.classa kulcsszó nem engedélyezettA
classnyelvi kulcsszó nem engedélyezettConstrainedLanguagemódban, hogy megakadályozza az tetszőleges kód injektálását.Szkriptblokk feldolgozási hatókörének korlátozásai
A gyermekszkriptblokkok nem futtathatók szülőszkriptblokk-hatókörökben, ha a szkriptblokkok eltérő megbízhatósági szinttel rendelkeznek. Egy gyermekkapcsolatot például akkor hoz létre, ha egy szkriptet pontozza egy másikba. A forgatókönyv letiltása megakadályozza, hogy egy nem megbízható szkript hozzáférjen a megbízható szkript hatókörében lévő veszélyes függvényekhez.
Nem megbízható szkriptfüggvények parancsfelderítésének megakadályozása
A PowerShell-parancsfelderítés nem ad vissza függvényeket nem megbízható forrásból, például nem megbízható szkriptből vagy modulból egy megbízható függvénybe. A nem megbízható parancsok felderítésének blokkolása megakadályozza a kódinjektálást a parancstelepítésen keresztül.
A kivonatoló objektum konvertálása nem engedélyezett
ConstrainedLanguageA mód letiltja a kivonatolót a PowerShell-adatfájlok (Data) szakaszaiban lévő.psd1objektumkonverziókra, hogy megelőzze a kódinjektálási támadásokat.Automatikus típuskonvertálás korlátozott
ConstrainedLanguageA mód letiltja az automatikus típusátalakítást, kivéve egy kis jóváhagyott biztonságos típust, amely megakadályozza a kódinjektálási támadásokat.Implicit modulfüggvény exportálási korlátozása
Ha egy modul nem exportálja explicit módon a függvényeket, a PowerShell implicit módon automatikusan exportálja az összes definiált modulfüggvényt kényelmi funkcióként. Módban
ConstrainedLanguageaz implicit exportálások már nem fordulnak elő, ha egy modul betöltődik a megbízhatósági határokon. Az implicit exportálás blokkolása megakadályozza a nem nyilvános használatra szánt veszélyes modulfüggvények nem szándékos expozícióját.A szkriptfájlok nem importálhatók modulként
A PowerShell lehetővé teszi szkriptfájlok (
.ps1) modulként való importálását. Minden definiált függvény nyilvánosan elérhetővé válik.ConstrainedLanguagea mód letiltja a szkriptfájl importálását, hogy megakadályozza a veszélyes szkriptfüggvények nem szándékos expozícióját.Változók korlátozásának
AllScopebeállításaConstrainedLanguagemód letiltja a változók beállításánakAllScopelehetőségét. A változók hatókörének korlátozása megakadályozza, hogy a változók megzavarják a megbízható parancsok munkamenet-állapotát.A típusmetódus meghívása nem engedélyezett
ConstrainedLanguagea mód nem engedélyezi a metódushívást a nem jóváhagyott típusok esetében. A nem jóváhagyott típusok blokkolási módszerei megakadályozzák a .NET típusú metódusok meghívását, amelyek veszélyesek lehetnek, vagy kódinjektálást engedélyeznek.Nem engedélyezett típustulajdonság-beállítók
ConstrainedLanguageA mód korlátozza a tulajdonsághalmazok meghívását a nem jóváhagyott típusok esetében. A nem jóváhagyott típusok tulajdonsághalmazainak blokkolása megakadályozza a kódinjektálási támadásokat.A típus létrehozása nem engedélyezett
ConstrainedLanguageA mód letiltja a nem jóváhagyott típusok típuslétrehozását, így blokkolhatja a nem megbízható konstruktorokat, amelyek lehetővé tehetik a kódinjektálását.A modul hatókörének operátora nem engedélyezett
ConstrainedLanguageüzemmód nem teszi lehetővé a modul hatókör-operátorának használatát. Például:& (Get-Module MyModule) MyFunctionA modul hatókör-operátorának letiltása megakadályozza a modul privát függvényeihez és változóihoz való hozzáférést.
További olvasnivalók
- A PowerShell nyelvi módokkal kapcsolatos további információkért lásd: about_Language_Modes.
- Az App Control konfigurálásáról és használatáról a PowerShell-hez készült App Control használata című témakörben olvashat.