Google zveřejnil GWPSan, nástroj pro detekci chyb během běhu aplikací

Společnost Google zveřejnila zdrojové kódy nástroje GWPSan, určeného k odhalování chyb během běhu aplikací sestavených pro architektury x86-64 a ARM64. GWPSan je vytvořen jako sdílená knihovna, která se při spuštění aplikace propojuje pomocí LD_PRELOAD a využívá k analýze výkonu programu mechanismy zastavení (PERF_TYPE_BREAKPOINT) a vzorkování procesů dostupné v jádře Linux. Kód je napsán v jazyce C++ a šíří se pod licencí Apache 2.0.

GWPSan je navržen jako modulární framework, který podporuje připojení modulů s implementací detektorů různých tříd chyb. GWPSan provádí dynamickou analýzu aktivovanou prostřednictvím obslužných rutin signálů, což umožňuje obejít se bez změny spustitelného kódu aplikace. Pro efektivní fungování většiny detektorů je třeba aplikaci sestavit s určitými kompilátorovými příznaky, které přidávají nezbytná meta data. Pro jeho použití je alespoň vyžadován Clang 18 a jádro Linux 6.4.

V současnosti jsou dostupné tři detektory:

  • UAR (Use-after-return) — odhaluje chyby, které vznikají při použití objektu na zásobníku po opuštění funkce, ve které byl tento objekt definován. Ochrana je zajištěna zachycením vstupních a výstupních bodů funkce — při vstupu se provádí nahrazení zásobníku kopií pro použití během běhu funkce, a při opuštění se vrací původní stav zásobníku.
  • TSan (Thread Sanitizer) — určuje stavy závodů mezi vlákny (Data-race), které vznikají, když různé vlákna běžící současně mohou číst nebo upravovat sdílené oblasti paměti, aniž by používala primitiva pro synchronizaci práce. Ochrana je postavena na používání hardwarových zastavovacích bodů, které jsou vázány na sdílené oblasti paměti. Triggerující obslužná rutina na krátkou dobu pozastaví běh vlákna při přístupu k paměti, a během této pozastávky kontroluje, zda nedošlo k aktivaci zastavovacího bodu pro jiné vlákno.
  • LMSan (Lightweight Memory Sanitizer) — detekuje použití neinicializovaných dat v paměti. Detektor je označen jako experimentální a jeho používání se nedoporučuje.

GWPSan analyzuje spustitelný kód programu pomocí rámce DynamoRIO k dekódování strojového kódu na abstraktní instrukce ISA, které se poté vykonávají pomocí emulace. Skrze periodické signály od časovače se vyvolává unified handler, který při každém zavolání vykoná určitou část instrukcí pro analyzovaný proud. V případě detekce při vykonávání určitých instrukcí se spustí detektor problémů specifický pro dané instrukce, například pro instrukce přistupující k paměti se spustí detektor závodních stavů.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster