Google heeft GWPSan gepubliceerd, een tool voor het opsporen van fouten tijdens de uitvoering van applicaties.

Google heeft de bronteksten van de GWPSan-tool gepubliceerd, ontworpen voor het opsporen van fouten tijdens de uitvoering van applicaties die zijn samengesteld voor x86-64 en ARM64 architecturen. GWPSan wordt gepresenteerd als een gedeelde bibliotheek die bij de lancering van de applicatie wordt gekoppeld met behulp van LD_PRELOAD en maakt gebruik van de beschikbare mechanismen in de Linux-kernel voor het stoppen (PERF_TYPE_BREAKPOINT) en proces-sampling voor de analyse van het programma. De code is geschreven in C++ en wordt verspreid onder de Apache 2.0-licentie.

GWPSan is vormgegeven als een modulair framework dat de aansluiting van modules ondersteunt met implementaties van verschillende foutdetectieklassen. GWPSan voert dynamische analyse uit, geactiveerd via signal handlers, waardoor modificaties van de uitvoerbare code van de applicatie niet nodig zijn. Voor een effectieve werking van de meeste detectors zijn bepaalde compiler-flags vereist die noodzakelijke metadata toevoegen tijdens de applicatieconstructie. Tenminste Clang 18 en Linux-kernel 6.4 zijn nodig.

Momenteel zijn er drie detectors beschikbaar:

  • UAR (Use-after-return) - detecteert fouten die ontstaan door het gebruik van een object op de stack na het verlaten van de functie waarin dat object was gedefinieerd. De bescherming wordt gerealiseerd door het onderscheppen van instap- en uitstappunten voor de functie - bij instap wordt de stack vervangen door een kopie voor gebruik tijdens de uitvoering van de functie, en bij uitstap wordt de oude staat van de stack hersteld.
  • TSan (Thread Sanitizer) - bepaalt racecondities tussen threads (Data-race), die optreden wanneer verschillende tegelijkertijd uitgevoerde threads gedeelde geheugengebieden kunnen lezen of wijzigen zonder gebruik te maken van synchronisatie-primitive. De bescherming is gebaseerd op het gebruik van hardware-stoppen, die zijn gekoppeld aan gedeelde geheugengebieden. Een activerende handler pauzeert de uitvoering van de thread tijdelijk bij toegang tot het geheugen en controleert tijdens deze pauze of er een stoppunt is geactiveerd voor een andere thread.
  • LMSan (Lightweight Memory Sanitizer) - detecteert het gebruik van niet-geĆÆnitialiseerde gegevens in het geheugen. Deze detector is gemarkeerd als experimenteel en wordt niet aanbevolen voor gebruik.

GWPSan analyseert de uitvoerende code van een programma met behulp van het DynamoRIO-framework om machinecode te decoderen naar abstracte ISA-instructies, die vervolgens worden uitgevoerd via emulatie. Door periodieke signalen van de timer wordt een verenigde handler aangeroepen, die bij elke aanroep een bepaald deel van de instructies voor de geanalyseerde stroom uitvoert. In het geval van het detecteren van bepaalde instructies tijdens de uitvoering, wordt een probleemdetectiemodule, specifiek voor deze instructies, gestart; bijvoorbeeld voor instructies die geheugen aanspreken, wordt een race condition-detectie gestart.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster