Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób konfigurowania zasad kontroli aplikacji dla firm . Zasady można skonfigurować tak, aby wymuszały lub kontrolowały przestrzeganie reguły zasad. W trybie inspekcji zachowanie programu PowerShell nie zmienia się, ale rejestruje komunikaty o identyfikatorze zdarzenia 16387 w dzienniku zdarzeń PowerShellCore/Analytic . W trybie wymuszania program PowerShell stosuje ograniczenia zasad.
W tym artykule założono, że używasz maszyny testowej, aby można było przetestować zachowanie programu PowerShell w ramach zasad kontroli aplikacji dla całej maszyny przed wdrożeniem zasad w środowisku.
Tworzenie zasad kontroli aplikacji
Zasady kontroli aplikacji są opisane w pliku XML, który zawiera informacje o opcjach zasad, plikach dozwolonych i certyfikatach podpisywania rozpoznawanych przez zasady. Po zastosowaniu polityki, tylko zatwierdzone pliki mogą być ładowane i uruchamiane. Program PowerShell blokuje uruchamianie niezatwierdzonych plików skryptów lub uruchamianie ich w ConstrainedLanguage trybie w zależności od opcji zasad.
Zasady kontroli aplikacji można tworzyć i manipulować nimi przy użyciu modułu ConfigCI , który jest dostępny we wszystkich obsługiwanych wersjach systemu Windows. Ten moduł programu Windows PowerShell może być używany w programie Windows PowerShell 5.1 lub w programie PowerShell 7 za pośrednictwem warstwy zgodności systemu Windows. Łatwiej jest używać tego modułu w programie Windows PowerShell. Utworzone zasady można zastosować do dowolnej wersji programu PowerShell.
Kroki tworzenia zasad kontroli aplikacji
Do testowania wystarczy utworzyć domyślne zasady i certyfikat podpisywania kodu z podpisem własnym.
Tworzenie zasad domyślnych
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEsTo polecenie tworzy domyślny plik zasad o nazwie
SystemCIPolicy.xml, który umożliwia uruchamianie wszystkich plików podpisanych kodem firmy Microsoft.Uwaga
Uruchomienie tego polecenia może potrwać do dwóch godzin, ponieważ musi skanować całą maszynę testowa.
Wyłącz tryb inspekcji w zasadach domyślnych
Nowa polityka jest zawsze tworzona w trybie
Audit. Aby przetestować wymuszanie zasad, należy wyłączyć tryb inspekcji podczas stosowania zasad.SystemCIPolicy.xmlEdytuj plik przy użyciu edytora tekstów, takiego jaknotepad.exelub Visual Studio Code (VS Code). Zakomentuj opcjęAudit mode.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->Utwórz samopodpisany certyfikat podpisywania kodu
Potrzebujesz certyfikatu podpisywania kodu, aby podpisać wszystkie testowe pliki binarne lub pliki skryptów, które chcesz uruchomić na maszynie testowej. Element
New-SelfSignedCertificatejest dostarczany przez moduł PKI . Aby uzyskać najlepsze wyniki, należy uruchomić to polecenie w programie 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 $certDodawanie certyfikatu podpisywania kodu do zasad
Użyj następującego polecenia, aby dodać nowy certyfikat podpisywania kodu do polityki.
Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath C:\certs\signing.cer -UserPrzekształć plik zasad XML na plik binarny do egzekwowania zasad
Na koniec należy przekonwertować plik XML na plik binarny używany przez kontrolkę aplikacji, aby zastosować zasady.
ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7bStosowanie zasad kontroli aplikacji
Aby zastosować zasady do maszyny testowej, skopiuj
SIPolicy.p7bplik do wymaganej lokalizacji systemowej,C:\Windows\System32\CodeIntegrity.Uwaga
Niektóre definicje zasad należy skopiować do podfolderu, takiego jak
C:\Windows\System32\CodeIntegrity\CiPolicies. Aby uzyskać więcej informacji, zobacz Porady administratora kontroli aplikacji i znane problemy.Wyłączanie zasad kontroli aplikacji
Aby wyłączyć zasady, zmień nazwę
SIPolicy.p7bpliku. Jeśli musisz wykonać więcej testów, możesz zmienić nazwę z powrotem, aby ponownie włączyć zasady.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
Testowanie przy użyciu inspekcji zasad kontroli aplikacji
Program PowerShell 7.4 dodał nową funkcję do obsługi zasad kontroli aplikacji w trybie inspekcji . W trybie inspekcji program PowerShell uruchamia niezaufane skrypty w ConstrainedLanguage trybie bez błędów, ale zamiast tego rejestruje komunikaty w dzienniku zdarzeń. Komunikaty dziennika opisują, jakie ograniczenia byłyby stosowane, gdyby zasada była w trybie egzekwowania.
Wyświetlanie zdarzeń inspekcji
Program PowerShell rejestruje zdarzenia inspekcji w dzienniku zdarzeń PowerShellCore/Analytic. Dziennik nie jest domyślnie włączony. Aby włączyć dziennik, otwórz Podgląd zdarzeń systemu Windows, kliknij prawym przyciskiem myszy na PowerShellCore/Analytic i wybierz Włącz dziennik.
Alternatywnie możesz uruchomić następujące polecenie z sesji programu PowerShell z podwyższonym poziomem uprawnień.
wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet
Zdarzenia można wyświetlić w Podgląd zdarzeń systemu Windows lub użyć Get-WinEvent polecenia cmdlet , aby pobrać zdarzenia.
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
Komunikat zdarzenia zawiera pozycję skryptu, w której zostanie zastosowane ograniczenie. Te informacje ułatwiają zrozumienie, gdzie należy zmienić skrypt, tak aby był uruchamiany w ramach zasad kontroli aplikacji.
Ważne
Po przejrzeniu zdarzeń inspekcji należy wyłączyć dziennik analityczny. Dzienniki analityczne szybko rosną i zużywają duże ilości miejsca na dysku.
Wyświetlanie zdarzeń inspekcji w debugerze programu PowerShell
Jeśli ustawisz zmienną $DebugPreference na Break dla interaktywnej sesji programu PowerShell, program PowerShell włączy debuger skryptów wiersza polecenia w bieżącym miejscu w skrypcie, gdzie wystąpiło zdarzenie inspekcji. Punkt przerwania umożliwia debugowanie kodu i sprawdzanie bieżącego stanu skryptu w czasie rzeczywistym.