Jak naprawić Wazuh Whodata na Windows: poprawa lokalizacji za pomocą identyfikatorów GUID audytu
Wazuh Whodata na Windows przestaje działać przy każdej niemiejskiej lokalizacji systemowej — błąd 6955 pojawia się z powodu zależności od lokalizowanych nazw podkategorii audytu w auditpol. Standardowy mechanizm tworzenia kopii zapasowych i przywracania polityk za pomocą plików CSV traci kompatybilność, gdy nazwy podkategorii są wyświetlane po rosyjsku, chińsku lub w innym języku. Rozwiązaniem jest rezygnacja z parsowania tekstowych nazw i stosowanie statycznych identyfikatorów GUID, które gwarantują identyczność we wszystkich regionalnych wersjach Windows. To nie jest doraźny patch, ale stabilny techniczny obchód ograniczenia API, który można stosować w środowiskach produkcyjnych z wielojęzycznymi urządzeniami końcowymi.
Dlaczego auditpol /backup + /restore zawodzi poza angielską lokalizacją
Funkcja set_policies() w pliku src/syscheckd/src/whodata/win_whodata.c wykorzystuje następującą sekwencję:
auditpol /backup→ tworzy plik CSV z nagłówkami takimi jak „Imię podkategorii”, „Sukces” i „Błąd”- Parsowanie tego CSV w celu określenia aktualnego stanu
auditpol /restore→ próba zastosowania zapisanych ustawień
Problem polega na tym, że w Windows 10/11, począwszy od wersji 1809, auditpol /restore wymaga dokładnego dopasowania tekstowych nazw podkategorii. Jeśli w pliku CSV podano „File System”, a auditpol oczekuje „File System”, komenda zakończy się kodem błędu 0x134c (5004), który Wazuh interpretuje jako 6955. To zachowanie zostało udokumentowane w dokumentacji Microsoftu: „Komenda /restore jest wrażliwa na lokalizację i może zawieść, jeśli plik kopii zapasowej został utworzony na systemie z innymi ustawieniami językowymi”.
Kluczowy insight: wszystkie podkategorie audytu mają twardo zdefiniowane identyfikatory GUID, niezależne od języka systemu. Na przykład:
- System plików:
{0CCE921D-69AE-11D9-BED3-505054503030} - Operacje z deskryptorami:
{0CCE9223-69AE-11D9-BED3-505054503030} - Zmiany w rejestrze:
{0CCE9227-69AE-11D9-BED3-505054503030}
Te identyfikatory są dostępne przez auditpol /list /subcategory:* i są stabilne od Windows Vista do Windows 11.
Jak przepisać funkcję set_policies() bez zależności od lokalizacji
Zamiana funkcji set_policies() w pliku win_whodata.c to centralny krok techniczny. Nowa implementacja eliminuje cały stek związany z plikami CSV i opiera się wyłącznie na bezpośrednim wywołaniu auditpol /set z identyfikatorami GUID. Oto kluczowe wymagania dla patcha:
- Minimalna liczba wywołań systemowych: każdy
system()musi być sprawdzony pod kątem niezerowego kodu zakończenia - Atomowość: w przypadku awarii jednej podkategorii pozostałe powinny nadal być konfigurowane
- Informacje debugujące: każdy błąd musi być logowany z wskazaniem konkretnej podkategorii
- Kompatybilność z Windows Server 2016+: wszystkie podane identyfikatory są obsługiwane zarówno w edycji Server Core, jak i Desktop Edition
Implementacja nie używa popen() ani CreateProcessA, aby uniknąć problemów z kodowaniem konsoli. Bezpośrednie wywołanie system() gwarantuje uruchomienie w systemowej stronie kodowej, gdzie auditpol prawidłowo interpretuje identyfikatory GUID.
Dodatkowe patche do kompilacji WinAgent z WIN_WHODATA
Kompilacja agenta Wazuh dla Windows wymaga trzech krytycznych zmian w procesie build:
- Włączenie preprocesorowego definowania — dodanie
-DWIN_WHODATAdoDEFINESw Makefile, aby aktywować odpowiednie bloki kodu wsyscheckd - Przekazanie flagi do CMake — modyfikacja linii kompilacyjnej
syscheckd/buildw celu przekazania-DWIN_WHODATAdo kompilatora w formie CFLAGS - Linkowanie z wevtapi.lib — obowiązkowa zależność dla wywołań
EvtSubscribe,EvtNexti innych funkcji Event Log API używanych w trybie whodata
Bez trzeciego punktu kompilacja zakończy się błędem linkowania: undefined reference to 'EvtSubscribe'. Biblioteka wevtapi.lib dostarczana jest w składzie MinGW-w64 (pakiet mingw-w64-dev) i nie wymaga zewnętrznych SDK.
Również wymagana jest korekta buffer.c: zastąpienie return NULL; na return 0; w funkcji dispatch_buffer(), ponieważ jej sygnatura zwraca int, a nie void*. Ten błąd prowadzi do niezdefiniowanego zachowania podczas przetwarzania buforów zdarzeń w trybie whodata.
Weryfikacja i wdrożenie w środowisku produkcyjnym
Po pomyślnej kompilacji (make TARGET=winagent) otrzymany wazuh-agent.exe zawiera całkowicie autonomiczną implementację whodata. Aby zweryfikować:
- Uruchom agenta z włączonym
whodatawossec.conf:
<syscheck>
<whodata>yes</whodata>
</syscheck>
- Upewnij się, że w logach nie ma błędów 6955, 6915 czy 6916
- Sprawdź, czy w Kibana lub za pomocą
wazuh-logtestpojawiają się zdarzeniaFIMz atrybutemtype="whodata" - Potwierdź działanie na Windows z lokalizacją
ru-RU,zh-CN,es-ES— wszystkie testy powinny przebiegać identycznie
Wdrożenie w środowiskach przedsiębiorstw wymaga podpisania pliku wykonywalnego certyfikatem EV Code Signing, ponieważ auditpol /set wymaga uprawnień administratora i może być blokowany przez Windows Defender Application Control (WDAC) w przypadku braku zaufanego podpisu.
Co jest ważne
- Błąd 6955 spowodowany jest nie błędem Wazuh, lecz ograniczeniem
auditpol /restorew niemiejskich lokalizacjach Windows - Użycie identyfikatorów GUID zamiast nazw podkategorii to jedyny sposób na zapewnienie kompatybilności między lokalizacjami bez zmiany systemowych ustawień
wevtapi.libjest obowiązkową zależnością dla whodata: bez niej niemożliwe jest subskrybowanie zdarzeń audytu w czasie rzeczywistym- Patch do
buffer.cjest krytyczny dla stabilności: niezgodność typu zwracanego powoduje segmentation fault podczas przekroczenia bufora zdarzeń - Skompilowany agent nie wymaga instalacji dodatkowych komponentów — wszystko niezbędne jest wbudowane w
wazuh-agent.exe
Wszystkie zmiany są zgodne z oficjalnymi wydaniami Wazuh 4.14.x i mogą zostać zintegrowane do CI/CD-pipelina za pomocą plików patch oraz skryptów post-build. Do automatyzacji zaleca się stosowanie git apply z wcześniej sprawdzonymi plikami diff i weryfikacją hashów źródeł.
— Editorial Team
Brak komentarzy.