Powrót do strony głównej

Wazuh Whodata na Windows: poprawka błędu 6955

Artykuł wyjaśnia, dlaczego Wazuh Whodata kończy się błędem 6955 na nieangielskich Windowsach i proponuje rozwiązanie techniczne: zamianę zlokalizowanych nazw podkategorii audytu na statyczne GUID w funkcji set_policies(). Zawiera gotowe patche, instrukcje kompilacji i weryfikacji.

Wazuh Whodata: jak pokonać błąd 6955 na Windows
Advertisement 728x90

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

Google AdInline article slot

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:

Google AdInline article slot
  • 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_WHODATA do DEFINES w Makefile, aby aktywować odpowiednie bloki kodu w syscheckd
  • Przekazanie flagi do CMake — modyfikacja linii kompilacyjnej syscheckd/build w celu przekazania -DWIN_WHODATA do kompilatora w formie CFLAGS
  • Linkowanie z wevtapi.lib — obowiązkowa zależność dla wywołań EvtSubscribe, EvtNext i 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.

Google AdInline article slot

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 whodata w ossec.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-logtest pojawiają się zdarzenia FIM z atrybutem type="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 /restore w 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.lib jest obowiązkową zależnością dla whodata: bez niej niemożliwe jest subskrybowanie zdarzeń audytu w czasie rzeczywistym
  • Patch do buffer.c jest 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

Advertisement 728x90

Czytaj dalej