Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, İş için Uygulama Denetimi'nin PowerShell'i nasıl güvenli bir şekilde güvence altına alır ve uyguladığı kısıtlamalar açıklanmaktadır. PowerShell'in güvenli davranışı, kullandığınız Windows ve PowerShell sürümüne göre değişir.
PowerShell sistem kilitleme ilkesini nasıl algılar?
PowerShell, hem AppLocker hem de İş için Uygulama Denetimi sistem genelinde ilkeleri algılar. AppLocker kullanım dışı bırakıldı. Uygulama Denetimi, Windows için tercih edilen uygulama denetim sistemidir.
Eski Uygulama Denetimi ilkesi zorlama algılama
PowerShell, iki şeyi keşfetmek için eski Uygulama Denetimi WldpGetLockdownPolicy API'sini kullanır:
- Sistem genelinde ilke zorlama:
None,Audit,Enforce - Tek tek dosya ilkesi:
None,Audit(ilke tarafından izin verilir),Enforce(ilke tarafından izin verilmez)
Tüm PowerShell sürümleri (v5.1 - v7.x) bu Uygulama Denetimi ilkesi algılamasını destekler.
En son Uygulama Denetimi ilkesi zorlama algılama
Uygulama Denetimi, Windows'un son sürümlerinde yeni API'ler kullanıma sunulmuştur. PowerShell, 7.3 sürümünden başlayarak dosyanın nasıl işleneceğini belirlemek için yeni WldpCanExecuteFile API'yi kullanır. Windows PowerShell 5.1 bu yeni API'leri desteklemez. Yeni API, tek tek dosyalar için eski API'den önceliklidir.
Ancak PowerShell, sistem genelinde ilke yapılandırmasını almak için eski API'yi kullanmaya devam eder. Yeni API kullanılamıyorsa PowerShell eski API davranışına geri döner.
Yeni API her dosya için aşağıdaki bilgileri sağlar:
WLDP_CAN_EXECUTE_ALLOWEDWLDP_CAN_EXECUTE_BLOCKEDWLDP_CAN_EXECUTE_REQUIRE_SANDBOX
Kilitleme ilkesi altında PowerShell davranışı
PowerShell hem etkileşimli hem de etkileşimli olmayan modlarda çalıştırılabilir.
- Etkileşimli modda PowerShell, kullanıcıların komut satırı girişini komut veya betik olarak çalıştıracak şekilde alan bir komut satırı uygulamasıdır. Sonuçlar kullanıcıya geri görüntülenir.
- Etkileşimli olmayan modda PowerShell modülleri yükler ve betik dosyalarını kullanıcı girişi olmadan çalıştırır. Sonuç veri akışları yoksayılır veya bir dosyaya yönlendirilir.
İlke zorlaması altında çalışan etkileşimli mod
PowerShell komutları modda ConstrainedLanguage çalıştırır. Bu mod, etkileşimli kullanıcıların belirli komutları çalıştırmasını veya rastgele kod yürütmesini engeller. Bu moddaki kısıtlamalar hakkında daha fazla bilgi için bu makalenin kilitleme ilkesi altındaki PowerShell kısıtlamaları bölümüne bakın.
İlke zorlaması altında çalıştırılan etkileşimsiz mod
PowerShell bir betik çalıştırdığında veya bir modül yüklediğinde, dosyanın ilke zorlamasını almak için Uygulama Denetimi API'sini kullanır.
PowerShell sürüm 7.3 veya üzeri varsa API'yi WldpCanExecuteFile kullanır. Bu API aşağıdaki sonuçlardan birini döndürür:
-
WLDP_CAN_EXECUTE_ALLOWED: Dosya ilke tarafından onaylanır ve birkaç kısıtlamayla modda kullanılırFullLanguage. -
WLDP_CAN_EXECUTE_BLOCKED: Dosya ilke tarafından onaylanmamıştır. PowerShell, dosya çalıştırıldığında veya yüklendiğinde bir hata oluşturur. -
WLDP_CAN_EXECUTE_REQUIRE_SANDBOX: Dosya ilke tarafından onaylanmamıştır, ancak yine deConstrainedLanguagemodda çalıştırılabilir veya yüklenebilir.
Windows PowerShell 5.1'de veya API kullanılamıyorsa WldpCanExecuteFile PowerShell'in dosya başına davranışı şöyledir:
-
None: Dosya birkaç kısıtlamayla modda yüklenirkenFullLanguageçalıştırılır. -
Audit: Dosya çalıştırılır veya hiçbir kısıtlama olmadan moddaFullLanguageyüklenir. PowerShell 7.4 veya sonraki sürümlerde ilke, kısıtlama bilgilerini Windows olay günlüklerine kaydeder. -
Enforce: Dosya çalıştırılır veya moddaConstrainedLanguageyüklenir.
Kilitleme ilkesi kapsamındaki PowerShell kısıtlamaları
PowerShell sistemin Bir Uygulama Denetimi kilitleme ilkesi altında olduğunu algıladığında, betik güvenilir ve modda FullLanguage çalışıyor olsa bile kısıtlamalar uygular. Bu kısıtlamalar, PowerShell'in kilitli bir sistemde rastgele kod yürütülmesine neden olabilecek bilinen davranışlarını engeller. Kilitleme ilkesi aşağıdaki kısıtlamaları uygular:
Joker karakterli işlev dışarı aktarma kısıtlaması ile noktalı kaynak oluşturma modülü
Betik nokta kaynağını kullanan ve joker karakter adlarını kullanarak işlevleri dışarı aktaran tüm modüller hatayla sonuçlanır. Joker karakter dışarı aktarmalarının engellenmesi, güvenilir bir modüle nokta kaynaklı olan güvenilmeyen bir betik yerleştirebilen kötü amaçlı bir kullanıcıdan betik eklenmesini önler. Daha sonra kötü amaçlı betik, güvenilen modülün özel işlevlerine erişim sağlayabilir.
Güvenlik önerisi: Bir modülde hiçbir zaman betik nokta kaynağını kullanmayın ve modül işlevlerini her zaman açık adlarla (joker karakter olmadan) dışarı aktarın.
Joker karakter işlev dışarı aktarma kısıtlaması ile iç içe modül
Üst modül işlev adı joker karakterlerini kullanarak işlevleri dışarı aktarırsa PowerShell, iç içe yerleştirilmiş modüldeki işlev adlarını işlev dışarı aktarma listesinden kaldırır. İç içe modüllerden joker karakter dışarı aktarmanın engellenmesi, joker karakter adı eşleştirme yoluyla tehlikeli iç içe geçmiş işlevlerin yanlışlıkla dışarı aktarılmasını önler.
Güvenlik önerisi: Modül işlevlerini her zaman açık adlarla (joker karakter olmadan) dışarı aktarın.
Etkileşimli kabuk parametre türü dönüştürme
Sistem kilitlendiğinde, etkileşimli PowerShell oturumları rastgele kod yürütülmesini önlemek için modda
ConstrainedLanguageçalışır. Oturuma yüklenen güvenilir modüller moddaFullLanguageçalışır. Güvenilen modül cmdlet'i parametreleri için karmaşık türler kullanıyorsa, güven sınırları boyunca dönüştürmeye izin verilmiyorsa parametre bağlaması sırasında tür dönüştürme başarısız olabilir. Hata, PowerShell bir tür oluşturucu çalıştırarak bir değeri dönüştürmeye çalıştığında oluşur. Tür oluşturucularının moddaConstrainedLanguageçalışmasına izin verilmez.Bu örnekte, parametre bağlama türü dönüştürmeye normalde izin verilir, ancak modda
ConstrainedLanguageçalıştırıldığında başarısız olur. TürConnectionPortoluşturucuya izin verilmez:PS> Create-ConnectionOnPort -Connection 22 Create-ConnectionOnPort: Cannot bind parameter 'Connection'. Cannot convert the "22" value of type "System.Int32" to type "ConnectionPort".Enter-PSHostProcesscmdlet'e izin verilmiyorEnter-PSHostProcessCmdlet devre dışı bırakılır ve kullanılırsa bir hata oluşturur. Bu komut ekleme ve hata ayıklama oturumları için kullanılır. Yerel makinedeki diğer Tüm PowerShell oturumlarına bağlanmanızı sağlar. Bilgilerin açığa çıkmasını ve rastgele kod yürütülmesini önlemek için cmdlet devre dışı bırakılır.
Kısıtlanmış dil modu altında PowerShell kısıtlamaları
Uygulama Denetimi ilkesi tarafından onaylanmayan betik veya işlev güvenilmez. Güvenilmeyen bir komut çalıştırdığınızda, PowerShell komutun çalışmasını engeller (yeni davranış) veya komutu modda ConstrainedLanguage çalıştırır. Mod için ConstrainedLanguage aşağıdaki kısıtlamalar geçerlidir:
Add-Typecmdlet'e izin verilmiyorEngelleme
Add-Type, rastgele .NET kodunun yürütülmesini engeller.Import-LocalizedDatacmdlet kısıtlandıöğesinin SupportedCommand parametresinin
Import-LocalizedDataengellenmesi, rastgele kodun yürütülmesini engeller.Invoke-Expressioncmdlet kısıtlandıCmdlet'e
Invoke-Expressiongeçirilen tüm betik blokları, rastgele kod yürütülmesini önlemek için moddaConstrainedLanguageçalıştırılır.New-Objectcmdlet kısıtlandıNew-ObjectCmdlet, güvenilmeyen türlere erişimi önlemek için yalnızca izin verilen .NET ve COM türlerini kullanmakla sınırlıdır.ForEach-Objectcmdlet kısıtlamasıöğesine geçirilen değişkenler için tür yöntemi çağırmasına
ForeEach-Object, onaylanan listede olmayan herhangi bir .NET türü için izin verilmez. Genel olarak, mod güvenilmeyenConstrainedLanguage.NET türlerine erişimi önlemek için onaylı .NET türleri dışında herhangi bir nesne yöntemi çağırmasına izin vermiyor.Export-ModuleMembercmdlet kısıtlamasıAlt modüle güvenilmeyen ve üst modülün güvenilir olduğu iç içe modül betik dosyasındaki işlevleri dışarı aktarmak için cmdlet'in kullanılması
Export-ModuleMemberhataya neden olur. Bu senaryo engellenirken, kötü amaçlı güvenilmeyen bir modülün tehlikeli işlevleri güvenilen bir modülden dışarı aktarması engellenir.New-Modulecmdlet kısıtlamasıGüvenilen bir betikte çalıştırdığınızda
New-Module, parametre tarafından sağlanan tüm betik blokları, rastgele kodunScriptBlockgüvenilen yürütme bağlamı içine eklenmesini önlemek için moddaConstrainedLanguageçalışacak şekilde işaretlenir.Configurationanahtar sözcüğüne izin verilmiyorConfigurationKod ekleme saldırılarını önlemek için language anahtar sözcüğüne moddaConstrainedLanguageizin verilmez.classanahtar sözcüğüne izin verilmiyorclassİsteğe bağlı kod eklenmesini önlemek için language anahtar sözcüğüne modda izin verilmezConstrainedLanguage.Betik Bloğu işleme kapsamı kısıtlamaları
Betik blokları farklı güven düzeylerine sahipse alt betik bloklarının üst betik bloğu kapsamlarında çalıştırılmasına izin verilmez. Örneğin, bir betiği diğerine noktalı kaynak olarak eklediğinizde bir alt ilişki oluşturursunuz. Bu senaryonun engellenmesi, güvenilmeyen bir betiğin güvenilen betik kapsamındaki tehlikeli işlevlere erişmesini engeller.
Güvenilmeyen betik işlevlerinin komut bulmayı engelleme
PowerShell komut bulma, güvenilmeyen betik veya modül gibi güvenilmeyen bir kaynaktan güvenilen bir işleve işlev döndürmez. Güvenilmeyen komutların bulunmasını engellemek, komut ekleme yoluyla kod eklenmesini önler.
Hashtable'da nesne dönüştürmeye izin verilmiyor
ConstrainedLanguagemodu, olası kod ekleme saldırılarınıDataönlemek için PowerShell veri (.psd1) dosyalarının bölümlerinde hashtable'ı nesne dönüştürmelerine engeller.Otomatik tür dönüştürme kısıtlandı
ConstrainedLanguagemodu, olası kod ekleme saldırılarını önlemek için küçük bir onaylanan güvenli türler kümesi dışında otomatik tür dönüştürmeyi engeller.Örtük modül işlevi dışarı aktarma kısıtlaması
Bir modül işlevleri açıkça dışarı aktarmazsa, PowerShell tüm tanımlı modül işlevlerini otomatik olarak bir kolaylık özelliği olarak örtük olarak dışarı aktarır. Modunda
ConstrainedLanguage, bir modül güven sınırları boyunca yüklendiğinde örtük dışarı aktarmalar artık gerçekleşmez. Örtük dışarı aktarmaların engellenmesi, genel kullanıma yönelik olmayan tehlikeli modül işlevlerinin istenmeyen şekilde açığa çıkmasını önler.Betik dosyaları modül olarak içeri aktarılamaz
PowerShell, betik dosyalarını (
.ps1) modül olarak içeri aktarmanızı sağlar. Tüm tanımlı işlevler genel olarak erişilebilir hale gelir.ConstrainedLanguagemodu, tehlikeli betik işlevlerinin istenmeyen şekilde açığa çıkmasını önlemek için betik dosyasının içeri aktarılmasını engeller.Değişken kısıtlaması
AllScopeayarlamaConstrainedLanguagemodu, değişkenler üzerinde ayarlamaAllScopeözelliğini devre dışı bırakır. Değişkenlerin kapsamını sınırlamak, değişkenlerin güvenilen komutların oturum durumunu engellemesini önler.Tür yöntemi çağırmaya izin verilmiyor
ConstrainedLanguagemodu, onaylanmamış türlerde yöntem çağrısına izin vermez. Onaylanmamış türlerdeki engelleme yöntemleri, tehlikeli olabilecek .NET türü yöntemlerinin çağrılmasını engeller veya kod eklemeye izin verir.Tür özelliği ayarlayıcılarına izin verilmiyor
ConstrainedLanguagemodu, onaylanmamış türlerde özellik ayarlayıcılarının çağrılmalarını kısıtlar. Onaylanmamış türlerde özellik ayarlayıcılarının engellenmesi, kod ekleme saldırılarını önler.Tür oluşturmaya izin verilmiyor
ConstrainedLanguagemod, kod eklemeye izin verebilecek güvenilmeyen oluşturucuları engellemek için onaylanmamış türlerde tür oluşturmayı engeller.Modül kapsamı işlecine izin verilmiyor
ConstrainedLanguagemodu modül kapsamı işlecinin kullanılmasına izin vermez. Örneğin:& (Get-Module MyModule) MyFunction. Modül kapsamı işlecini engellemek, modül özel işlevlerine ve değişkenlerine erişimi engeller.
Daha fazla bilgi
- PowerShell dil modları hakkında daha fazla bilgi için bkz . about_Language_Modes.
- Uygulama Denetimi'ni yapılandırma ve kullanma hakkında bilgi için bkz . PowerShell için Uygulama Denetimi'ni kullanma.
PowerShell