Bagikan melalui


Cara menggunakan App Control untuk mengamankan PowerShell

Artikel ini menjelaskan cara menyiapkan kebijakan App Control for Business . Anda dapat mengonfigurasi kebijakan untuk memberlakukan atau mengaudit aturan kebijakan. Dalam mode audit, perilaku PowerShell tidak berubah tetapi mencatat pesan EVENT ID 16387 ke PowerShellCore/Analytic log peristiwa. Dalam mode penerapan, PowerShell menerapkan pembatasan kebijakan.

Artikel ini mengasumsikan Anda menggunakan mesin uji sehingga Anda dapat menguji perilaku PowerShell di bawah kebijakan Kontrol Aplikasi di seluruh mesin sebelum Anda menyebarkan kebijakan di lingkungan Anda.

Membuat kebijakan Kontrol Aplikasi

Kebijakan Kontrol Aplikasi dijelaskan dalam file XML, yang berisi informasi tentang opsi kebijakan, file yang diizinkan, dan sertifikat penandatanganan yang dikenali oleh kebijakan. Ketika kebijakan diterapkan, hanya file yang disetujui yang diizinkan untuk memuat dan menjalankan. PowerShell memblokir file skrip yang tidak disetujui agar tidak berjalan atau menjalankannya dalam ConstrainedLanguage mode, tergantung pada opsi kebijakan.

Anda membuat dan memanipulasi kebijakan App Control menggunakan modul ConfigCI , yang tersedia di semua versi Windows yang didukung. Modul Windows PowerShell ini dapat digunakan di Windows PowerShell 5.1 atau di PowerShell 7 melalui lapisan Kompatibilitas Windows. Lebih mudah menggunakan modul ini di Windows PowerShell. Kebijakan yang Anda buat dapat diterapkan ke versi PowerShell apa pun.

Langkah-langkah untuk membuat kebijakan Kontrol Aplikasi

Untuk pengujian, Anda hanya perlu membuat kebijakan default dan sertifikat penandatanganan kode yang ditandatangani sendiri.

  1. Membuat kebijakan default

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

    Perintah ini membuat file kebijakan default yang disebut SystemCIPolicy.xml yang memungkinkan semua file bertanda tangan kode Microsoft berjalan.

    Catatan

    Menjalankan perintah ini dapat memakan waktu hingga dua jam karena harus memindai seluruh mesin uji.

  2. Nonaktifkan Mode Audit dalam kebijakan default

    Kebijakan baru selalu dibuat dalam Audit mode. Untuk menguji penegakan kebijakan, Anda perlu menonaktifkan mode Audit saat menerapkan kebijakan. SystemCIPolicy.xml Edit file menggunakan editor teks seperti notepad.exe atau Visual Studio Code (VISUAL Code). Komentari Audit mode opsi .

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Membuat sertifikat penandatanganan kode yang ditandatangani sendiri

    Anda memerlukan sertifikat penandatanganan kode untuk menandatangani biner pengujian atau file skrip apa pun yang ingin Anda jalankan di mesin uji Anda. New-SelfSignedCertificate disediakan oleh modul PKI. Untuk hasil terbaik, Anda harus menjalankan perintah ini di Windows PowerShell 5.1.

    $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. Menambahkan sertifikat penandatanganan kode ke kebijakan

    Gunakan perintah berikut untuk menambahkan sertifikat penandatanganan kode baru ke kebijakan.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
    
  5. Mengonversi file kebijakan XML menjadi file biner penegakan kebijakan

    Terakhir, Anda perlu mengonversi file XML ke file biner yang digunakan oleh App Control untuk menerapkan kebijakan.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Menerapkan kebijakan Kontrol Aplikasi

    Untuk menerapkan kebijakan ke mesin uji Anda, salin SIPolicy.p7b file ke lokasi sistem yang diperlukan, C:\Windows\System32\CodeIntegrity.

    Catatan

    Beberapa definisi kebijakan harus disalin ke subfolder seperti C:\Windows\System32\CodeIntegrity\CiPolicies. Untuk informasi selengkapnya, lihat Tips Admin Kontrol Aplikasi & Masalah umum.

  7. Menonaktifkan kebijakan Kontrol Aplikasi

    Untuk menonaktifkan kebijakan, ganti nama SIPolicy.p7b file. Jika Anda perlu melakukan lebih banyak pengujian, Anda dapat mengubah nama kembali untuk mengaktifkan kembali kebijakan.

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

Menguji menggunakan audit kebijakan App Control

PowerShell 7.4 menambahkan fitur baru untuk mendukung kebijakan Kontrol Aplikasi dalam mode Audit . Dalam mode audit, PowerShell menjalankan skrip yang tidak tepercaya dalam ConstrainedLanguage mode tanpa kesalahan, tetapi mencatat pesan ke log peristiwa sebagai gantinya. Pesan log menjelaskan batasan apa yang akan berlaku jika kebijakan berada dalam mode Terapkan .

Menampilkan peristiwa audit

Log PowerShell mengaudit peristiwa ke log peristiwa PowerShellCore/Analytic . Log tidak diaktifkan secara default. Untuk mengaktifkan log, buka Pemantau Peristiwa Windows, klik kanan pada log PowerShellCore/Analytic dan pilih Aktifkan Log.

Atau, Anda dapat menjalankan perintah berikut dari sesi PowerShell yang ditingkatkan.

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

Anda dapat melihat peristiwa di Windows Pemantau Peristiwa atau menggunakan Get-WinEvent cmdlet untuk mengambil peristiwa.

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

Pesan peristiwa menyertakan posisi skrip tempat pembatasan akan diterapkan. Informasi ini membantu Anda memahami di mana Anda perlu mengubah skrip sehingga berjalan di bawah kebijakan Kontrol Aplikasi.

Penting

Setelah meninjau peristiwa audit, Anda harus menonaktifkan log Analitik. Log analitik tumbuh dengan cepat dan mengonsumsi ruang disk dalam jumlah besar.

Menampilkan peristiwa audit di debugger PowerShell

Jika Anda mengatur $DebugPreference variabel ke Break untuk sesi PowerShell interaktif, PowerShell memecah ke debugger skrip baris perintah di lokasi saat ini di skrip tempat peristiwa audit terjadi. Titik henti memungkinkan Anda untuk men-debug kode Anda dan memeriksa status skrip saat ini secara real time.