Sigurnosna kontrolna lista

KRITIS/NIS2-sukladna sigurnosna provjera temeljena na CWE-ranjivostima i obrascima napada.

Ova kontrolna lista je obvezna kod promjena na: mreži, autentifikaciji, kriptografiji, bazi podataka, vanjskim API-jima.

Kada primjenjivati

Ovu kontrolnu listu primjenjivati kada promjena uključuje:

  • Kriptografske operacije
  • Autentifikaciju / Autorizaciju
  • Mrežnu komunikaciju
  • Pristup bazi podataka
  • Vanjske API-pozive
  • Upload datoteka
  • Korisničke unose

Kriptografska sigurnost

Provjera CWE Opis
[ ] Jedinstvenost nonce-a CWE-323 AES-GCM nonce mora biti jedinstven po enkripciji
[ ] Praćenje nonce-a CWE-323 Pratiti korištene nonce-ove, primijeniti MAX_NONCES_PER_KEY
[ ] Rotacija ključeva CWE-323 Rotirati ključ nakon nonce-limita
[ ] Kriptografski RNG CWE-330 OpenSSL/OS CSPRNG za ključeve/nonce-ove
[ ] Nasumični ID-ovi CWE-330 Bez sekvencijalnih ključeva/session-ID-ova
[ ] Usporedba u konstantnom vremenu CWE-208 Za tajne, MAC-ove, tokene, API-ključeve
[ ] Zaštita od replay-a CWE-294 Praćenje nonce/timestamp/sekvence
[ ] Enkripcija kanala CWE-300 mTLS za vanjsku komunikaciju

Primjer: Usporedba u konstantnom vremenu

(* ZABRANJENO - Moguć timing-napad *)
function VerifyToken(const AToken, AExpected: string): Boolean;
begin
  Result := AToken = AExpected;  (* Prekida na prvoj razlici! *)
end;
 
(* ISPRAVNO - Konstantno vrijeme *)
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;

Sigurnost memorije

Provjera CWE Opis
[ ] Brisanje memorije (Zeroization) CWE-316 Obrisati tajne nakon korištenja
[ ] Bez tajni u logovima CWE-532 Nikad logirati ključeve, lozinke, tokene
[ ] Sigurno rukovanje stringovima CWE-316 SecureString (C#), secrecy (Rust)
[ ] Materijal ključeva obrisan CWE-316 try-finally jamči cleanup kod iznimke

Primjer: Brisanje memorije

procedure ProcessSecret(const ASecret: string);
var
  LocalCopy: string;
begin
  LocalCopy := ASecret;
  try
    (* Obrada *)
    DoSomethingWith(LocalCopy);
  finally
    (* Obriši tajnu - ne samo oslobodi! *)
    FillChar(LocalCopy[1], Length(LocalCopy) * SizeOf(Char), 0);
    LocalCopy := '';
  end;
end;

Validacija unosa

Provjera CWE Opis
[ ] Ograničenja veličine CWE-400 Primijeniti MAX_PAYLOAD_SIZE (standard: 64KB)
[ ] Integer-Overflow CWE-190 SafeAdd(), checked_add(), provjerena aritmetika
[ ] Provjere null CWE-476 Na svim API-granicama
[ ] Bez Unwrap na ulazu CWE-248 Pravilno rukovanje greškama, bez panic
[ ] Parametrizirani upiti CWE-89 Nikad konkatenacija stringova za SQL
[ ] Validacija znakova - Whitelist za identifikatore gdje je prikladno

Primjer: Prevencija SQL Injection

(* ZABRANJENO - Moguća SQL Injection *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = ''' + AUsername + '''';
  Query.Open;
end;
 
(* ISPRAVNO - Parametrizirano *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = :username';
  Query.ParamByName('username').AsString := AUsername;
  Query.Open;
end;

Rukovanje greškama (sigurnost)

Provjera CWE Opis
[ ] Sanitizirane poruke CWE-209 Bez putanja/verzija/stack-traceova klijentu
[ ] Potpuno logiranje - Interno logirati potpunu grešku prije sanitizacije
[ ] Bez panic u servisu CWE-248 Graceful Recovery, servis ostaje aktivan
[ ] Stack-trace sačuvan - Re-Throw bez wrappinga

Primjer: Sanitizirane poruke o greškama

(* ZABRANJENO - Previše informacija *)
procedure HandleError(E: Exception);
begin
  ShowMessage('Error in C:\Users\Admin\App\src\Database.pas:142: ' + E.Message);
end;
 
(* ISPRAVNO - Interno logirati, eksterno sanitizirati *)
procedure HandleError(E: Exception);
begin
  (* Interno potpuno logirati *)
  Logger.Error('Database error at %s: %s', [E.ClassName, E.Message]);
 
  (* Eksterno samo sanitizirana poruka *)
  raise EUserError.Create(rsDatabaseOperationFailed);
end;

Dostupnost (DoS-zaštita)

Provjera CWE Opis
[ ] Rate Limiting CWE-400 Token Bucket po klijentu/endpointu
[ ] Ograničenja veličine zahtjeva CWE-400 Odbiti prevelike payloade rano
[ ] Sigurnost zaključavanja CWE-667 Mehanizam oporavka zaključavanja
[ ] Čišćenje resursa CWE-772 try-finally, using, defer, RAII - uvijek
[ ] Rukovanje timeout-om CWE-400 Timeout-ovi za sve vanjske operacije

Sigurnost niti

Provjera CWE Opis
[ ] Obrađeno trovanje zaključavanja CWE-667 Oporavak od otrovanih lockova
[ ] Bez race uvjeta CWE-362 Thread-safe strukture podataka
[ ] Atomske operacije CWE-362 Za brojače, zastavice, dijeljeno stanje
[ ] Prevencija deadlocka CWE-833 Redoslijed zaključavanja, timeout-ovi

Audit i sukladnost

Provjera Standard Opis
[ ] Sve promjene logirane ISO 27001 A.12.4 Promjene podataka s korisnikom, timestampom, staro/novo
[ ] Sigurnosni događaji logirani NIS2 čl. 21 Neuspjela autentifikacija, Rate Limiting, sumnjivi unosi
[ ] Rotacija logova - Inkrementalni format
[ ] Bez osjetljivih podataka u logovima CWE-532 Provjeriti slučajno otkrivanje

Brza referenca - Po vrsti napada

Kriptografski napadi

[ ] Spriječena ponovna uporaba nonce-a
[ ] Mitgirani timing-napadi (konstantno vrijeme)
[ ] Blokirani replay-napadi
[ ] Spriječena enumeracija ključeva (nasumični ID-ovi)

Napadi na unos

[ ] Spriječen Buffer Overflow (ograničenja veličine)
[ ] Spriječen Integer Overflow
[ ] Obrađen neispravan unos
[ ] Spriječena SQL Injection

Napadi na dostupnost

[ ] Spriječeno iscrpljivanje resursa (Rate Limiting)
[ ] Obrađeno trovanje zaključavanja
[ ] Spriječeno iscrpljivanje memorije

Otkrivanje informacija

[ ] Poruke o greškama sanitizirane
[ ] Tajne obrisane nakon uporabe (Zeroization)
[ ] Bez osjetljivih podataka u logovima

OWASP Top 10 Referenca

Rang Ranjivost Prevencija u WvdS
1 Broken Access Control Provjeriti autorizaciju na svim endpointima
2 Cryptographic Failures Moderni algoritmi, Zeroization
3 Injection Parametrizirani upiti, validacija unosa
4 Insecure Design Threat Modeling, Defense in Depth
5 Security Misconfiguration Sigurne zadane postavke, bez debug u produkciji
6 Vulnerable Components Održavati ovisnosti ažurnima
7 Auth Failures MFA, Rate Limiting, Session-Management
8 Data Integrity Failures Potpisi, provjera integriteta
9 Logging Failures Strukturirano logiranje, Alerting
10 SSRF Validacija URL-a, segmentacija mreže

Vidi također

Zuletzt geändert: 29.01.2026. u 22:27