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:
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 |
(* 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
[ ] 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