Google hat GWPSan veröffentlicht, ein Werkzeug zur Identifizierung von Fehlern während der Ausführung von Anwendungen.

Das Unternehmen Google hat den Quellcode des GWPSan-Tools veröffentlicht, das zur Fehlererkennung in Anwendungen dient, die für die Architekturen x86-64 und ARM64 erstellt wurden. GWPSan wird als Shared Library bereitgestellt, die beim Starten der Anwendung über LD_PRELOAD eingebunden wird und die verfügbaren Mechanismen des Linux-Kernels zur Programmüberwachung (PERF_TYPE_BREAKPOINT) und Prozess-Sampling für die Analyse nutzt. Der Code ist in C++ geschrieben und unter der Apache 2.0-Lizenz verfügbar.

GWPSan ist als modulares Framework konzipiert, das die Anbindung von Modulen zur Implementierung von Detektoren verschiedener Fehlerklassen unterstützt. GWPSan führt eine dynamische Analyse durch, die über Signalhandler aktiviert wird, wodurch die Ausführungspläne des Programmcodes unverändert bleiben. Für die effektive Funktion der meisten Detektoren ist es erforderlich, dass die Anwendung mit bestimmten Compiler-Flags kompiliert wird, die notwendige Metadaten hinzufügen. Mindestens Clang 18 und Linux-Kernel 6.4 sind erforderlich.

Derzeit sind drei Detektoren verfügbar:

  • UAR (Use-after-return) — erkennt Fehler, die durch die Verwendung eines Objekts im Stack nach dem Verlassen der Funktion verursacht werden, in der dieses Objekt definiert wurde. Der Schutz erfolgt durch das Abfangen von Ein- und Auspunkten für die Funktion — beim Eintritt wird der Stack durch eine Kopie ersetzt, die während der Ausführung der Funktion verwendet wird, und beim Austritt wird der vorherige Zustand des Stacks wiederhergestellt.
  • TSan (Thread Sanitizer) — identifiziert Race Conditions zwischen Threads (Data-Race), die auftreten, wenn unterschiedliche gleichzeitig ausgeführte Threads auf gemeinsame Speicherbereiche zugreifen oder diese ändern, ohne Synchronisationsprimitive zu verwenden. Der Schutz basiert auf der Verwendung von Hardware-Breakpoints, die an gemeinsamen Speicherbereichen angebracht sind. Ein auslösender Handler unterbricht für einen kurzen Zeitraum die Ausführung des Threads beim Zugriff auf den Speicher und überprüft während dieser Unterbrechung, ob ein Breakpoint für einen anderen Thread ausgelöst wurde.
  • LMSan (Lightweight Memory Sanitizer) — erkennt die Verwendung von nicht initialisierten Daten im Speicher. Der Detektor ist als experimentell gekennzeichnet und wird nicht für die Verwendung empfohlen.

GWPSan analysiert den ausführbaren Programm-Code, indem es das DynamoRIO-Framework verwendet, um maschinellen Code in abstrakte ISA-Instruktionen zu decodieren, die dann durch Emulation ausgeführt werden. Über periodische Signale des Timers wird ein einheitlicher Handler aufgerufen, der bei jedem Aufruf einen bestimmten Satz von Instruktionen für den analysierten Datenstrom ausführt. Wenn bei der Ausführung bestimmter Instruktionen Probleme entdeckt werden, wird ein spezifischer Problemdetektor für die jeweiligen Instruktionen gestartet; zum Beispiel wird für Instruktionen, die auf den Speicher zugreifen, ein Detektor für Race Conditions aktiviert.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster