Checklist Sicurezza

Verifica di sicurezza conforme a KRITIS/NIS2 basata su vulnerabilità CWE e pattern di attacco.

Questa checklist è obbligatoria per modifiche a: Rete, Autenticazione, Crittografia, Database, API esterne.

Quando Applicare

Applicare questa checklist quando la modifica riguarda:

  • Operazioni crittografiche
  • Autenticazione / Autorizzazione
  • Comunicazione di rete
  • Accesso al database
  • Chiamate API esterne
  • Upload di file
  • Input utente

Sicurezza Crittografica

Verifica CWE Descrizione
[ ] Unicità Nonce CWE-323 Il Nonce AES-GCM deve essere univoco per ogni cifratura
[ ] Tracciamento Nonce CWE-323 Tracciare i nonce utilizzati, applicare MAX_NONCES_PER_KEY
[ ] Rotazione chiavi CWE-323 Ruotare le chiavi dopo il limite di nonce
[ ] RNG crittografico CWE-330 OpenSSL/OS CSPRNG per chiavi/nonce
[ ] ID casuali CWE-330 Nessuna chiave/session-ID sequenziale
[ ] Confronto a tempo costante CWE-208 Per secret, MAC, token, API-Key
[ ] Protezione replay CWE-294 Tracciamento Nonce/Timestamp/Sequenza
[ ] Cifratura canale CWE-300 mTLS per comunicazione esterna

Esempio: Confronto a Tempo Costante

(* VIETATO - Attacco timing possibile *)
function VerifyToken(const AToken, AExpected: string): Boolean;
begin
  Result := AToken = AExpected;  (* Si interrompe alla prima differenza! *)
end;
 
(* CORRETTO - Tempo costante *)
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;

Sicurezza Memoria

Verifica CWE Descrizione
[ ] Zeroization memoria CWE-316 Cancellare i secret dopo l'uso
[ ] Nessun secret nei log CWE-532 Mai registrare chiavi, password, token
[ ] Gestione stringa sicura CWE-316 SecureString (C#), secrecy (Rust)
[ ] Materiale chiave cancellato CWE-316 try-finally garantisce cleanup su exception

Esempio: Zeroization

procedure ProcessSecret(const ASecret: string);
var
  LocalCopy: string;
begin
  LocalCopy := ASecret;
  try
    (* Elaborazione *)
    DoSomethingWith(LocalCopy);
  finally
    (* Cancellare il secret - non solo rilasciare! *)
    FillChar(LocalCopy[1], Length(LocalCopy) * SizeOf(Char), 0);
    LocalCopy := '';
  end;
end;

Validazione Input

Verifica CWE Descrizione
[ ] Limiti dimensione CWE-400 Applicare MAX_PAYLOAD_SIZE (default: 64KB)
[ ] Integer-Overflow CWE-190 SafeAdd(), checked_add(), aritmetica controllata
[ ] Controlli null CWE-476 A tutti i confini API
[ ] Nessun unwrap su input CWE-248 Gestione errori appropriata, nessun panic
[ ] Query parametrizzate CWE-89 Mai concatenazione stringhe per SQL
[ ] Validazione caratteri - Whitelist per identificatori dove appropriato

Esempio: Prevenzione SQL Injection

(* VIETATO - SQL Injection possibile *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = ''' + AUsername + '''';
  Query.Open;
end;
 
(* CORRETTO - Parametrizzato *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = :username';
  Query.ParamByName('username').AsString := AUsername;
  Query.Open;
end;

Gestione Errori (Sicurezza)

Verifica CWE Descrizione
[ ] Messaggi sanificati CWE-209 Nessun percorso/versione/stack-trace al client
[ ] Logging completo - Registrare internamente l'errore completo prima della sanificazione
[ ] Nessun panic nel servizio CWE-248 Recovery graceful, il servizio rimane attivo
[ ] Stack-Trace preservato - Re-throw senza wrapping

Esempio: Messaggi di Errore Sanificati

(* VIETATO - Troppe informazioni *)
procedure HandleError(E: Exception);
begin
  ShowMessage('Error in C:\Users\Admin\App\src\Database.pas:142: ' + E.Message);
end;
 
(* CORRETTO - Registrare internamente, sanificare esternamente *)
procedure HandleError(E: Exception);
begin
  (* Registrare internamente in modo completo *)
  Logger.Error('Database error at %s: %s', [E.ClassName, E.Message]);
 
  (* Esternamente solo messaggio sanificato *)
  raise EUserError.Create(rsDatabaseOperationFailed);
end;

Disponibilità (Protezione DoS)

Verifica CWE Descrizione
[ ] Rate Limiting CWE-400 Token Bucket per client/endpoint
[ ] Limiti dimensione richiesta CWE-400 Rifiutare payload sovradimensionati in anticipo
[ ] Sicurezza lock CWE-667 Meccanismo di recovery dei lock
[ ] Cleanup risorse CWE-772 try-finally, using, defer, RAII - sempre
[ ] Gestione timeout CWE-400 Timeout per tutte le operazioni esterne

Thread-Safety

Verifica CWE Descrizione
[ ] Lock-Poisoning gestito CWE-667 Recovery da lock avvelenati
[ ] Nessuna race condition CWE-362 Strutture dati thread-safe
[ ] Operazioni atomiche CWE-362 Per counter, flag, stato condiviso
[ ] Prevenzione deadlock CWE-833 Ordine dei lock, timeout

Audit e Compliance

Verifica Standard Descrizione
[ ] Tutte le modifiche registrate ISO 27001 A.12.4 Modifiche dati con utente, timestamp, vecchio/nuovo
[ ] Eventi sicurezza registrati NIS2 Art. 21 Auth fallite, rate limiting, input sospetti
[ ] Rotazione log - Formato incrementale
[ ] Nessun dato sensibile nei log CWE-532 Verificare divulgazione accidentale

Riferimento Rapido - Per Tipo di Attacco

Attacchi Crittografici

[ ] Riutilizzo nonce prevenuto
[ ] Attacchi timing mitigati (tempo costante)
[ ] Attacchi replay bloccati
[ ] Enumerazione chiavi prevenuta (ID casuali)

Attacchi Input

[ ] Buffer Overflow prevenuto (limiti dimensione)
[ ] Integer Overflow prevenuto
[ ] Input malformato gestito
[ ] SQL Injection prevenuta

Attacchi Disponibilità

[ ] Esaurimento risorse prevenuto (Rate Limiting)
[ ] Lock-Poisoning gestito
[ ] Esaurimento memoria prevenuto

Information Disclosure

[ ] Messaggi errore sanificati
[ ] Secret cancellati dopo l'uso (Zeroization)
[ ] Nessun dato sensibile nei log

Riferimento OWASP Top 10

Posizione Vulnerabilita Prevenzione in WvdS
1 Broken Access Control Verificare autorizzazione su tutti gli endpoint
2 Cryptographic Failures Algoritmi moderni, Zeroization
3 Injection Query parametrizzate, validazione input
4 Insecure Design Threat Modeling, Defense in Depth
5 Security Misconfiguration Default sicuri, nessun debug in prod
6 Vulnerable Components Mantenere dipendenze aggiornate
7 Auth Failures MFA, Rate Limiting, gestione sessioni
8 Data Integrity Failures Firme, verifica integrità
9 Logging Failures Logging strutturato, alerting
10 SSRF Validazione URL, segmentazione rete

Vedi anche

Zuletzt geändert: il 30/01/2026 alle 01:39