Google a publicat GWPSan, un instrument pentru identificarea erorilor în timpul executării aplicațiilor.

Compania Google a lansat codurile sursă ale instrumentului GWPSan, destinat identificării erorilor în etapa de execuție a aplicațiilor compilate pentru arhitecturile x86-64 și ARM64. GWPSan este construit sub formă de bibliotecă partajată, care se leagă la startul aplicației cu ajutorul LD_PRELOAD și folosește pentru analiza funcționării programului mecanismele de oprire disponibile în kernelul Linux (PERF_TYPE_BREAKPOINT) și eșantionarea proceselor. Codul este scris în C++ și este distribuit sub licența Apache 2.0.

GWPSan este organizat sub forma unui cadru modular, care suportă conectarea modulelor cu implementări ale detectorilor pentru diferite tipuri de erori. GWPSan efectuează o analiză dinamică, activată prin intermediul gestionatorilor de semnale, ceea ce permite evitarea modificării codului executabil al aplicației. Pentru a funcționa eficient, majoritatea detectorilor necesită ca aplicația să fie compilată cu anumite flaguri ale compilatorului, care adaugă metadate necesare. Este necesar, cel puțin, Clang 18 și kernelul Linux 6.4.

În prezent sunt disponibile trei detectoare:

  • UAR (Use-after-return) — identifică erorile cauzate de utilizarea unui obiect în stivă după ieșirea din funcția în care acest obiect a fost definit. Protecția este organizată prin interceptarea punctelor de intrare și ieșire pentru funcție — la intrare, stiva este înlocuită cu o copie pentru utilizare în timpul executării funcției, iar la ieșire, starea veche a stivei este restaurată.
  • TSan (Thread Sanitizer) — determină stările de competiție între fire (Data-race), care apar atunci când diferite fire ce rulează simultan pot citi sau modifica zone comune de memorie, fără a folosi pentru aceasta primitivele de sincronizare. Protecția este construită pe utilizarea punctelor de oprire hardware, legate de zonele comune de memorie. Un gestionator de semnalizează pentru o scurtă perioadă de timp suspendă execuția firului la accesul la memorie și, în timpul acestei suspendări, verifică dacă s-a activat un punct de oprire pentru alt fir.
  • LMSan (Lightweight Memory Sanitizer) — detectează utilizarea datelor neinițializate în memorie. Detectorul este marcat ca experimental și nu este recomandat pentru utilizare.

GWPSan analizează codul executabil al programului, folosind framework-ul DynamoRIO pentru a decoda codul mașină în instrucțiuni ISA abstracte, care sunt apoi executate utilizând emularea. Prin semnale periodice de la cronometrul unificat, se activează un handler care, la fiecare apel, execută o porțiune specifică de instrucțiuni pentru fluxul analizat. În cazul în care se descoperă anumite instrucțiuni, se pornește un detector de probleme specific acelor instrucțiuni; de exemplu, pentru instrucțiunile care accesează memoria, se activează detectorul de stări de concurență.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster