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.“
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:
- 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_WHODATAdoDEFINESMakefile, aby se aktivovaly odpovídající bloky kódu vsyscheckd - Předání flagu do CMake — úprava řádku sestavení
syscheckd/buildpro předání-DWIN_WHODATAdo kompilační řádky CFLAGS - Linkování s wevtapi.lib — povinná závislost pro volání
EvtSubscribe,EvtNexta 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.
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
whodatavossec.conf:
<syscheck>
<whodata>yes</whodata>
</syscheck>
- Ujistěte se, že v logech nejsou chyby 6955, 6915, 6916
- Zkontrolujte, zda existují události
FIMs atributemtype="whodata"v Kibana nebo prostřednictvímwazuh-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 /restorev 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.libje 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.cje 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
Zatím žádné komentáře.