Communitygithub.com

AddressSanitizer (ASan)

AddressSanitizer erkennt Speicherfehler während des Fuzzings. Verwenden Sie es beim Fuzzing von C/C++-Code, um Pufferüberläufe und Use-After-Free-Fehler zu finden.

Was ist AddressSanitizer (ASan)?

AddressSanitizer (ASan) ist ein weit verbreitetes Tool zur Erkennung von Speicherfehlern, das intensiv beim Softwaretesten, insbesondere beim Fuzzing, eingesetzt wird. Es hilft, Speicherkorruptionsfehler wie Pufferüberläufe, Use-After-Free-Fehler und andere Speichersicherheitsverletzungen zu identifizieren, die sonst unbemerkt bleiben könnten. ASan instrumentiert Code zur Kompilierzeit, um Speicherzuweisungen und -zugriffe zu verfolgen und illegale Operationen zur Laufzeit zu erkennen. Die Nutzung ist auf Linux-Systemen optimal, während macOS und Windows nur eingeschränkte Unterstützung bieten, und es wird nicht für den Einsatz in der Produktion empfohlen. ASan wird mit gängigen Fuzzing-Frameworks wie libFuzzer, AFL++, cargo-fuzz und honggfuzz verwendet und erfordert die Aktivierung des `-fsanitize=address`-Flags während der Kompilierung sowie gegebenenfalls die Anpassung von Speicherlimits des Fuzzers, da ASan etwa 20 TB virtuellen Speicher benötigt.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SamuelChien/mega-skills-collection/tree/HEAD/address-sanitizer

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht AddressSanitizer (ASan)?

AddressSanitizer (ASan) ist ein weit verbreitetes Tool zur Erkennung von Speicherfehlern, das intensiv beim Testen von Software, insbesondere beim Fuzzing, eingesetzt wird. Es hilft, Speicherkorruptionsfehler aufzuspüren, die sonst unbemerkt bleiben könnten, wie z. B. Pufferüberläufe, Use-After-Free-Fehler und andere Verstöße gegen die Speichersicherheit.

Überblick

ASan ist aufgrund seiner Effektivität bei der Identifizierung von Speicherschwachstellen eine Standardpraxis beim Fuzzing. Es instrumentiert Code zur Kompilierzeit, um Speicherzuweisungen und -zugriffe zu verfolgen und illegale Operationen zur Laufzeit zu erkennen.

Schlüsselkonzepte

KonzeptBeschreibung
InstrumentierungASan fügt während der Kompilierung Laufzeitprüfungen für Speicheroperationen hinzu
SchattenspeicherBildet 20 TB virtuellen Speicher ab, um den Zuweisungsstatus zu verfolgen
LeistungskostenEtwa 2- bis 4-fache Verlangsamung im Vergleich zu nicht instrumentiertem Code
ErkennungsumfangFindet Pufferüberläufe, Use-After-Free, Double-Free und Speicherlecks

Wann anwenden

Wenden Sie diese Technik an, wenn:

  • Sie C/C++-Code auf Speichersicherheitslücken fuzzen
  • Sie Rust-Code mit unsicheren Blöcken testen
  • Sie Abstürze im Zusammenhang mit Speicherkorruption debuggen
  • Sie Komponententests ausführen, bei denen Speicherfehler vermutet werden

Überspringen Sie diese Technik, wenn:

  • Sie Produktionscode ausführen (ASan kann die Sicherheit verringern)
  • Die Plattform Windows oder macOS ist (eingeschränkte ASan-Unterstützung)
  • Der Leistungsaufwand für Ihren Anwendungsfall inakzeptabel ist
  • Sie reine sichere Sprachen ohne FFI fuzzen (z. B. reines Go, reines Java)

Kurzreferenz

AufgabeBefehl/Muster
ASan aktivieren (Clang/GCC)-fsanitize=address
Ausführlichkeit aktivierenASAN_OPTIONS=verbosity=1
Leckerkennung deaktivierenASAN_OPTIONS=detect_leaks=0
Abbruch bei Fehler erzwingenASAN_OPTIONS=abort_on_error=1
Mehrere OptionenASAN_OPTIONS=verbosity=1:abort_on_error=1

Schritt-für-Schritt-Anleitung

Schritt 1: Mit ASan kompilieren

Kompilieren und linken Sie Ihren Code mit dem Flag -fsanitize=address:

clang -fsanitize=address -g -o my_program my_program.c

Das Flag -g wird empfohlen, um bessere Stack-Traces zu erhalten, wenn ASan Fehler erkennt.

Schritt 2: ASan-Optionen konfigurieren

Setzen Sie die Umgebungsvariable ASAN_OPTIONS, um das Verhalten von ASan zu konfigurieren:

export ASAN_OPTIONS=verbosity=1:abort_on_error=1:detect_leaks=0

Schritt 3: Programm ausführen

Führen Sie das mit ASan instrumentierte Binary aus. Wenn Speicherfehler erkannt werden, gibt ASan detaillierte Berichte aus:

./my_program

Schritt 4: Speicherlimits des Fuzzers anpassen

ASan benötigt ca. 20 TB virtuellen Speicher. Deaktivieren Sie die Speicherbeschränkungen des Fuzzers:

  • libFuzzer: -rss_limit_mb=0
  • AFL++: -m none

Häufige Muster

Muster: Grundlegende ASan-Integration

Anwendungsfall: Standard-Fuzzing-Setup mit ASan

Vorher:

clang -o fuzz_target fuzz_target.c
./fuzz_target

Nachher:

clang -fsanitize=address -g -o fuzz_target fuzz_target.c
ASAN_OPTIONS=verbosity=1:abort_on_error=1 ./fuzz_target

Muster: ASan mit Komponententests

Anwendungsfall: Aktivieren von ASan für eine Testsuite

Vorher:

gcc -o test_suite test_suite.c -lcheck
./test_suite

Nachher:

gcc -fsanitize=address -g -o test_suite test_suite.c -lcheck
ASAN_OPTIONS=detect_leaks=1 ./test_suite

Erweiterte Nutzung

Tipps und Tricks

TippWarum es hilft
-g-Flag verwendenBietet detaillierte Stack-Traces zum Debuggen
verbosity=1 setzenBestätigt, dass ASan aktiviert ist, bevor das Programm startet
Lecks während des Fuzzings deaktivierenLeckerkennung verursacht keine sofortigen Abstürze und überlädt die Ausgabe
abort_on_error=1 aktivierenEinige Fuzzer benötigen abort() anstelle von _exit()

ASan-Berichte verstehen

Wenn ASan einen Speicherfehler erkennt, gibt es einen detaillierten Bericht aus, der Folgendes enthält:

  • Fehlertyp: Pufferüberlauf, Use-After-Free usw.
  • Stack-Trace: Wo der Fehler aufgetreten ist
  • Allokations-/Freigabe-Traces: Wo Speicher zugewiesen/freigegeben wurde
  • Speicherkarte: Schattenspeicherstatus um den Fehler herum

Beispiel für einen ASan-Bericht:

==12345==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60300000eff4 at pc 0x00000048e6a3
READ of size 4 at 0x60300000eff4 thread T0
    #0 0x48e6a2 in main /path/to/file.c:42

Sanitizer kombinieren

ASan kann mit anderen Sanitizern kombiniert werden, um eine umfassende Erkennung zu erreichen:

clang -fsanitize=address,undefined -g -o fuzz_target fuzz_target.c

Plattformspezifische Überlegungen

Linux: Volle ASan-Unterstützung mit bester Leistung macOS: Eingeschränkte Unterstützung, einige Funktionen funktionieren möglicherweise nicht Windows: Experimentelle Unterstützung, nicht für das Produktions-Fuzzing empfohlen

Anti-Patterns

Anti-PatternProblemKorrekter Ansatz
ASan in der Produktion verwendenKann Anwendungen weniger sicher machenASac nur zum Testen verwenden
Speicherlimits nicht deaktivierenFuzzer kann Prozess aufgrund von 20 TB virtuellem Speicher beenden-rss_limit_mb=0 oder -m none setzen
Leckberichte ignorierenSpeicherlecks weisen auf Probleme der Ressourcenverwaltung hinLeckberichte am Ende der Fuzzing-Kampagne überprüfen

Werkzeugspezifische Anleitungen

libFuzzer

Kompilieren Sie sowohl mit Fuzzer als auch mit Adress-Sanitizer:

clang++ -fsanitize=fuzzer,address -g harness.cc -o fuzz

Ausführen mit unbegrenztem RSS:

./fuzz -rss_limit_mb=0

Integrationstipps:

  • Immer -fsanitize=fuzzer mit -fsanitize=address kombinieren
  • -g für detaillierte Stack-Traces in Absturzberichten verwenden
  • Erwägen Sie ASAN_OPTIONS=abort_on_error=1 für eine bessere Absturzbehandlung

Siehe: libFuzzer: AddressSanitizer

AFL++

Verwenden Sie die Umgebungsvariable AFL_USE_ASAN:

AFL_USE_ASAN=1 afl-clang-fast++ -g harness.cc -o fuzz

Ausführen mit unbegrenztem Speicher:

afl-fuzz -m none -i input_dir -o output_dir ./fuzz

Integrationstipps:

  • AFL_USE_ASAN=1 fügt automatisch die richtigen Kompilierungsflags hinzu
  • -m none verwenden, um die Speicherbegrenzung von AFL++ zu deaktivieren
  • Erwägen Sie AFL_MAP_SIZE für Programme mit großen Coverage Maps

Siehe: AFL++: AddressSanitizer

cargo-fuzz (Rust)

Verwenden Sie das Flag --sanitizer=address:

cargo fuzz run fuzz_target --sanitizer=address

Oder konfigurieren Sie es in fuzz/Cargo.toml:

[profile.release]
opt-level = 3
debug = true

Integrationstipps:

  • ASan ist nützlich zum Fuzzen von unsicherem Rust-Code oder FFI-Grenzen
  • Sicherer Rust-Code profitiert möglicherweise weniger (der Compiler verhindert bereits viele Fehler)
  • Konzentrieren Sie sich auf unsichere Blöcke, rohe Zeiger und C-Bibliotheksbindungen

Siehe: cargo-fuzz: AddressSanitizer

honggfuzz

Kompilieren Sie mit ASan und linken Sie mit honggfuzz:

honggfuzz -i input_dir -o output_dir -- ./fuzz_target_asan

Kompilieren des Ziels:

hfuzz-clang -fsanitize=address -g target.c -o fuzz_target_asan

Integrationstipps:

  • honggfuzz funktioniert standardmäßig gut mit ASan
  • Verwenden Sie den feedbackgesteuerten Modus für eine bessere Abdeckung mit Sanitizern
  • Überwachen Sie die Speichernutzung, da ASan den Speicherverbrauch erhöht

Fehlerbehebung

ProblemUrsacheLösung
Fuzzer beendet Prozess sofortSpeicherlimit zu niedrig für ASans 20 TB virtuellen Speicher-rss_limit_mb=0 (libFuzzer) oder -m none (AFL++) verwenden
"ASan runtime not initialized"Falsche Link-Reihenfolge oder fehlende LaufzeitSicherstellen, dass -fsanitize=address sowohl beim Kompilieren als auch beim Linken verwendet wird
Leckberichte überladen AusgabeLeakSanitizer ist standardmäßig aktiviertASAN_OPTIONS=detect_leaks=0 setzen
Schlechte Leistung (>4x Verlangsamung)Debug-Modus oder nicht optimierter BuildMit -O2 oder -O3 zusammen mit -fsanitize=address kompilieren
ASan erkennt offensichtliche Fehler nichtBinary nicht instrumentiertMit ASAN_OPTIONS=verbosity=1 überprüfen, ob ASan Startinformationen ausgibt
FalschpositiveInterceptor-KonflikteÜberprüfen Sie die ASan-FAQ auf bekannte Probleme mit bestimmten Bibliotheken

Verwandte Fähigkeiten

Werkzeuge, die diese Technik verwenden

FähigkeitWie es angewendet wird
libfuzzerKompilieren mit -fsanitize=fuzzer,address für integriertes Fuzzing mit Speicherfehlererkennung
aflppUmgebungsvariable AFL_USE_ASAN=1 während der Kompilierung verwenden
cargo-fuzzFlag --sanitizer=address verwenden, um ASan für Rust-Fuzz-Targets zu aktivieren
honggfuzzZiel mit -fsanitize=address für ASan-instrumentiertes Fuzzing kompilieren

Verwandte Techniken

FähigkeitBeziehung
undefined-behavior-sanitizerWird oft zusammen mit ASan verwendet, um eine umfassende Fehlererkennung zu erreichen (undefiniertes Verhalten + Speicherfehler)
fuzz-harness-writingHarness muss so ausgelegt sein, dass es ASan-erkannte Abstürze behandelt und falschpositive vermeidet
coverage-analysisAbdeckungsgesteuertes Fuzzing hilft, Codepfade auszulösen, in denen ASan Speicherfehler erkennen kann

Ressourcen

Wichtige externe Ressourcen

AddressSanitizer auf Google Sanitizers Wiki

Die offizielle ASan-Dokumentation behandelt:

  • Algorithmus und Implementierungsdetails
  • Vollständige Liste der erkannten Fehlertypen
  • Leistungsmerkmale und Overhead
  • Plattformspezifisches Verhalten
  • Bekannte Einschränkungen und Inkompatibilitäten

SanitizerCommonFlags

Allgemeine Konfigurationsflags, die von allen Sanitizern gemeinsam genutzt werden:

  • verbosity: Steuerung der Diagnoseausgabestufe
  • log_path: Umleitung der Sanitizer-Ausgabe in Dateien
  • symbolize: Aktivieren/Deaktivieren der Symbolauflösung in Berichten
  • external_symbolizer_path: Benutzerdefinierten Symbolizer verwenden

AddressSanitizerFlags

ASan-spezifische Konfigurationsoptionen:

  • detect_leaks: Steuerung der Speicherleckerfassung
  • abort_on_error: abort() vs. _exit() bei Fehler aufrufen
  • detect_stack_use_after_return: Erkennung von Use-After-Return-Fehlern auf dem Stack
  • check_initialization_order: Fehler in der Initialisierungsreihenfolge finden

AddressSanitizer FAQ

Häufige Fallstricke und Lösungen:

  • Probleme mit der Link-Reihenfolge
  • Konflikte mit anderen Tools
  • Plattformspezifische Probleme
  • Tipps zur Leistungsoptimierung

Clang AddressSanitizer Dokumentation

Clang-spezifische Anleitung:

  • Kompilierungsflags und Optionen
  • Interaktion mit anderen Clang-Funktionen
  • Unterstützte Plattformen und Architekturen

GCC Instrumentierungsoptionen

GCC-spezifische ASan-Dokumentation:

  • GCC-spezifische Flags und Verhalten
  • Unterschiede zur Clang-Implementierung
  • Plattformunterstützung in GCC

AddressSanitizer: A Fast Address Sanity Checker (USENIX Paper)

Original-Forschungspapier mit technischen Details:

  • Algorithmus für Schattenspeicher
  • Anforderungen an virtuellen Speicher (historisch 16 TB, heute ca. 20 TB)
  • Leistungsbenchmarks
  • Designentscheidungen und Abwägungen

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

SamuelChien/mega-skills-collection

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

SamuelChien/mega-skills-collection

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

SamuelChien/mega-skills-collection

Ingeniero de Sistemas de Andru.ia. Diseña, redacta y despliega nuevas habilidades (skills) dentro del repositorio siguiendo el Estándar de Diamante.

SamuelChien/mega-skills-collection

Estratega de Inteligencia de Dominio de Andru.ia. Analiza el nicho específico de un proyecto para inyectar conocimientos, regulaciones y estándares únicos del sector. Actívalo tras definir el nicho.

SamuelChien/mega-skills-collection

2D game development principles. Sprites, tilemaps, physics, camera.

SamuelChien/mega-skills-collection

3D game development principles. Rendering, shaders, physics, cameras.

SamuelChien/mega-skills-collection

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.

SamuelChien/mega-skills-collection

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

SamuelChien/mega-skills-collection

Ab Test Analyzer - Auto-activating skill for Data Analytics. Triggers on: ab test analyzer, ab test analyzer Part of the Data Analytics skill category.

SamuelChien/mega-skills-collection

A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.

SamuelChien/mega-skills-collection

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "conversion experiment," "statistical significance," or "test this." For tracking implementation, see analytics-tracking.

SamuelChien/mega-skills-collection

Acceptance Criteria Creator - Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category.

SamuelChien/mega-skills-collection

Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.

SamuelChien/mega-skills-collection

Accessibility Audit Runner - Auto-activating skill for Frontend Development. Triggers on: accessibility audit runner, accessibility audit runner Part of the Frontend Development skill category.

SamuelChien/mega-skills-collection

You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance.

SamuelChien/mega-skills-collection

Web accessibility patterns for WCAG 2.2 compliance including ARIA, keyboard navigation, screen readers, and testing

SamuelChien/mega-skills-collection

Manage Discord channel access — approve pairings, edit allowlists, set DM/group policy. Use when the user asks to pair, approve someone, check who's allowed, or change policy for the Discord channel.

SamuelChien/mega-skills-collection

Create unified specification packages across Business, Development, and Design teams. Staged elaboration (L0 Vision → L1 Requirements → L2 Team Detail → L3 Acceptance Criteria) to build shared understanding. Does not write code.

SamuelChien/mega-skills-collection

Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]", or "tell me about [company]".

SamuelChien/mega-skills-collection

Validate messaging consistency across website, GitHub repos, and local documentation generating read-only discrepancy reports. Use when checking content alignment or finding mixed messaging. Trigger with phrases like "check consistency", "validate documentation", or "audit messaging".

Verwandte Skills