Varnostni kontrolni seznam

KRITIS/NIS2-skladno varnostno preverjanje na podlagi CWE ranljivosti in vzorcev napadov.

Ta kontrolni seznam je obvezen pri spremembah: omrežja, avtentikacije, kriptografije, podatkovne baze, zunanjih API-jev.

Kdaj uporabiti

Ta kontrolni seznam uporabite, kadar sprememba zadeva:

  • Kriptografske operacije
  • Avtentikacijo / avtorizacijo
  • Omrežno komunikacijo
  • Dostop do podatkovne baze
  • Klice zunanjih API-jev
  • Nalaganje datotek
  • Uporabniške vnose

Kriptografska varnost

Preverjanje CWE Opis
[ ] Edinstvenost Nonce CWE-323 AES-GCM Nonce mora biti edinstven za vsako šifriranje
[ ] Sledenje Nonce CWE-323 Sledenje uporabljenim Nonce, uveljavitev MAX_NONCES_PER_KEY
[ ] Rotacija ključev CWE-323 Rotacija ključa po doseženi omejitvi Nonce
[ ] Kriptografski RNG CWE-330 OpenSSL/OS CSPRNG za ključe/Nonce
[ ] Naključni ID-ji CWE-330 Brez zaporednih ključev/ID-jev sej
[ ] Primerjava s konstantnim časom CWE-208 Za tajne podatke, MAC, žetone, API-ključe
[ ] Zaščita pred ponovitvijo CWE-294 Sledenje Nonce/časovnih žigov/zaporedja
[ ] Šifriranje kanala CWE-300 mTLS za zunanjo komunikacijo

Primer: Primerjava s konstantnim časom

(* PREPOVEDANO - Mogoč napad s časovnim stranskim kanalom *)
function VerifyToken(const AToken, AExpected: string): Boolean;
begin
  Result := AToken = AExpected;  (* Prekine pri prvi razliki! *)
end;
 
(* PRAVILNO - Konstantni čas *)
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;

Varnost pomnilnika

Preverjanje CWE Opis
[ ] Brisanje pomnilnika CWE-316 Brisanje tajnih podatkov po uporabi
[ ] Brez tajnih podatkov v dnevnikih CWE-532 Nikoli ne beležite ključev, gesel, žetonov
[ ] Varna obdelava nizov CWE-316 SecureString (C#), secrecy (Rust)
[ ] Ključni material izbrisan CWE-316 try-finally zagotavlja čiščenje ob izjemah

Primer: Brisanje

procedure ProcessSecret(const ASecret: string);
var
  LocalCopy: string;
begin
  LocalCopy := ASecret;
  try
    (* Obdelava *)
    DoSomethingWith(LocalCopy);
  finally
    (* Izbris tajnega podatka - ne samo sprostitev! *)
    FillChar(LocalCopy[1], Length(LocalCopy) * SizeOf(Char), 0);
    LocalCopy := '';
  end;
end;

Validacija vnosov

Preverjanje CWE Opis
[ ] Omejitve velikosti CWE-400 Uveljavitev MAX_PAYLOAD_SIZE (privzeto: 64KB)
[ ] Prekoračitev celega števila CWE-190 SafeAdd(), checked_add(), preverjena aritmetika
[ ] Preverjanja null CWE-476 Na vseh mejah API
[ ] Brez Unwrap pri vnosu CWE-248 Ustrezna obdelava napak, brez Panic
[ ] Parametrizirane poizvedbe CWE-89 Nikoli konkatenacija nizov za SQL
[ ] Validacija znakov - Seznam dovoljenih znakov za identifikatorje kjer je primerno

Primer: Preprečevanje SQL Injection

(* PREPOVEDANO - Mogoč SQL Injection *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = ''' + AUsername + '''';
  Query.Open;
end;
 
(* PRAVILNO - Parametrizirano *)
procedure GetUser(const AUsername: string);
begin
  Query.SQL.Text := 'SELECT * FROM users WHERE name = :username';
  Query.ParamByName('username').AsString := AUsername;
  Query.Open;
end;

Obdelava napak (varnost)

Preverjanje CWE Opis
[ ] Sanirane sporočila CWE-209 Brez poti/verzij/sledi sklada odjemalcu
[ ] Popolno beleženje - Interno beleženje popolne napake pred saniranjem
[ ] Brez Panic v storitvi CWE-248 Elegantna obnovitev, storitev ostane aktivna
[ ] Ohranitev sledi sklada - Ponovno metanje brez ovijanja

Primer: Sanirana sporočila o napakah

(* PREPOVEDANO - Preveč informacij *)
procedure HandleError(E: Exception);
begin
  ShowMessage('Error in C:\Users\Admin\App\src\Database.pas:142: ' + E.Message);
end;
 
(* PRAVILNO - Interno beleženje, zunanje saniranje *)
procedure HandleError(E: Exception);
begin
  (* Interno popolno beleženje *)
  Logger.Error('Database error at %s: %s', [E.ClassName, E.Message]);
 
  (* Zunanje samo sanirano sporočilo *)
  raise EUserError.Create(rsDatabaseOperationFailed);
end;

Razpoložljivost (zaščita pred DoS)

Preverjanje CWE Opis
[ ] Omejevanje hitrosti CWE-400 Token Bucket na odjemalca/končno točko
[ ] Omejitve velikosti zahtev CWE-400 Zgodnja zavrnitev prevelikih vsebin
[ ] Varnost zaklepanja CWE-667 Mehanizem za obnovitev zaklepanja
[ ] Čiščenje virov CWE-772 try-finally, using, defer, RAII - vedno
[ ] Obdelava časovnih omejitev CWE-400 Časovne omejitve za vse zunanje operacije

Varnost niti

Preverjanje CWE Opis
[ ] Obdelava zastrupljenih zaklepov CWE-667 Obnovitev iz zastrupljenih zaklepov
[ ] Brez pogojev tekmovanja CWE-362 Nitno varne podatkovne strukture
[ ] Atomarne operacije CWE-362 Za števce, zastavice, skupno stanje
[ ] Preprečevanje mrtvih zaklepov CWE-833 Vrstni red zaklepanja, časovne omejitve

Revizija in skladnost

Preverjanje Standard Opis
[ ] Vse spremembe zabeležene ISO 27001 A.12.4 Spremembe podatkov z uporabnikom, časovnim žigom, staro/novo vrednostjo
[ ] Varnostni dogodki zabeleženi NIS2 čl. 21 Neuspešna avtentikacija, omejevanje hitrosti, sumljivi vnosi
[ ] Rotacija dnevnikov - Inkrementalni format
[ ] Brez občutljivih podatkov v dnevnikih CWE-532 Preverjanje nenamernega razkritja

Hitra referenca - Po vrsti napada

Kriptografski napadi

[ ] Preprečena ponovna uporaba Nonce
[ ] Omiljeni napadi s časovnim stranskim kanalom (konstantni čas)
[ ] Blokirani napadi s ponovitvijo
[ ] Preprečeno naštevanje ključev (naključni ID-ji)

Napadi na vnose

[ ] Preprečen prekoračitev medpomnilnika (omejitve velikosti)
[ ] Preprečena prekoračitev celega števila
[ ] Obdelani nepravilni vnosi
[ ] Preprečen SQL Injection

Napadi na razpoložljivost

[ ] Preprečena izčrpanost virov (omejevanje hitrosti)
[ ] Obdelano zastrupljanje zaklepov
[ ] Preprečena izčrpanost pomnilnika

Razkritje informacij

[ ] Sanirana sporočila o napakah
[ ] Tajni podatki izbrisani po uporabi (brisanje)
[ ] Brez občutljivih podatkov v dnevnikih

Referenca OWASP Top 10

Uvrstitev Ranljivost Preprečevanje v WvdS
1 Broken Access Control Preverjanje avtorizacije na vseh končnih točkah
2 Cryptographic Failures Sodobni algoritmi, brisanje
3 Injection Parametrizirane poizvedbe, validacija vnosov
4 Insecure Design Modeliranje groženj, obramba v globino
5 Security Misconfiguration Varne privzete nastavitve, brez razhroščevanja v produkciji
6 Vulnerable Components Ažuriranje odvisnosti
7 Auth Failures MFA, omejevanje hitrosti, upravljanje sej
8 Data Integrity Failures Podpisi, preverjanje celovitosti
9 Logging Failures Strukturirano beleženje, opozarjanje
10 SSRF Validacija URL, segmentacija omrežja

Glejte tudi

Zuletzt geändert: dne 29.01.2026 ob 22:22