Wie SAST die OWASP Top 10 Schwachstellen behebt

Statische Codeanalyse für Sicherheitszwecke: Wie SAST die OWASP Top 10 Schwachstellen behebt

Sicherheitslücken lassen sich leichter verhindern als beheben. Eine SQL-Injection-Schwachstelle, die bei einer Codeüberprüfung entdeckt wird, lässt sich in wenigen Minuten beheben. Dieselbe Schwachstelle, die erst nach einem Sicherheitsvorfall entdeckt wird, verursacht wochenlange Vorfälle, behördliche Untersuchungen und Maßnahmen zur Behebung des Problems – ganz zu schweigen von den Daten, die in der Zwischenzeit abgegriffen wurden. Statische Codeanalyse ist die Methode, solche Probleme zu finden, bevor der Code ausgeführt wird. Dazu werden Quellcodestruktur, Datenfluss und Muster anhand bekannter Schwachstellensignaturen untersucht. Systematisch angewendet, wird Sicherheit so von einer reaktiven Maßnahme zu einem integralen Bestandteil des Entwicklungsprozesses.

Die OWASP Top 10 ist der maßgebliche Katalog der kritischsten Sicherheitsrisiken für Webanwendungen. Sie wird vom Open Web Application Security Project (OWASP) auf Basis realer Schwachstellendaten aus Tausenden von Anwendungen aktualisiert. Jeder Eintrag in der Liste ist mit statischen Analysetools in unterschiedlichem Maße erkennbar. Dieser Leitfaden ordnet jede OWASP-Kategorie den Erkenntnissen der statischen Analyse zu, zeigt das anfällige Codemuster und sein sicheres Äquivalent und erklärt, welche Tools die jeweilige Technik anwenden.

Finde die Sicherheitslücke, bevor die Angreifer sie finden.

SMART TS XL Verfolgt Sicherheitslücken von JavaScript-APIs über Java-Dienste bis hin zu COBOL-Backends.

Mehr Infos

Was ist statisches Anwendungssicherheitstesting (SAST)?

Statische Anwendungssicherheitstests (SAST) analysieren Quellcode, Bytecode oder Binärdateien, ohne das Programm auszuführen. Die Analyse untersucht den Datenfluss innerhalb der Anwendung, welche sicherheitsrelevanten Operationen diese Daten erreichen und ob ein Pfad von einer externen Eingabe (Benutzereingabe, HTTP-Parameter, Dateiinhalte, Umgebungsvariablen) ohne angemessene Validierung oder Bereinigung zu einer gefährlichen Operation (Datenbankabfrage, Systembefehl, HTML-Ausgabe, kryptografische Funktion) führt.

SAST ist eine Ebene in einem umfassenden Programm zur Anwendungssicherheit. Um zu verstehen, wo es seinen Platz hat, muss man es mit den Alternativen vergleichen:

AnsatzWenn es läuftWas es findetWas es fehlt
SAST (statisch)Vor der Ausführung, im QuellcodeSchwachstellen auf Codeebene, Einschleusungsmuster, kryptografischer Missbrauch, fest codierte GeheimnisseLaufzeit-Schwachstellen, Konfigurationsprobleme bei der Bereitstellung
DAST (Dynamisch)gegen eine laufende AnwendungLaufzeitverhalten, Authentifizierungsfehler, ServerkonfigurationsproblemeCode-Level-Muster, die während des Testens nicht ausgelöst wurden
SCA (Software Composition Analysis)Auf AbhängigkeitsmanifestenBekannte CVEs in DrittanbieterbibliothekenSchwachstellen in benutzerdefiniertem Code
IAST (Interaktiv)Während der Testdurchführung mit InstrumentierungLaufzeitdatenflüsse mit hoher GenauigkeitErfordert laufende Anwendung, langsamere Rückmeldung

SAST liefert frühzeitiges Feedback und wird auf noch nicht bereitgestelltem Code ausgeführt – weder in der CI/CD-Pipeline noch in der IDE –, bevor die Schwachstelle überhaupt eine Testumgebung erreicht. Diese Frühzeitigkeit ist sein primärer Sicherheitsvorteil.

Welche Arten von Bedrohungen können durch statische Codeanalyse abgemildert werden?

Dies ist eine der am häufigsten gesuchten Fragen zu SAST. Die direkte Antwort:

Die statische Codeanalyse kann Bedrohungen abwehren, die sich in Quellcodemustern manifestieren : Injection-Schwachstellen (SQL, Command, XSS), kryptografischen Missbrauch, fest codierte Anmeldeinformationen, unsichere Authentifizierungsimplementierungen, fehlerhafte Zugriffskontrolle in der Codelogik und Datenintegritätsprobleme. Sie kann jedoch keine Bedrohungen abwehren, die aus der Laufzeitkonfiguration, der Netzwerktopologie oder der Infrastruktureinrichtung resultieren; hierfür sind DAST, Penetrationstests oder Sicherheitsüberprüfungen der Infrastruktur erforderlich.

Statische Analyse vs. dynamische Analyse für die OWASP-Abdeckung

Dynamische (DAST) und statische (SAST) Analyse finden unterschiedliche Teilmengen von OWASP-Schwachstellen. Keine der beiden Methoden deckt alle Schwachstellen ab. Der OWASP Web Security Testing Guide (WSTG) ist der methodische Rahmen für dynamische Tests; SAST-Tools wie CodeQL, Semgrep und SonarQube untersuchen den Quellcode.

OWASP Top 10 KategorieSAST-AbdeckungDAST-Abdeckung
Unterbrochene ZugangskontrolleTeilweise, Lücken in der CodelogikGute Laufzeitverhaltenstests
Kryptografische FehlerStarke algorithmische ErkennungSchwach, von außen schwer zu beobachten
SpritzeStarke, VerunreinigungenanalyseStarke, aktive Nutzlasttests
Unsicheres DesignTeilweise MustererkennungSchwach, erfordert Designkenntnisse
SicherheitskonfigurationTeilweise, Konfiguration im CodeStarke Tests in realen Umgebungen
Anfällige KomponentenSchwach, SCA ist besserSchwach, SCA ist besser
AuthentifizierungsfehlerTeilweise, fest codierte Anmeldeinformationen, schwache MusterStarke Tests für Sitzungen und Authentifizierung
DatenintegritätsfehlerPartielle DeserialisierungsmusterSchwach, von außen schwer zu erkennen
ProtokollierungsfehlerTeilweise, fehlende ProtokollmeldungenSchwache, schwer wahrnehmbare Abwesenheit
SSRFStarke Beeinträchtigung des HTTP-AufrufsStarke, aktive Anforderungstests

Fazit: SAST und DAST ergänzen sich. Für eine maximale OWASP-Abdeckung sollten beide ausgeführt werden. Für budgetbeschränkte Teams, die bei null anfangen, empfiehlt sich SAST als erstes Programm, da es das schnellste Entwicklerfeedback und die umfassendste Abdeckung von Code-Injections bietet.

OWASP Top 10: Was die statische Analyse aufdeckt und wie

A01, Defekte Zugangskontrolle

Mangelhafte Zugriffskontrolle stellt das größte OWASP-Risiko dar. Die statische Analyse deckt die Auswirkungen auf Codeebene auf: fehlende Autorisierungsprüfungen für Funktionen und Endpunkte, Objektverweise, die interne IDs ohne Validierung offenlegen, und fest codierte Rollenzuweisungen, die die vorgesehenen Berechtigungsstrukturen umgehen.

Was die statische Analyse aufdeckt: Methoden, die sensible Operationen ohne entsprechende Autorisierungsprüfung durchführen; direkte Objektverweise, bei denen die Objekt-ID aus Benutzereingaben ohne Zugriffsvalidierung stammt; Force-Browsing-Muster, bei denen der Authentifizierungsstatus geprüft wird, die Objektbesitzverhältnisse jedoch nicht.

Java

// Vulnerable: no ownership check -- any authenticated user can access any order
@GetMapping("/orders/{orderId}")
public Order getOrder(@PathVariable Long orderId) {
    return orderRepository.findById(orderId).orElseThrow();
}

// Secure: verify the order belongs to the requesting user
@GetMapping("/orders/{orderId}")
public Order getOrder(@PathVariable Long orderId,
                      @AuthenticationPrincipal UserDetails user) {
    Order order = orderRepository.findById(orderId).orElseThrow();
    if (!order.getOwnerId().equals(user.getUserId())) {
        throw new AccessDeniedException("Order does not belong to requesting user");
    }
    return order;
}

Was die statische Analyse nicht aufdecken kann: Laufzeitfehler bei der Zugriffskontrolle, bei denen die Logik korrekt ist, die zur Entscheidungsfindung verwendeten Daten jedoch kompromittiert sind. Für solche Fälle sind DAST und Penetrationstests erforderlich.

A02, Kryptografische Fehler

Schwache Kryptographie ist durch statische Analyse zuverlässig erkennbar, da die anfälligen Muster, MD5, SHA-1, DES, ECB-Modus, fest codierte Schlüssel, im Quellcode lexikalisch identifizierbar sind.

python

# Vulnerable: MD5 for password hashing (broken algorithm)
import hashlib
password_hash = hashlib.md5(password.encode()).hexdigest()

# Vulnerable: hardcoded encryption key
KEY = b"mysecretkey12345"
cipher = AES.new(KEY, AES.MODE_ECB)  # ECB mode also vulnerable

# Secure: bcrypt for passwords, environment-sourced keys
import bcrypt, os
password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))

# Secure: AES-GCM with environment-sourced key
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = os.environ["ENCRYPTION_KEY"].encode()
aesgcm = AESGCM(key)

Regeln für die statische Analyse: MD5/SHA-1 für sicherheitsrelevante Zwecke, DES/3DES/RC4/ECB-Modus, fest codierte kryptografische Schlüssel und Geheimnisse, HTTP statt HTTPS für die Übertragung sensibler Daten und deaktivierte Zertifikatsprüfung (verify=False in Python requests, setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER) in Java).

A03, Einspritzung

Injection (SQL, Betriebssystembefehle, LDAP, XSS, Template-Injection) ist die Kategorie, in der die interprozedurale Taint-Analyse ihren größten Nutzen entfaltet. Die Schwachstelle erfordert die Verfolgung nicht vertrauenswürdiger Eingaben von ihrer Quelle über Funktionsaufrufe bis hin zu einem gefährlichen Ziel.

Javascript

// Vulnerable: direct string interpolation in SQL (SQL injection)
app.get('/users', async (req, res) => {
    const name = req.query.name;
    const result = await db.query(`SELECT * FROM users WHERE name = '${name}'`);
    res.json(result.rows);
});

// Secure: parameterized query
app.get('/users', async (req, res) => {
    const name = req.query.name;
    const result = await db.query('SELECT * FROM users WHERE name = $1', [name]);
    res.json(result.rows);
});

php

// Vulnerable: unescaped output (XSS)
echo "Welcome, " . $_GET['username'];

// Secure: context-appropriate escaping
echo "Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8');

scharf

// Vulnerable: command injection in C#
var process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c " + userInput;
process.Start();

// Secure: avoid shell interpretation, validate and whitelist inputs
var allowedCommands = new HashSet<string> { "report", "export" };
if (!allowedCommands.Contains(userInput))
    throw new ArgumentException("Invalid command");

Tools zur interprozeduralen Taint-Analyse für Injection: CodeQL (am präzisesten), Semgrep mit Taint-Modus, Snyk Code, SonarQube mit Sicherheitsregeln.

A04, Unsicheres Design

Unsicheres Design ist die schwierigste OWASP-Kategorie für die statische Analyse, da sie Architekturentscheidungen und nicht Codemuster betrifft. Die statische Analyse kann die Symptome aufzeigen:

Fehlende Logik zur Ratenbegrenzung an Authentifizierungsendpunkten, fehlende Kontosperrung nach fehlgeschlagenen Versuchen, Geschäftslogik, die Validierungsschritte überspringt, und Funktionen, die privilegierte Operationen ohne Protokollierung durchführen – all dies sind als fehlende Muster erkennbar. Eine statische Analyse, die das Fehlende anstatt des Vorhandenen meldet, kann hier Abhilfe schaffen.

Einige SAST-Tools unterstützen benutzerdefinierte Regeln, mit denen sich Sicherheitsanforderungen für Organisationen abbilden lassen: Jede Controller-Methode muss eine Autorisierungsfunktion aufrufen, jeder Datenbankzugriff muss durch eine Eingabevalidierung abgesichert werden, und jeder externe API-Aufruf muss ein Timeout verwenden. Diese benutzerdefinierten Regeln wandeln Designanforderungen in durchsetzbare Codebeschränkungen um.

A05, Sicherheitsfehlkonfiguration

Zu den Sicherheitsfehlkonfigurationen im Code gehören: deaktivierte Sicherheitsfunktionen, permissive CORS-Header, fehlende Sicherheitsantwort-Header, aktivierter Debug-Modus in der Produktion und ausführliche Fehlermeldungen, die Stack-Traces offenlegen.

python

# Vulnerable: Flask debug mode enables interactive debugger in production
app = Flask(__name__)
app.run(debug=True)  # exposes console access if error occurs

# Vulnerable: overly permissive CORS
from flask_cors import CORS
CORS(app, origins="*")  # allows any origin

# Secure: environment-controlled debug, restricted CORS
import os
debug_mode = os.environ.get("FLASK_DEBUG", "false").lower() == "true"
CORS(app, origins=os.environ.get("ALLOWED_ORIGINS", "").split(","))
app.run(debug=debug_mode)

Flag für statische Analyseregeln: Debug-Modus gesetzt auf True im Quellcode, Wildcard-CORS-Ursprünge, fehlende Sicherheitsheader in HTTP-Antwortkonfigurationen, deaktivierte SSL-Zertifikatsprüfung und Standardanmeldeinformationen in Konfigurationsdateien.

A06, Anfällige und veraltete Komponenten

Diese Kategorie wird primär durch die Software Composition Analysis (SCA) und nicht durch den traditionellen SAST abgedeckt. SCA-Scans package.json, pom.xml, requirements.txtund ähnliche Manifeste gegen Schwachstellendatenbanken (National Vulnerability Database, GitHub Advisory Database).

SAST leistet seinen Beitrag, indem es die Verwendung veralteter APIs, Aufrufe von Bibliotheksfunktionen, die aufgrund von Sicherheitslücken überholt sind, oder die direkte Verwendung anfälliger Muster identifiziert, die selbst aktuelle Bibliotheken nicht mehr empfehlen.

Werkzeuge speziell für A06: npm audit, pip-audit, snyk test, OWASP Dependency-Check, GitHub Dependabot und Mend (ehemals WhiteSource).

A07, Identifizierungs- und Authentifizierungsfehler

Die statische Analyse identifiziert Anti-Patterns für die Authentifizierung auf Codeebene: fest codierte Passwörter, schwache Passwortvalidierung, Sitzungstoken, die mit nicht-kryptografischer Zufälligkeit generiert werden, fehlende Sitzungsungültigmachung beim Abmelden und JWT-Implementierungen, die die none Algorithmus.

Javascript

// Vulnerable: JWT accepting 'none' algorithm -- allows signature bypass
const decoded = jwt.verify(token, secret, { algorithms: ['HS256', 'none'] });

// Vulnerable: hardcoded admin credentials
if (username === 'admin' && password === 'admin123') {
    grantAccess();
}

// Secure: algorithm whitelist, no hardcoded credentials
const decoded = jwt.verify(token, process.env.JWT_SECRET, {
    algorithms: ['HS256']  // explicit allowlist only
});

scharf

// Vulnerable: weak random for session token generation in C#
var sessionToken = new Random().Next().ToString();

// Secure: cryptographically secure random
using var rng = RandomNumberGenerator.Create();
var bytes = new byte[32];
rng.GetBytes(bytes);
var sessionToken = Convert.ToBase64String(bytes);

A08, Software- und Datenintegritätsfehler

Diese Kategorie umfasst unsichere Deserialisierung und nicht verifizierte Software-Updates. Die statische Analyse erkennt: Java ObjectInputStream Deserialisierung von Daten aus nicht vertrauenswürdigen Quellen, Python pickle.loads() auf externen Daten, PHP unserialize() mit benutzergesteuerter Eingabe und YAML-Parsern, die unsichere Lader verwenden.

python

# Vulnerable: pickle deserialization of untrusted data
import pickle
data = pickle.loads(request.data)  # arbitrary code execution risk

# Vulnerable: unsafe YAML loader
import yaml
config = yaml.load(user_input)  # yaml.load without Loader is unsafe

# Secure: safe alternatives
import json
data = json.loads(request.data)  # JSON cannot execute code

import yaml
config = yaml.safe_load(user_input)  # safe_load disables arbitrary object creation

A09, Sicherheitsprotokollierungs- und Überwachungsfehler

Protokollierungsfehler lassen sich durch statische Analyse anhand fehlender Muster erkennen: sensible Operationen, Authentifizierungsereignisse, Zugriffskontrollentscheidungen und Datenänderungen erfolgen ohne zugehörige Protokolleinträge. Regeln der statischen Analyse können vorschreiben, dass bestimmte Funktionsaufrufe stets zusammen mit Aufrufen des Audit-Logs erfolgen.

Was die statische Analyse aufdeckt: Protokollierung von Passwörtern oder Tokens (die Protokollierung sensibler Daten stellt ebenfalls eine Schwachstelle dar), Ausnahmebehandlungsroutinen, die Fehler stillschweigend unterdrücken, ohne sie zu protokollieren, und Catch-Blöcke, die die Rohausnahmemeldung protokollieren (die sensible Daten enthalten kann).

Java

// Vulnerable: swallowed exception, no logging
try {
    authenticateUser(username, password);
} catch (Exception e) {
    // silent failure -- no log, no audit trail
}

// Vulnerable: logging sensitive data
log.info("User logged in with password: " + password);

// Secure: log the event, not the credential
try {
    authenticateUser(username, password);
    auditLog.info("Authentication success for user: {}", username);
} catch (AuthenticationException e) {
    auditLog.warn("Authentication failure for user: {}", username);
    throw e;  // do not swallow
}

A10, Serverseitige Anforderungsfälschung (SSRF)

SSRF ist ein starkes Argument für die Analyse von programmübergreifenden Sicherheitslücken. Die Schwachstelle erfordert die Verfolgung von Benutzereingaben bis hin zu einer HTTP-Anfrage, oft über mehrere Funktionsaufrufe hinweg. Ein Tool, das lediglich einzelne Funktionen analysiert, kann SSRF nicht erkennen, wenn die URL-Erstellung und der HTTP-Aufruf in unterschiedlichen Funktionen erfolgen.

python

# Vulnerable: user-controlled URL in HTTP request (SSRF)
import requests

def fetch_resource(url):
    return requests.get(url).content  # no validation

def api_endpoint(request):
    target = request.json().get("url")    # attacker controls this
    return fetch_resource(target)          # SSRF across function boundary

# Secure: allowlist validation before making the request
from urllib.parse import urlparse

ALLOWED_HOSTS = {"api.internal.example.com", "cdn.example.com"}

def fetch_resource(url: str) -> bytes:
    parsed = urlparse(url)
    if parsed.hostname not in ALLOWED_HOSTS:
        raise ValueError(f"URL host not allowed: {parsed.hostname}")
    return requests.get(url, timeout=5).content

Statische Codeanalyse-Tools für OWASP Security

Die folgende Tabelle ordnet die wichtigsten SAST-Tools den OWASP-Kategorien zu, die sie am effektivsten abdecken:

WerkzeugPrimärsprachenOWASP-StärkenAnsatz
CodeQLJava, JS/TS, Python, C/C++, Go, RubyA03 Einspritzung, A10 SSRF (tiefer Geschmacksverlust)Interprozedurale semantische Analyse
SemgrepÜber 30 SprachenA03, A02, A07 (musterbasiert + Taint-Modus)Mustererkennung + oberflächliche Verfälschung
Snyk-CodeJava, JS/TS, Python, C#A03, A07, A08ML-basierte Taint-Analyse
SonarQubeÜber 30 SprachenA02, A03, A05, A07, A09Regelbasiert + Datenfluss
ScheckmarxÜber 30 SprachenVollständige OWASP-BerichterstattungInterprozedurale Beeinträchtigung
VeracodeJava, .NET, JS, PHPVollständige OWASP-BerichterstattungBytecode- und Taint-Analyse
OWASP ZAPSprachagnostischA01, A05, A07 (Laufzeit)DAST, dynamisches Testen
SMART TS XLCOBOL, JCL, Java, Python, RPG, SQLSprachübergreifende Beeinträchtigung, AbhängigkeitsrisikoSprachübergreifende Struktur + Verunreinigung

Wie SMART TS XL Behandelt Sicherheit in Unternehmenscodebasen

Unternehmenssicherheitsprogramme stehen vor einer Herausforderung, die SAST-Tools für einzelne Sprachen nicht bewältigen können: Die Angriffsfläche erstreckt sich über mehrere Sprachen. Eine Webanwendung kann Benutzereingaben in JavaScript entgegennehmen, diese in Java verarbeiten und über eine Message Queue an ein COBOL-Programm weiterleiten, das SQL-Abfragen gegen eine DB2-Datenbank ausführt. Die Injection-Schwachstelle besteht über vier Sprachgrenzen hinweg. Kein Scanner für eine einzelne Sprache erfasst den gesamten Angriffspfad.

SMART TS XL statische Code-Analyse Umfasst gleichzeitig alle Sprachen dieser Kette. Wenn nicht vertrauenswürdige Eingaben von einem JavaScript-API-Handler über einen Java-Dienst in ein COBOL-Programm fließen, das eine dynamische SQL-Abfrage erstellt, SMART TS XL verfolgt diesen Pfad durch den gesamten sprachübergreifenden Aufrufgraphen, die gleiche interprozedurale Taint-Verfolgung, die CodeQL innerhalb von Java anwendet, angewendet auf Java, COBOL und SQL gemeinsam.

Die Funktion zur Abbildung von Anwendungsabhängigkeiten liefert eine sicherheitsrelevante Sicht darauf, welche Systemkomponenten mit externen Eingaben interagieren, welche privilegierte Operationen erreichen und wie die gesamte Angriffsfläche des Systems tatsächlich aussieht. Diese architektonische Sicherheitssicht ist die Grundlage für die Bedrohungsmodellierung; Bedrohungen gegen ein System, dessen Struktur man nicht versteht, lassen sich nicht modellieren.

Die Auswirkungsanalyse unterstützt Sicherheitsmaßnahmen: Wird eine Schwachstelle in einer Komponente gefunden, identifiziert die Auswirkungsanalyse alle anderen Komponenten, die von dieser Komponente abhängen. So lässt sich der Umfang der Behebungsmaßnahmen präzise festlegen, bevor Codeänderungen vorgenommen werden. Bei großen, älteren Codebasen, in denen ein COBOL-Programm mit einer Sicherheitslücke von Hunderten anderer Programme eingebunden wird, ist die Kenntnis des vollständigen Umfangs der Behebung vor Beginn entscheidend für den Erfolg der Maßnahmen und verhindert eine Kettenreaktion von Sicherheitsvorfällen.

Für Organisationen, die Modernisierung des Altbestands Bei der Entwicklung solcher Programme ist die Sicherheitsanalyse des bestehenden Quellcodes eine Grundvoraussetzung und kein nachträglicher Gedanke. Die Migration anfälliger COBOL-Programme nach Java führt zu anfälligen Java-Programmen. SMART TS XLDie Sicherheitsanalyse von [Name des Unternehmens] stellt sicher, dass die Schwachstellen im Rahmen des Modernisierungsprozesses identifiziert und behoben werden und nicht erst im migrierten System entdeckt werden.

Integration von SAST in den Entwicklungslebenszyklus

Die statische Sicherheitsanalyse ist dann am nützlichsten, wenn sie zum Zeitpunkt der Entscheidungsfindung durchgeführt wird, also dort, wo der Code geschrieben und überprüft wird, und nicht erst nach dessen Bereitstellung.

In der IDE: SonarLint, die IDE-Erweiterungen von Snyk und die VS Code-Erweiterung von CodeQL zeigen Schwachstellen direkt im Code an, während Entwickler schreiben. Ein SQL-Injection-Flag, das erscheint, sobald ein Entwickler das anfällige Muster eingibt, lässt sich in Sekundenschnelle beheben.

Bei Pull Requests: SAST, integriert in GitHub Actions, GitLab CI oder Jenkins, wird bei jedem Pull Request ausgeführt und die Ergebnisse werden als Inline-Code-Review-Kommentare angezeigt. Der Entwickler sieht die Ergebnisse im Kontext, zusammen mit dem Code, der sie verursacht hat.

Als Qualitätssicherungsmechanismus: Das Qualitätssicherungsmodell von SonarQube verhindert Zusammenführungen, sobald neue kritische Sicherheitslücken auftreten. Dadurch wird Sicherheit nicht zu einem optionalen Prüfschritt, sondern zu einer strukturellen Voraussetzung des Zusammenführungsprozesses.

Regelmäßig: Eine tiefgehende interprozedurale Analyse, CodeQL, Checkmarx, vollständige Semgrep-Regelsätze, ist typischerweise zu langsam für die Ausführung pro Commit, wird aber nächtlich oder wöchentlich auf dem Hauptzweig ausgeführt und findet Schwachstellen, die eine vollständige Aufrufgraphenanalyse erfordern, um erkannt zu werden.

Der mehrschichtige Ansatz, schnelle musterbasierte Regeln in der IDE und bei Commits, tiefgreifende Taint-Analyse bei Pull Requests und nächtlichen Builds, bietet sowohl die Unmittelbarkeit, die Entwickler benötigen, als auch die Gründlichkeit, die Sicherheitsprogramme erfordern.