Sau cu alte cuvinte, ce e cu setarea asta dubioasă ce apare la crearea unui nou proiect C++ în Visual Studio?

Așa cum poate ați mai auzit, C nu este unul dintre cele mai sigure limbaje de programare. De fapt, dacă e să numărăm scheleții din dulap, cel mai probabil este unul dintre cele mai nesigure limbaje ce încă sunt populare în zilele noastre. Și atunci de ce mai este folosit, poate vă întrebați? Pentru că este rapid. Foarte rapid în comparație orice altceva.

Rapiditatea asta este dată de faptul că limbajul nu folosește o mașină virtuală pentru a abstractiza anumite aspecte, ci lucrează printre altele direct cu memoria calculatorului, fiind următorul nivel ca și apropiere de limbajul cod-mașină, după limbajele de asamblare.

Și de aici încep și problemele. Nemaiexistând un strat de abstractizare între variabilele declarate de programator și valorile efective din memorie, practic orice dezvoltator poate scrie orice are chef direct în RAM. E adevărat că de obicei (există excepții) sistemul de operare nu lasă un proces să modifice zone de memorie ale altor procese, însă e suficient ca un programator rău intenționat să modifice doar conținutul zonei de memorie pe care programul C++ o poate accesa, ca rezultatele să fie dezastruase.

De-a lungul timpului au fost identificate mai multe funcții și limitări ale limbajului care, neștiute sau ignorate, introduc adevărate breșe de securitate. Este cazul Heartbleed, bug descoperit în OpenSSL, bibliotecă folosită de multe site-uri pentru criptarea conexiunilor HTTPS sau al incidentului în care au fost implicate sistemele de rachete Patriot în 1991. Exemplele pot continua.

Care e legătură dintre ce am povestit până acum și SDL? Păi verificările SDL (Security Development Lifecycle Cecks) din Visual Studio tocmai asta fac. Analizează codul C++ scris si atenționeză programatorul prin warnings sau direct prin erori de compilare dacă instrucțiuni din codul scris pot fi vulnerabile sau deja sunt cunoscute ca breșe de securitate. Este și cazul funcțiilor scanfsctrcpy, gets sau sprintf care nu verifică dacă dimensiunea șirului de caractere primit ca parametru coincide cu cea a celui în care se face copierea sau citirea. Rezultatul este o vulnerabilitate cunoscută sub denumirea de buffer-overflow.

În primele versiuni de Visual Studio 2017, cei de la Microsoft au scos opțiunea de a debifa SDL la crearea unui proiect, însă începând cu versiunea 15.4.0 au reintrodus-o, probabil la cererea insistentă a comunității de programatori (foto mai jos).

Așa că pentru proiecte strict didactice în care anumite funcții sunt folosite doar pentru a ilustra modul de lucru al limbajului C++ e în regulă dacă verificările SDL nu sunt folosite, însă pentru orice tip de software scris in C sau C++ ele sunt obligatorii, ignorarea lor implicând un risc enorm.

Crearea unui proiect C++ în VS 2017 înainte
și după versiunea 15.4.0

Comments

comments

Categories: C++

1 Comment

Creare proiect C++ în Visual Studio 2017 | Facem Soft · 20.10.2017 at 16:20

[…] Despre Security Development Lifecycle (SDL) sau cum scăpăm de erorile generate de funcțiile scanf și strcpy într-un articol viitor. […]

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Related Posts

C++

Creare proiect C++ în Visual Studio 2017

Nu știu dacă ați observat, dar în Visual Studio 2017 Community Edition au dispărut o mare parte din opțiunile de creare a unui proiect gol (Empty Project) pentru limbajul C++. Adică dacă selectăm File > Read more…

Loading...