Jak włączyć i eksportować logi bloków skryptów PowerShell

Jak włączyć i eksportować logi bloków skryptów PowerShell

SOC Prime Team
SOC Prime Team linkedin icon Śledź

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).

Wypróbuj LogTotal, darmowe

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.

  1. Prześlij. Otwórz logtotal.com i wrzuć tam plik. [DOWÓD: ekran przesyłania, limit rozmiaru]
  2. 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

ObjawPrawdopodobna przyczynaFix
Brak zdarzeń 4104Rejestrowanie bloków skryptów jest wyłączone, i nic nie wyglądało podejrzanieWłącz je na przyszłość; sprawdź dziennik Windows PowerShell, aby zobaczyć, co możesz jeszcze uzyskać
Tylko kilka zdarzeń 4104, wszystkie OstrzeżeniaRejestrowanie jest wyłączone; widzisz automatyczne rejestrowanie podejrzanych blokówTo samo co powyżej
Nie znaleziono PowerShellCore/OperationalPowerShell 7 nie jest zainstalowany, lub jego manifest nie jest zarejestrowanyUruchom RegisterManifest.ps1 z $PSHOME
Tekst 4104 to nieczytelny ciphertextChronione rejestrowanie zdarzeń jest włączonePotrzebujesz certyfikatu deszyfrującego
Dziennik obejmuje tylko kilka godzinDomyś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.

Dołącz do platformy Detection as Code firmy SOC Prime aby zwiększyć widoczność zagrożeń najbardziej istotnych dla Twojego biznesu. Aby pomóc Ci rozpocząć i natychmiast uzyskać wartość, umów się teraz na spotkanie z ekspertami SOC Prime.