Dzienniki bloków skryptów PowerShell znajdują się w Dzienniki aplikacji i usług → Microsoft → Windows → PowerShell → Operacyjne, jako zdarzenie 4104. Są one kompletne tylko wtedy, gdy włączone jest rejestrowanie bloków skryptów. Aby je wyeksportować:
wevtutil epl „Microsoft-Windows-PowerShell/Operational” C:logspowershell.evtx
PowerShell 7 to oddzielny produkt z oddzielnym kanałem, PowerShellCore/Operational, i własnym ustawieniem polityki.
Jeśli atakujący miał styczność z systemem Windows, jest prawdopodobne, że był w tym zaangażowany PowerShell. Rejestrowanie bloków skryptów zapisuje kod, który faktycznie był uruchomiony, często po zdjęciu warstw zaciemnienia. Prime Core ma 663 reguły wykrywania dla dzienników PowerShell, zmapowane na 417 technik MITRE ATT&CK. Obejmują one złośliwe wykorzystanie PowerShell (T1059.001), zaciemnianie (T1027) i cradle do pobierania narzędzi (T1105).
Zanim zaczniesz
Czy rejestrowanie bloków skryptów jest włączone?
reg query „HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging”
Ustawienie EnableScriptBlockLogging na 0x1 oznacza tak. Jeśli klucz nie istnieje, jest wyłączone. Nawet wtedy, Windows PowerShell 5.1 nadal zapisuje bloki skryptów, które uważa za podejrzane, jako zdarzenia 4104 na poziomie Ostrzeżenia. Możesz zatem znaleźć niektóre zdarzenia. Po prostu nie bierz ich za pełny obraz.
Włączenie tego pomaga od teraz, nie dla tego, co już się wydarzyło. Użyj ustawienia Zasad grupy Szablony administracyjne → Składniki systemu Windows → Windows PowerShell → Włącz rejestrowanie bloków skryptów PowerShell, lub ustaw wartość rejestru bezpośrednio:
reg add „HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging” /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 czyta własny klucz polityki pod HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Jeśli został zainstalowany z pliku zip zamiast MSI, jego kanał zdarzeń może nie być zarejestrowany, dopóki nie uruchomisz RegisterManifest.ps1 z $PSHOME.
Oczekuj dużej ilości. Każdy skrypt i moduł, który jest uruchomiony, kończy się w dzienniku. Zwiększ maksymalny rozmiar kanału, inaczej zachowasz tylko kilka godzin.
Oczekuj tajemnic. Skrypty administracyjne czasami zawierają hasła i klucze API w formie zwykłego tekstu, a rejestrowanie bloków skryptów rejestruje je wiernie. Pamiętaj o tym, zanim ten plik gdziekolwiek trafi, i przeczytaj poniższą sekcję LogTotal.
Eksportuj dzienniki
W Podglądzie Zdarzeń, kliknij prawym przyciskiem myszy Operacyjne pod PowerShell i wybierz Zapisz wszystkie zdarzenia jako… Z wiersza poleceń:
:: tylko bloki skryptów
wevtutil epl „Microsoft-Windows-PowerShell/Operational” C:logsps_4104.evtx /q:”*[System[(EventID=4104)]]”
:: PowerShell 7
wevtutil epl „PowerShellCore/Operational” C:logspwsh.evtx
:: klasyczny dziennik „Windows PowerShell”: zdarzenia uruchomienia silnika z linią poleceń hosta
wevtutil epl „Windows PowerShell” C:logswindows_powershell.evtx
Tego ostatniego łatwo zapomnieć, ale warto go zdobyć. Zdarzenie 400 rejestruje każde uruchomienie silnika, w tym wersję silnika. Wersja silnika 2.0 na nowoczesnym systemie zwykle oznacza, że ktoś celowo obniżył wersję, aby uniknąć rejestrowania bloków skryptów.
Załaduj i zrecenzuj w LogTotal
LogTotal czyta pliki EVTX natywnie. Jedna rzecz do zapamiętania: LogTotal jeszcze nie oczyszcza plików EVTX. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.
- Prześlij. Otwórz logtotal.com i wrzuć tam plik. [DOWÓD: ekran przesyłania, limit rozmiaru]
- Zrecenzuj. [PROOF: what the results screen shows for PowerShell data]
Jak to wygląda na rzeczywistych danych. Użyliśmy [DOWÓD: przykład źródła, np. maszyna testowa z włączonym rejestrowaniem bloków skryptów, po uruchomieniu zakodowanego cradle do pobierania i nieszkodliwego łańcucha testowego AMSI]. LogTotal zidentyfikował [DOWÓD: rzeczywiste znaleziska]. [DOWÓD: link do pliku przykładowego]
Kiedy coś pójdzie nie tak
| Objaw | Prawdopodobna przyczyna | Fix |
|---|---|---|
| Brak zdarzeń 4104 | Rejestrowanie bloków skryptów jest wyłączone, i nic nie wyglądało podejrzanie | Włącz je na przyszłość; sprawdź dziennik Windows PowerShell, aby zobaczyć, co możesz jeszcze uzyskać |
| Tylko kilka zdarzeń 4104, wszystkie Ostrzeżenia | Rejestrowanie jest wyłączone; widzisz automatyczne rejestrowanie podejrzanych bloków | To samo co powyżej |
| Nie znaleziono PowerShellCore/Operational | PowerShell 7 nie jest zainstalowany, lub jego manifest nie jest zarejestrowany | Uruchom RegisterManifest.ps1 z $PSHOME |
| Tekst 4104 to nieczytelny ciphertext | Chronione rejestrowanie zdarzeń jest włączone | Potrzebujesz certyfikatu deszyfrującego |
| Dziennik obejmuje tylko kilka godzin | Domyślny rozmiar, wysoka objętość | Zwiększ maksymalny rozmiar kanału |
FAQ
Czy rejestrowanie bloków skryptów chwyta zaciemniony kod?
W dużej mierze tak. Rejestruje bloki skryptów, gdy są kompilowane. Gdy zaciemniony kod buduje i uruchamia kolejny etap, ten etap jest rejestrowany jako własny blok, często w czytelnej formie.
Czym różni się to od transkrypcji?
Transkrypcja zapisuje pliki tekstowe wejścia i wyjścia sesji do folderu. Rejestrowanie bloków skryptów zapisuje sam kod w dzienniku zdarzeń. Skomplementują się nawzajem i oba są warte posiadania.