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


Az Alkalmazásvezérlés működése a PowerShell-lel

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_ALLOWED
  • WLDP_CAN_EXECUTE_BLOCKED
  • WLDP_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át FullLanguage mó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ő ConstrainedLanguage mó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öltve FullLanguage fut.
  • Audit: A fájl korlátozás nélkül fut vagy töltődik be FullLanguage mó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ése ConstrainedLanguage mó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 futnak FullLanguage . 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ók ConstrainedLanguage módban.

    Ebben a példában ConstrainedLanguage a paraméterkötés típusának konvertálása általában engedélyezett, de módban való futtatáskor meghiúsul. A ConnectionPort tí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-PSHostProcess a parancsmag nem engedélyezett

    A Enter-PSHostProcess parancsmag 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-Type a parancsmag nem engedélyezett

    A blokkolás Add-Type megakadályozza az tetszőleges .NET-kód végrehajtását.

  • Import-LocalizedData korlátozott parancsmag

    A SupportedCommand paraméter Import-LocalizedData letiltása megakadályozza az tetszőleges kód végrehajtását.

  • Invoke-Expression korlátozott parancsmag

    A parancsmagnak Invoke-Expression átadott összes szkriptblokk módban fut ConstrainedLanguage , hogy megakadályozza a kód tetszőleges végrehajtását.

  • New-Object korlátozott parancsmag

    A New-Object parancsmag 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-Object parancsmag korlátozása

    Azoknak a változóknak a típusmetódus-meghívása, amelyet a ForeEach-Object jó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, ConstrainedLanguage kivé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-ModuleMember parancsmag korlátozása

    Ha parancsmaggal Export-ModuleMember exportá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-Module parancsmag korlátozása

    Ha megbízható szkriptben fut New-Module , a ScriptBlock paraméter által biztosított szkriptblokkok úgy vannak megjelölve, hogy módban fussanak ConstrainedLanguage , hogy megakadályozzák az tetszőleges kód injektálását egy megbízható végrehajtási környezetbe.

  • Configuration a kulcsszó nem engedélyezett

    A Configuration nyelvi kulcsszó nem engedélyezett ConstrainedLanguage módban a kódinjektálási támadások megakadályozása érdekében.

  • class a kulcsszó nem engedélyezett

    A class nyelvi kulcsszó nem engedélyezett ConstrainedLanguage mó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ő .psd1 objektumkonverziókra, hogy megelőzze a kódinjektálási támadásokat.

  • Automatikus típuskonvertálás korlátozott

    ConstrainedLanguage A 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 ConstrainedLanguage az 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. ConstrainedLanguage a 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 AllScope beállítása

    ConstrainedLanguage mód letiltja a változók beállításának AllScope lehető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

    ConstrainedLanguage a 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

    ConstrainedLanguage A 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

    ConstrainedLanguage A 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) MyFunction A 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