Sicherheits-Checkliste

KRITIS/NIS2-konforme Sicherheitsprüfung basierend auf CWE-Schwachstellen und Angriffsmustern.

Diese Checkliste ist Pflicht bei Änderungen an: Netzwerk, Authentifizierung, Kryptographie, Datenbank, externen APIs.

Wann anwenden

Diese Checkliste anwenden wenn die Änderung betrifft:

  • Kryptographische Operationen
  • Authentifizierung / Autorisierung
  • Netzwerk-Kommunikation
  • Datenbank-Zugriff
  • Externe API-Aufrufe
  • Datei-Uploads
  • Benutzereingaben

Kryptographische Sicherheit

Prüfung CWE Beschreibung
[ ] Nonce-Eindeutigkeit CWE-323 AES-GCM Nonce muss pro Verschlüsselung eindeutig sein
[ ] Nonce-Tracking CWE-323 Verwendete Nonces tracken, MAX_NONCES_PER_KEY erzwingen
[ ] Schlüsselrotation CWE-323 Schlüssel nach Nonce-Limit rotieren
[ ] Kryptographischer RNG CWE-330 OpenSSL/OS CSPRNG für Schlüssel/Nonces
[ ] Zufällige IDs CWE-330 Keine sequentiellen Schlüssel/Session-IDs
[ ] Konstante-Zeit-Vergleich CWE-208 Für Secrets, MACs, Tokens, API-Keys
[ ] Replay-Schutz CWE-294 Nonce/Timestamp/Sequenz-Tracking
[ ] Kanal-Verschlüsselung CWE-300 mTLS für externe Kommunikation

Beispiel: Konstante-Zeit-Vergleich

(* VERBOTEN - Timing-Angriff möglich *)
function VerifyToken(const AToken, AExpected: string): Boolean;
begin
  Result := AToken = AExpected;  (* Bricht bei erstem Unterschied ab! *)
end;
 
(* KORREKT - Konstante Zeit *)
function VerifyToken(const AToken, AExpected: string): Boolean;
var
  I: Integer;
  Diff: Byte;
begin
  if Length(AToken) <> Length(AExpected) then
    Exit(False);
 
  Diff := 0;
  for I := 1 to Length(AToken) do
    Diff := Diff or (Ord(AToken[I]) xor Ord(AExpected[I]));
 
  Result := Diff = 0;
end;

Speicher-Sicherheit

Prüfung CWE Beschreibung
[ ] Memory Zeroization CWE-316 Secrets nach Verwendung löschen
[ ] Keine Secrets in Logs CWE-532 Niemals Schlüssel, Passwörter, Tokens loggen
[ ] Sichere String-Behandlung CWE-316 SecureString (C#), secrecy (Rust)
[ ] Schlüsselmaterial gelöscht CWE-316 try-finally garantiert Cleanup bei Exception

Beispiel: Zeroization

procedure ProcessSecret(const ASecret: string);
var
  LocalCopy: string;
begin
  LocalCopy := ASecret;
  try
    (* Verarbeitung *)
    DoSomethingWith(LocalCopy);
  finally
    (* Secret löschen - nicht nur freigeben! *)
    FillChar(LocalCopy[1], Length(LocalCopy) * SizeOf(Char), 0);
    LocalCopy := '';
  end;
end;

Eingabevalidierung

Prüfung CWE Beschreibung
[ ] Größenlimits CWE-400 MAX_PAYLOAD_SIZE erzwingen (Standard: 64KB)
[ ] Integer-Overflow CWE-190 SafeAdd(), checked_add(), geprüfte Arithmetik
[ ] Null-Prüfungen CWE-476 An allen API-Grenzen
[ ] Kein Unwrap bei Input CWE-248 Ordentliche Fehlerbehandlung, kein Panic
[ ] Parametrisierte Queries CWE-89 Niemals String-Konkatenation für SQL
[ ] Zeichen-Validierung - Whitelist für Identifier wo angemessen

Beispiel: SQL Injection Prevention

(* VERBOTEN - SQL Injection möglich *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = ''' + AUsername + '''';
  Query.Open;
end;
 
(* KORREKT - Parametrisiert *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = :username';
  Query.ParamByName('username').AsString := AUsername;
  Query.Open;
end;

Fehlerbehandlung (Sicherheit)

Prüfung CWE Beschreibung
[ ] Sanitisierte Meldungen CWE-209 Keine Pfade/Versionen/Stack-Traces an Client
[ ] Vollständiges Logging - Intern vollständigen Fehler loggen vor Sanitisierung
[ ] Kein Panic im Service CWE-248 Graceful Recovery, Service bleibt aktiv
[ ] Stack-Trace erhalten - Re-Throw ohne Wrapping

Beispiel: Sanitisierte Fehlermeldungen

(* VERBOTEN - Zu viel Information *)
procedure HandleError(E: Exception);
begin
  ShowMessage('Error in C:\Users\Admin\App\src\Database.pas:142: ' + E.Message);
end;
 
(* KORREKT - Intern loggen, extern sanitisieren *)
procedure HandleError(E: Exception);
begin
  (* Intern vollständig loggen *)
  Logger.Error('Database error at %s: %s', [E.ClassName, E.Message]);
 
  (* Extern nur sanitisierte Meldung *)
  raise EUserError.Create(rsDatabaseOperationFailed);
end;

Verfügbarkeit (DoS-Schutz)

Prüfung CWE Beschreibung
[ ] Rate Limiting CWE-400 Token Bucket pro Client/Endpoint
[ ] Request-Größenlimits CWE-400 Überdimensionierte Payloads früh ablehnen
[ ] Lock-Sicherheit CWE-667 Lock-Recovery-Mechanismus
[ ] Ressourcen-Cleanup CWE-772 try-finally, using, defer, RAII - immer
[ ] Timeout-Handling CWE-400 Timeouts für alle externen Operationen

Thread-Sicherheit

Prüfung CWE Beschreibung
[ ] Lock-Poisoning behandelt CWE-667 Recovery von vergifteten Locks
[ ] Keine Race Conditions CWE-362 Thread-sichere Datenstrukturen
[ ] Atomare Operationen CWE-362 Für Counter, Flags, Shared State
[ ] Deadlock-Prävention CWE-833 Lock-Reihenfolge, Timeouts

Audit & Compliance

Prüfung Standard Beschreibung
[ ] Alle Änderungen geloggt ISO 27001 A.12.4 Datenänderungen mit User, Timestamp, Alt/Neu
[ ] Sicherheitsereignisse geloggt NIS2 Art. 21 Fehlgeschlagene Auth, Rate Limiting, verdächtige Eingaben
[ ] Log-Rotation - Inkrementelles Format
[ ] Keine sensiblen Daten in Logs CWE-532 Auf versehentliche Offenlegung prüfen

Schnellreferenz - Nach Angriffstyp

Kryptographische Angriffe

[ ] Nonce-Wiederverwendung verhindert
[ ] Timing-Angriffe mitigiert (konstante Zeit)
[ ] Replay-Angriffe blockiert
[ ] Schlüssel-Enumeration verhindert (zufällige IDs)

Eingabe-Angriffe

[ ] Buffer Overflow verhindert (Größenlimits)
[ ] Integer Overflow verhindert
[ ] Malformed Input behandelt
[ ] SQL Injection verhindert

Verfügbarkeits-Angriffe

[ ] Ressourcen-Erschöpfung verhindert (Rate Limiting)
[ ] Lock-Poisoning behandelt
[ ] Speicher-Erschöpfung verhindert

Information Disclosure

[ ] Fehlermeldungen sanitisiert
[ ] Secrets nach Verwendung gelöscht (Zeroization)
[ ] Keine sensiblen Daten in Logs

OWASP Top 10 Referenz

Rang Schwachstelle Prävention in WvdS
1 Broken Access Control Autorisierung an allen Endpunkten prüfen
2 Cryptographic Failures Moderne Algorithmen, Zeroization
3 Injection Parametrisierte Queries, Input-Validierung
4 Insecure Design Threat Modeling, Defense in Depth
5 Security Misconfiguration Sichere Defaults, keine Debug in Prod
6 Vulnerable Components Abhängigkeiten aktuell halten
7 Auth Failures MFA, Rate Limiting, Session-Management
8 Data Integrity Failures Signaturen, Integritätsprüfung
9 Logging Failures Strukturiertes Logging, Alerting
10 SSRF URL-Validierung, Netzwerk-Segmentierung

Siehe auch

Zuletzt geändert: den 29.01.2026 um 15:13