Cuprins:
- Nu face ipoteze despre intrarea utilizatorului
- Eroare de manevră Gracefully
- Mențineți un jurnal de programe
- Urmăriți un proces de dezvoltare
- Implementarea unui control bun al versiunii
- Autentificați utilizatorii în siguranță
- Gestionați sesiunile la distanță
- Obfuscate codul dvs.
- Înregistrați-vă codul cu un certificat digital
- Utilizează criptarea securizată ori de câte ori este necesar
Video: Week 0, continued 2024
Ca programator C ++, trebuie să înveți lucrurile pe care ar trebui să le faceți în codul C ++ pentru a evita scrierea programelor vulnerabile la hackeri. Există, de asemenea, descrie caracteristici pe care le puteți activa dacă sistemul de operare le acceptă, cum ar fi Spațiul de adresă Randomization Layout (ASLR) și Data Execution Prevention (DEP).
Nu face ipoteze despre intrarea utilizatorului
Viziunea tunelului programatorului este în regulă în faza de dezvoltare timpurie. La un moment dat însă, programatorul (sau, mai bine, un alt programator care nu are nimic de-a face cu dezvoltarea codului) trebuie să stea în urmă și să uite de problema imediată. Ea trebuie să se întrebe: "Cum va reacționa acest program la intrarea ilegală? „
Iată câteva dintre regulile pentru verificarea intrărilor:
-
Nu face nici o ipoteză cu privire la lungimea intrării.
-
Nu acceptați mai multă intrare decât aveți la dispoziție în tampoanele cu lungime fixă (sau bufferele cu dimensiune variabilă).
-
Verificați intervalul fiecărei valori numerice pentru a vă asigura că are sens.
-
Verificați și filtrați caracterele speciale care pot fi folosite de un hacker pentru a injecta codul.
-
Nu treceți intrarea brut pe alt serviciu, cum ar fi un server de baze de date.
Și efectuați toate aceleași verificări asupra valorilor returnate de la serviciile de la distanță. Hacker-ul nu poate fi pe partea de intrare, el poate fi pe partea de răspuns.
Eroare de manevră Gracefully
Programul dvs. ar trebui să răspundă în mod rezonabil la defecțiunile care apar în cadrul programului. De exemplu, dacă apelul la o funcție de bibliotecă returnează un nullptr, programul ar trebui să detecteze acest lucru și să facă ceva rezonabil.
Rezonabil trebuie înțeleasă destul de liber. Programul nu are nevoie să înșele în jurul valorii de a afla exact de ce funcția nu a returnat o adresă rezonabilă. S-ar putea ca cererea să fie pentru prea multă memorie din cauza intrărilor nerezonabile. Sau ar putea fi faptul că constructorul a detectat un tip de intrare ilegală.
Nu contează. Ideea este că programul ar trebui să-și restabilească starea de lucru cât mai bine și să se instaleze pentru următorul bit de intrare, fără să se prăbușească sau să corupe structurile de date existente cum ar fi heapul.
Mențineți un jurnal de programe
Creați și mențineți jurnalele runtime care permit cuiva să reconstruiască ceea ce sa întâmplat în cazul unei erori de securitate. (De fapt, acest lucru este la fel de adevărat în cazul oricărui tip de eșec.) De exemplu, probabil că doriți să vă înregistrați de fiecare dată când cineva semnează sau nu din sistem.
Veți dori cu siguranță să știți cine a fost conectat la sistemul dvs. atunci când a apărut un eveniment de securitate - acesta este grupul care este cel mai expus riscului unei pierderi de securitate și care este cel mai suspect atunci când caută vinovați.În plus, veți dori să înregistrați orice eroare de sistem care ar include cele mai multe excepții.
Un program de producție în lumea reală conține un număr mare de apeluri care arată cam așa:
log (DEBUG, "User% s a introdus parola legală", sUser);
Acesta este doar un exemplu. Fiecare program va avea nevoie de un anumit tip de funcție a jurnalului. Indiferent dacă este sau nu numit log (), este imaterial.
Urmăriți un proces de dezvoltare
Fiecare program trebuie să urmeze un proces bine gândit, de dezvoltare formală. Acest proces ar trebui să includă cel puțin următoarele etape:
-
Cerințe privind colectarea și documentarea, inclusiv cerințele de securitate.
-
Designul revizuirii.
-
Respectați un standard de codificare.
-
Examinați unitatea de testare.
-
Efectuați teste formale de acceptare care se bazează pe cerințele inițiale.
În plus, evaluările inter pares ar trebui efectuate la puncte cheie pentru a verifica dacă cerințele, procedeele de proiectare, cod și proceduri de încercare sunt de înaltă calitate și respectă standardele companiei.
Implementarea unui control bun al versiunii
Controlul versiunii este un lucru ciudat. Este firesc să nu vă faceți griji cu privire la versiunea 1. 1 când sunteți sub arma pentru a obține versiunea 1. 0 din ușă și în mâinile întinse ale utilizatorilor așteptați. Cu toate acestea, controlul versiunii este un subiect important care trebuie abordat mai devreme, deoarece trebuie să fie integrat în proiectul inițial al programului și să nu fie cuplat mai târziu.
Un aspect aproape trivial al controlului versiunii este cunoașterea versiunii programului pe care un utilizator o folosește. Când un utilizator cheamă și spune: "Face acest lucru când fac clic pe el", biroul de ajutor trebuie să știe cu adevărat ce versiune a programului utilizează utilizatorul. Ar putea descrie o problemă în versiunea sa, care a fost deja rezolvată în versiunea curentă.
Autentificați utilizatorii în siguranță
Autentificarea utilizatorilor trebuie să fie simplă: utilizatorul oferă un nume de cont și o parolă, iar programul vă arată numele contului într-un tabel și compară parolele. Dacă parolele se potrivesc, utilizatorul este autentificat. Dar când vine vorba de antihacking, nimic nu este atât de simplu.
În primul rând, nu păstrați niciodată parolele în baza de date. Aceasta se numește stocarea în clar și este considerată o formă foarte proastă. Este prea ușor pentru un hacker să-și pună mâna pe fișierul de parolă. În schimb, salvați o transformare sigură a parolei.
Gestionați sesiunile la distanță
Puteți face anumite presupuneri atunci când toată aplicația dvs. rulează pe un singur computer. Într-adevăr, odată ce utilizatorul sa autentificat, nu trebuie să vă faceți griji cu privire la transformarea acestuia într-o persoană diferită. Aplicațiile care comunică cu un server de la distanță nu pot face această ipoteză - un hacker care ascultă pe linie poate aștepta până când utilizatorul se autentifică și apoi va deturna sesiunea.
Ce poate face programatorul care are nevoie de securitate pentru a evita această situație? Nu doriți să întrebați în mod repetat utilizatorul pentru parola sa doar pentru a vă asigura că conexiunea nu a fost deturnată. Soluția alternativă este stabilirea și gestionarea unei sesiuni . Faceți acest lucru prin faptul că serverul trimite aplicației de la distanță un cookie de sesiune odată ce utilizatorul sa autentificat cu succes.
Obfuscate codul dvs.
Codul de obfuscation este actul de a face executabilul ca fiind dificil pentru un hacker să înțeleagă cât mai mult posibil.
Logica este simplă. Cu cât este mai ușor pentru un hacker să înțeleagă cum funcționează codul dvs., cu atât mai ușor va fi pentru hacker să găsească vulnerabilități.
Cel mai simplu pas pe care îl puteți face este să vă asigurați că distribuiți vreodată o versiune de lansare a programului dvs. care nu include informații despre simbolul de depanare. Când creați pentru prima dată fișierul proiectului, asigurați-vă că selectați că trebuie creată atât o versiune Debug, cât și o versiune Release.
Nu distribuiți niciodată versiuni ale aplicației dvs. cu informațiile despre simboluri incluse.
Înregistrați-vă codul cu un certificat digital
Semnarea codului funcționează generând un hash securizat al codului executabil și combinându-l cu un certificat emis de o autoritate validă de certificare. Procesul funcționează astfel: Compania care creează programul trebuie să se înregistreze mai întâi la una dintre autoritățile de certificare.
Odată ce autoritatea de certificare este convinsă că Compania mea este o entitate software validă, emite un certificat. Acesta este un număr lung pe care oricine îl poate utiliza pentru a verifica dacă titularul acestui certificat este faimosul Compania mea din San Antonio.
Utilizează criptarea securizată ori de câte ori este necesar
Ca orice avertisment bun, această avertizare are mai multe părți. Mai întâi, "Utilizați criptarea ori de câte ori este necesar. "Acest lucru tinde să-ți aducă aminte gândurile de a comunica informații despre contul bancar prin Internet, dar ar trebui să te gândești mai general decât asta.
Datele care sunt comunicate, fie pe Internet, fie pe un anumit interval mai mic, sunt cunoscute în general ca Date in Motion. Datele în mișcare ar trebui să fie criptate dacă nu ar fi de folos unui hacker.
Datele stocate pe disc sunt cunoscute sub numele de Date at Rest. Aceste date ar trebui, de asemenea, să fie criptate dacă există posibilitatea ca discul să fie pierdut, furat sau copiat. Întreprinderile criptează în mod obișnuit discurile hard pe laptopurile companiei în cazul în care un laptop este furat la scanerul de securitate din aeroport sau lasă într-un taxi undeva.
Dispozitivele de stocare portabile mici, cum ar fi unitățile degetului mare, sunt susceptibile de a fi pierdute - datele despre aceste dispozitive ar trebui să fie criptate.