This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
secure-low-level-programming:capitole:11-programare-sigura [2018/12/16 13:30] 127.0.0.1 external edit |
secure-low-level-programming:capitole:11-programare-sigura [2018/12/21 10:44] (current) razvan |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 11. Programare sigură ====== | ====== 11. Programare sigură ====== | ||
- | TODO: Descriere scurtă | + | 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. |
===== Subiecte abordate ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * programare sigură |
- | * TODO | + | * programare defensivă |
+ | * CWE (//Common Weakness Enumeration//) | ||
+ | * SSDL (//Secure Software Development Lifecycle//) | ||
===== Resurse ===== | ===== Resurse ===== | ||
Line 15: | Line 17: | ||
===== Alte resurse ===== | ===== Alte resurse ===== | ||
- | * TODO link | + | * [[https://www.amazon.com/Secure-Coding-2nd-Software-Engineering/dp/0321822137|Robert Seacord: Secure Coding in C/C++, 2nd Edition]] ([[http://index-of.es/Miscellanous/LIVRES/Pearson.Secure.2nd.Edition.Oct.2013.ISBN.0321822137.pdf|PDF]]) |
- | * TODO link | + | * https://wiki.sei.cmu.edu/confluence/display/c/SEI+CERT+C+Coding+Standard |
- | * TODO link | + | * https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=88046682 |
+ | * https://dwheeler.com/secure-programs/ | ||
+ | * https://en.opensuse.org/SDB:Secure_coding_checklist:_C_and_C%2B%2B | ||
+ | * https://www.owasp.org/index.php/How_to_write_insecure_code | ||
+ | * https://github.com/patricia-gallardo/insecure-coding-examples | ||
+ | * https://github.com/deadbits/InsecureProgramming | ||
+ | * https://cwe.mitre.org | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | |||
+ | /* | ||
Arhiva de suport pentru exerciții se găsește [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/11-programare-sigura-skel.zip|aici]]. Descărcați arhiva și apoi decomprimați-o folosind comenzile:<code> | Arhiva de suport pentru exerciții se găsește [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/11-programare-sigura-skel.zip|aici]]. Descărcați arhiva și apoi decomprimați-o folosind comenzile:<code> | ||
wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/11-programare-sigura-skel.zip | wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/11-programare-sigura-skel.zip | ||
unzip 11-programare-sigura-skel.zip | unzip 11-programare-sigura-skel.zip | ||
+ | cd 11-programare-sigura-skel/ | ||
</code> | </code> | ||
- | ==== Exercițiu 1 ==== | + | */ |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | ==== Reguli Secure Coding ==== |
- | TODO | + | Parcurgem două reguli din [[https://wiki.sei.cmu.edu/confluence/display/c/SEI+CERT+C+Coding+Standard|SEI CERT C Coding Standard]] și două reguli din [[https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=88046682|SEI CERT C++ Coding Standard]]. Identificați problemele pe care le rezolvă și indicațiile de rezolvare a acestora. |
+ | ==== Exemple nesigure ==== | ||
- | ==== Exercițiu 2 ==== | + | Parcurgeți exemplele de cod nesigure din subdirectorul ''vulnerable/'' din [[https://github.com/patricia-gallardo/insecure-coding-examples|acest repository]]. Pentru a clona repository-ul folosiți comanda |
+ | <code> | ||
+ | git clone https://github.com/patricia-gallardo/insecure-coding-examples | ||
+ | </code> | ||
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Apoi accesați subdirectorul ''vulnerable/'' din repository și parcurgeți fișierele cod sursă C sau C++ de acolo. |
+ | ==== Alte exemple nesigure ==== | ||
- | TODO | + | Parcurgeți exemplele de cod nesigure din [[https://github.com/deadbits/InsecureProgramming|acest repository]]. Pentru a clona repository-ul folosiți comanda |
+ | <code> | ||
+ | git clone https://github.com/deadbits/InsecureProgramming | ||
+ | </code> | ||
- | ==== Exercițiu 3 ==== | + | 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ă). |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | ==== Bad vs. Good ==== |
- | TODO | + | Accesați [[https://samate.nist.gov/SRD/testsuite.php|NIST Software Assurance Reference Dataset Project]]. |
+ | Descărcați: | ||
+ | * suita //C Test Suite for Source Code Analyzer v2 - Vulnerable// (Test Suite ID 100) | ||
+ | * suita //C Test Suite for Source Code Analyzer v2 - Secure// (Test Suite ID 101) | ||
+ | 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: | ||
+ | <code> | ||
+ | cat 100/000/149/043/Format_string_problem-bad.c | ||
+ | cat 101/000/149/044/Format_string_problem-good.c | ||
+ | </code> |