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.
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.
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 sepertinotepad.exe
atau Visual Studio Code (VISUAL Code). KomentariAudit mode
opsi .<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
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
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
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
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.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.