Atunci când scriem programe, ținând cont de problemele care pot să apară, folosim tehnici de programare sigură (secure programming) sau programare defensivă (defensive programming). Aceasta înseamnă să evităm apariția de bug-uri și vulnerabilități prin folosirea corespunzătoare a tipurilor de date, a apelurilor de funcții și prin verificarea atentă a intrării într-un program. Dezvoltatorul va trata intrarea, codul refolosit, bibliotecile ca fiind nesigure și surse de bug-uri și atacuri și va scrie cod în mod corespunzător.
Parcurgem două reguli din SEI CERT C Coding Standard și două reguli din SEI CERT C++ Coding Standard. Identificați problemele pe care le rezolvă și indicațiile de rezolvare a acestora.
Parcurgeți exemplele de cod nesigure din subdirectorul vulnerable/
din acest repository. Pentru a clona repository-ul folosiți comanda
git clone https://github.com/patricia-gallardo/insecure-coding-examples
Apoi accesați subdirectorul vulnerable/
din repository și parcurgeți fișierele cod sursă C sau C++ de acolo.
Parcurgeți exemplele de cod nesigure din acest repository. Pentru a clona repository-ul folosiți comanda
git clone https://github.com/deadbits/InsecureProgramming
Parcurgeți toate fișierele cod sursă C din rădăcina repository-ului și identificați, rapid, bug-ul/vulnerabilitatea și ce problemă cauzează (și, dacă e cazul, cum poate fi exploatată).
Accesați NIST Software Assurance Reference Dataset Project.
Descărcați:
Alegeți cel puțin 5 exemple din suita vulnerabilă și identificați vulnerabilitatea. Gândiți soluția pentru acea vulnerabilitate și vedeți dacă este similară celei din suita sigură. În suita sigură identificatorul exemplului este mai mare cu 1 față de cel din suita vulnerabilă. De exemplu pentru exemplul 043
din suita vulnerabilă, identificatorul este 044
ca mai jos:
cat 100/000/149/043/Format_string_problem-bad.c cat 101/000/149/044/Format_string_problem-good.c