Aracılığıyla paylaş


PowerShell'in güvenliğini sağlamak için Uygulama Denetimi'ni kullanma

Bu makalede, İş İçin Uygulama Denetimi ilkesinin nasıl ayarlanacağı açıklanmaktadır. İlkeyi, ilkenin kuralını zorunlu kılacak veya denetleyecek şekilde yapılandırabilirsiniz. Denetim modunda PowerShell davranışı değişmez ancak Olay Kimliği 16387 iletilerini PowerShellCore/Analytic olay günlüğüne kaydeder. PowerShell, zorlama modunda ilkenin kısıtlamalarını uygular.

Bu makalede, ilkeyi ortamınıza dağıtmadan önce makine genelinde bir Uygulama Denetimi ilkesi altında PowerShell davranışını test edebilmeniz için bir test makinesi kullandığınız varsayılır.

Uygulama Denetimi ilkesi oluşturma

Uygulama Denetimi ilkesi, ilke seçenekleri, izin verilen dosyalar ve ilke tarafından tanınan imzalama sertifikaları hakkında bilgi içeren bir XML dosyasında açıklanmıştır. İlke uygulandığında yalnızca onaylanan dosyaların yüklenmesine ve çalıştırılmasına izin verilir. PowerShell, onaylanmamış betik dosyalarının çalıştırılmasını engeller veya ilke seçeneklerine bağlı olarak bu dosyaları modda ConstrainedLanguage çalıştırır.

Uygulama Denetimi ilkesini, desteklenen tüm Windows sürümlerinde kullanılabilen ConfigCI modülünü kullanarak oluşturur ve işleyebilirsiniz. Bu Windows PowerShell modülü, Windows PowerShell 5.1'de veya Windows Uyumluluk katmanı aracılığıyla PowerShell 7'de kullanılabilir. Bu modülü Windows PowerShell'de kullanmak daha kolaydır. Oluşturduğunuz ilke, PowerShell'in herhangi bir sürümüne uygulanabilir.

Uygulama Denetimi ilkesi oluşturma adımları

Test etmek için bir varsayılan ilke ve otomatik olarak imzalanan bir kod imzalama sertifikası oluşturmanız yeterlidir.

  1. Varsayılan ilke oluşturma

    New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
    

    Bu komut, tüm Microsoft kodla imzalanan dosyaların çalıştırılmasına izin veren adlı SystemCIPolicy.xml bir varsayılan ilke dosyası oluşturur.

    Not

    Test makinesinin tamamını taraması gerektiğinden bu komutun çalıştırılması iki saate kadar sürebilir.

  2. Varsayılan ilkede Denetim Modu'nu devre dışı bırakma

    Yeni bir ilke her zaman Audit modunda oluşturulur. İlke zorlamasını test etmek için, ilkeyi uygularken Denetim modunu devre dışı bırakmanız gerekir. SystemCIPolicy.xml veya Visual Studio Code (VS Code) gibi notepad.exe bir metin düzenleyicisi kullanarak dosyayı düzenleyin. "Audit mode" seçeneğini yorum satırı haline getirin.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Kendinden imzalı kod imzalama sertifikası oluşturma

    Test makinenizde çalıştırmak istediğiniz test ikili dosyalarını veya betik dosyalarını imzalamak için bir kod imzalama sertifikasına ihtiyacınız vardır. New-SelfSignedCertificate, PKI modülü tarafından sağlanır. En iyi sonuçlar için bu komutu Windows PowerShell 5.1'de çalıştırmanız gerekir.

    $newSelfSignedCertificateSplat = @{
        DnsName = $Env:COMPUTERNAME
        CertStoreLocation = "Cert:\CurrentUser\My\"
        Type = 'CodeSigningCert'
    }
    $cert = New-SelfSignedCertificate @newSelfSignedCertificateSplat
    Export-Certificate -Cert $cert -FilePath C:\certs\signing.cer
    Import-Certificate -FilePath C:\certs\signing.cer -CertStoreLocation "Cert:\CurrentUser\Root\"
    $cert = Get-ChildItem Cert:\CurrentUser\My\ -CodeSigningCert
    
    dir C:\bin\PowerShell\pwsh.exe | Set-AuthenticodeSignature -Certificate $cert
    
  4. kod imzalama sertifikasını ilkeye ekleme

    İlkeye yeni kod imzalama sertifikasını eklemek için aşağıdaki komutu kullanın.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath C:\certs\signing.cer -User
    
  5. XML politika dosyasını politika uygulama ikili dosyasına dönüştürme

    Son olarak, XML dosyasını bir ilke uygulamak için Uygulama Denetimi tarafından kullanılan ikili dosyaya dönüştürmeniz gerekir.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Uygulama Denetimi ilkesini uygulama

    İlkeyi test makinenize uygulamak için, dosyayı gerekli sistem konumuna kopyalayın SIPolicy.p7bC:\Windows\System32\CodeIntegrity.

    Not

    Bazı ilke tanımı gibi C:\Windows\System32\CodeIntegrity\CiPoliciesbir alt klasöre kopyalanmalıdır. Daha fazla bilgi için bkz . Uygulama Denetimi Yönetici İpuçları ve Bilinen Sorunlar.

  7. Uygulama Denetimi ilkesini devre dışı bırakma

    İlkeyi devre dışı bırakmak için dosyayı yeniden adlandırın SIPolicy.p7b . Daha fazla test yapmanız gerekiyorsa, ilkeyi yeniden etkinleştirmek için adı yeniden değiştirebilirsiniz.

    Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
    

Uygulama Denetimi ilkesi denetimini kullanarak test etme

PowerShell 7.4, Denetim modunda Uygulama Denetimi ilkelerini desteklemek için yeni bir özellik ekledi. Denetim modunda PowerShell güvenilmeyen betikleri ConstrainedLanguage modda hatasız çalıştırır, ancak bunun yerine iletileri olay günlüğüne kaydeder. Günlük iletileri, ilke Zorla modundaysa hangi kısıtlamaların uygulanacağını açıklar.

Denetim olaylarını görüntüleme

PowerShell denetim olaylarını PowerShellCore/Analytic olay günlüğüne kaydeder. Kayıt varsayılan olarak etkinleştirilmemiştir. Günlüğü etkinleştirmek için Windows Olay Görüntüleyicisi açın, PowerShellCore/Analytic günlüğüne sağ tıklayın ve Günlüğü Etkinleştir'i seçin.

Alternatif olarak, yükseltilmiş bir PowerShell oturumundan aşağıdaki komutu çalıştırabilirsiniz.

wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet

Windows Olay Görüntüleyicisi olayları görüntüleyebilir veya cmdlet'ini Get-WinEvent kullanarak olayları alabilirsiniz.

Get-WinEvent -LogName PowerShellCore/Analytic -Oldest |
    Where-Object Id -EQ 16387 | Format-List
TimeCreated  : 4/19/2023 10:11:07 AM
ProviderName : PowerShellCore
Id           : 16387
Message      : App Control Audit.

    Title: Method or Property Invocation
    Message: Method or Property 'WriteLine' on type 'System.Console' invocation will not
        be allowed in ConstrainedLanguage mode.
        At C:\scripts\Test1.ps1:3 char:1
        + [System.Console]::WriteLine("pwnd!")
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    FullyQualifiedId: MethodOrPropertyInvocationNotAllowed

Olay iletisi, kısıtlamanın uygulanacağı betik konumunu içerir. Bu bilgiler, betiğinizi Uygulama Denetimi ilkesi altında çalıştırmak için değişiklik yapmanız gereken alanları anlamanıza yardımcı olur.

Önemli

Denetim olaylarını gözden geçirdikten sonra Analiz günlüğünü devre dışı bırakmanız gerekir. Analiz günlükleri hızla büyür ve büyük miktarda disk alanı kullanır.

PowerShell hata ayıklayıcısında denetim olaylarını görüntüleme

Değişkeni $DebugPreference etkileşimli bir PowerShell oturumu için Break olarak ayarlarsanız, PowerShell, denetim olayının meydana geldiği betikteki mevcut konumda komut satırı betik hata ayıklayıcısına girer. Kesme noktası, kodunuzun hatalarını ayıklamanıza ve betiğin geçerli durumunu gerçek zamanlı olarak incelemenize olanak tanır.