Zpět na domů

Wazuh Whodata na Windows: oprava chyby 6955

Článek vysvětluje, proč Wazuh Whodata selhává s chybou 6955 na neanglických Windows a nabízí technické řešení: nahrazení lokalizovaných názvů podkategorií auditu statickými GUID ve funkci set_policies(). Zahrnuje připravené patche, instrukce k sestavení a kontrole.

Wazuh Whodata: jak porazit chybu 6955 na Windows
Advertisement 728x90

Jak opravit Wazuh Whodata na Windows: řešení lokality pomocí GUID identifikátorů auditu

Wazuh Whodata na Windows přestane fungovat při jakékoliv neanglické systémové lokalizaci — chyba 6955 vzniká kvůli závislosti na lokalizovaných názvech podkategorií auditu v auditpol. Standardní mechanismus zálohování a obnovy politik prostřednictvím CSV souborů ztrácí kompatibilitu, když jsou názvy podkategorií uvedeny v ruštině, čínštině nebo jiném jazyce. Řešením je opustit parsing textových názvů a použít statické GUID, které jsou garantovaně stejné ve všech regionálních verzích Windows. Nejedná se o provizorní patch, ale o stabilní technický work-around pro omezení API, vhodný do produkčních prostředí s multijazyčnými endpoint zařízeními.

Proč selhává auditpol /backup + /restore mimo anglickou lokalizaci

Funkce set_policies() v src/syscheckd/src/whodata/win_whodata.c využívá následující postup:

  • auditpol /backup → vytvoří CSV s nadpisy jako „Název podkategorie“, „Úspěšně“, „Selhání“
  • Parsing tohoto CSV pro určení aktuálního stavu
  • auditpol /restore → pokus o aplikaci uložených nastavení

Problém spočívá v tom, že v Windows 10/11 od verze 1809 vyžaduje auditpol /restore přesné shodu řetězcových názvů podkategorií. Pokud je v CSV uvedeno „File System“, ale auditpol očekává „File System“, příkaz skončí s chybovým kódem 0x134c (5004), který Wazuh interpretuje jako 6955. Tento behavior je dokumentován v Microsoft Docs: „Příkaz /restore je citlivý na lokalitu a může selhat, pokud byl záložní soubor vytvořen na systému s jiným jazykovým nastavením.“

Google AdInline article slot

Klíčový poznatek: všechny podkategorie auditu mají pevně zafixované GUID, nezávislé na jazyku OS. Například:

  • Systém souborů: {0CCE921D-69AE-11D9-BED3-505054503030}
  • Manipulace s deskriptory: {0CCE9223-69AE-11D9-BED3-505054503030}
  • Úpravy registru: {0CCE9227-69AE-11D9-BED3-505054503030}

Tyto identifikátory jsou dostupné prostřednictvím auditpol /list /subcategory:* a jsou stabilní od Windows Vista až po Windows 11.

Jak přepsat set_policies() bez závislosti na lokalitě

Nahrazení funkce set_policies() v win_whodata.c je centrálním technickým krokem. Nová implementace vylučuje celý CSV stack a spoléhá se pouze na přímý volání auditpol /set s GUID. Zde jsou klíčové požadavky na patch:

Google AdInline article slot
  • Minimální počet systémových volání: každý system() musí být ověřen na nenulový exit code
  • Atomarita: při selhání jedné podkategorie mají ostatní pokračovat v nastavování
  • Debugovací informace: každá chyba musí být logována s uvedením konkrétní podkategorie
  • Kompatibilita s Windows Server 2016+: všechny uvedené GUID jsou podporovány v Server Core i Desktop Edition

Implementace nepoužívá popen() ani CreateProcessA, aby se vyhnula problémům s kódováním konzole. Přímé volání system() zaručuje spuštění v systémové kódové stránce, kde auditpol správně interpretuje GUID.

Další patche pro sestavení WinAgent s WIN_WHODATA

Sestavení Wazuh agenta pro Windows vyžaduje tři kritické změny v build procesu:

  • Zapnutí preprocesorového definování — přidání -DWIN_WHODATA do DEFINES Makefile, aby se aktivovaly odpovídající bloky kódu v syscheckd
  • Předání flagu do CMake — úprava řádku sestavení syscheckd/build pro předání -DWIN_WHODATA do kompilační řádky CFLAGS
  • Linkování s wevtapi.lib — povinná závislost pro volání EvtSubscribe, EvtNext a dalších funkcí Event Log API používaných v režimu whodata

Bez třetího bodu sestavení skončí s chybou linkování: undefined reference to 'EvtSubscribe'. Knihovna wevtapi.lib je dodávána v rámci MinGW-w64 (balíček mingw-w64-dev) a nevyžaduje externí SDK.

Google AdInline article slot

Také je třeba opravit buffer.c: nahradit return NULL; za return 0; v funkci dispatch_buffer(), protože její signatura vrátí int, nikoli void*. Tato chyba vedou k undefined behaviour při zpracování bufferů událostí v režimu whodata.

Kontrola a nasazení do produkce

Po úspěšném sestavení (make TARGET=winagent) získaný wazuh-agent.exe obsahuje plně autonomní implementaci whodata. Pro validaci:

  • Spusťte agent s zapnutým whodata v ossec.conf:
<syscheck>
  <whodata>yes</whodata>
</syscheck>
  • Ujistěte se, že v logech nejsou chyby 6955, 6915, 6916
  • Zkontrolujte, zda existují události FIM s atributem type="whodata" v Kibana nebo prostřednictvím wazuh-logtest
  • Potvrďte fungování na Windows s lokalizací ru-RU, zh-CN, es-ES — všechny testy by měly probíhat stejně

Nasazení do enterprise prostředí vyžaduje podepsání spustitelného souboru certifikátem EV Code Signing, protože auditpol /set vyžaduje práva administrátora a může být blokováno Windows Defender Application Control (WDAC) při absenci důvěryhodného podpisu.

Co je důležité

  • Chyba 6955 není způsobena bugem Wazuh, ale omezením auditpol /restore v neanglických lokalizacích Windows
  • Použití GUID místo názvů podkategorií je jediný způsob, jak zajistit cross-locale kompatibilitu bez změny systémových nastavení
  • wevtapi.lib je povinnou závislostí pro whodata: bez ní není možné přihlásit se k událostem auditu v reálném čase
  • Patch buffer.c je kritický pro stabilitu: nesoulad typu vrácené hodnoty způsobuje segmentation fault při přetečení bufferu událostí
  • Sestavený agent nevyžaduje instalaci dalších komponent — vše potřebné je zabudováno v wazuh-agent.exe

Všechny změny jsou zpětně kompatibilní s oficiálními verzemi Wazuh 4.14.x a mohou být integrovány do CI/CD pipeline prostřednictvím patch souborů a post-build skriptů. Pro automatizaci se doporučuje použít git apply s předem ověřenými diff soubory a kontrolou hashe zdrojových souborů.

— Editorial Team

Advertisement 728x90

Číst dál