ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 140
Abonament PDF

10 strategii esențiale pentru securitatea proiectului tău

Victor Motogna
Head of Web Development @ Wolfpack Digital



PROGRAMARE

În epoca digitală actuală, dezvoltarea software-ului web a devenit mai accesibilă și mai eficientă ca niciodată. Avem la dispoziție o serie de instrumente și tehnologii avansate, care au simplificat considerabil procesul de configurare, permițându-ne să creăm și să lansăm aplicații mult mai rapid. Cu toate acestea, în această cursă spre inovație și funcționalitate, unul din aspectele cruciale care nu trebuie neglijate este securitatea.

Deși auditurile de securitate pot varia semnificativ de la un proiect la altul, cele mai riguroase fiind adesea delegate unor entități terțe pentru imparțialitate, responsabilitatea de a asigura o fundație solidă de securitate în cadrul fiecărui proiect ne revine în mod direct. Prin acest articol, o să încerc să acopăr bazele pentru această fundație, care ar putea fi ușor adaptate și aplicate ca standard, indiferent de dimensiunile și nevoile proiectelor.

Cu siguranță, există multe alte strategii și acțiuni pe care le putem face ca să ne asigurăm partea de securitate și confidențialitate a datelor. Cu scopul de a generaliza și simplifica majoritatea acestor activități, vreau să menționez câteva categorii pe care le putem aplica ușor și au și rezultate.

Prima categorie ar fi acțiunile administrative. Acestea ne ajută să ne structurăm echipa în așa fel încât să putem limita riscurile: de exemplu, crearea unui rol de responsabil al review-urilor, limitarea accesului persoanelor care nu lucrează activ pe proiect sau migrarea spre unele tooluri care au o suită de strategii de securitate solide.

A doua categorie de acțiuni ar fi cele de implementare. Acestea sunt modificări pe care le putem efectua chiar în cod, iar majoritatea punctelor menționate mai jos vor fi cuprinse în această categorie. Categoria cuprinde mai multe exemple, iar partea bună este că cele mai multe frameworkuri moderne vor avea implementări care deja tratează aceste cazuri, precum sisteme împotriva atacurilor cunoscute (SQL injection, CSRF, cross-site scripting și multe altele).

Ultimul tip la care ne vom referi în acest articol este cel de DevSecOps. În ultimii ani, contopirea rolurilor de "development" și a celor de "operations" a creat rolul de DevOps, iar conceptul de DevSecOps acoperă și nevoia de securitate. În punctul menționat mai sus, am făcut trimitere la ceea ce putem face din punctul de vedere al developmentului, dar există o serie de acțiuni pe care le putem face și la nivel de operations. Mai clar, asta ar include toate punctele de mai jos la nivel de configurare a proiectului, a procesului de deployment sau a infrastructurii.

Ținând cont de acestea, în rândurile de mai jos vom expune care sunt cele 10 puncte pe care le poți aplica în organizația sau în proiectele tale:

Analiza codebase-ului

Setarea unor reguli de code review la nivel de proiect poate avea beneficii și în securitatea proiectelor, nu doar la nivel de stil; echipa ta își poate seta un set de reguli "best practices" la nivel de securitate pe care echipa de review să o verifice constant.

Tododată, putem aplica și static code analysis, cu ajutorul unor tooluri care fac asta cu o simplă comandă, pentru majoritatea limbajelor de programare și a frameworkurilor populare. Aceste tooluri sunt mereu ținute la curent cu ultimele vulnerabilități descoperite și recomandă schimbări în implementare sau versiuni mai noi ale dependințelor din proiect care să nu fie expuse acestor vulnerabilități.

Strategii de criptare

Criptarea este cea mai populară metodă de a ascunde datele față de cei care vor să intercepteze transferul acestora, prin folosirea protocolului https în loc de http.

Totodată, se recomandă criptarea datelor și "at rest", mai exact în baza de date, nu doar în tranzit. Asta ar însemna adăugarea unui strat extra de securitate la nivelul bazei de date. Dacă cineva reușește să obțină acces la server, este important ca datele să nu poată fi accesate fără o cheie de decriptare

Un ultim punct al acestei liste ar fi criptarea datelor sensibile în interiorul bazei de date; aceste date pot fi citite doar de software-ul scris de noi, cu ajutorul unor chei de criptare. Un exemplu popular pentru cazul acesta ar fi criptarea parolelor, dar există multe alte coloane din tabelele noastre pe care le-am dori criptate, precum date bancare.

Backup, restaurare și recuperare în caz de dezastru

În cazul unor atacuri de tip DDoS sau a unor situații neplăcute în care baza de date a fost compromisă și accesul nostru la ea a fost restricționat, aceste backupuri și strategii de restaurare ne vor permite să recreăm varianta cu toate datele utilizatorilor, după remedierea situației.

Majoritatea furnizorilor de soluții cloud pun la dispoziție o suită de tooluri care au integrate diverse strategii de backup, restaurare și recuperare, nouă revenindu-ne responsabilitatea de a le seta corespunzător.

Strategii de acces pe platformele folosite

În funcție de platformele folosite și strategiile din acest punct vor fi diferite, dar majoritatea pun la dispoziție posibilități similare. Pentru simplitate, voi aborda doar platforme de infrastructură (cloud providers), dar acestea pot fi extrapolate și în alte cazuri.

O soluție foarte populară ar fi să urmărim "principle of least privilege" (principiul celui mai mic privilegiu), care ne spune să oferim acces contribuabililor doar la serviciile de care au nevoie zi de zi, în loc de a oferi acces la toate. Un exemplu ar fi prin platforma AWS, care oferă o serie de drepturi foarte bine segregate. În cazul în care cineva dorește să schimbe ceva la care nu are acces, va fi nevoie de confirmarea administratorului. Desigur, un avantaj ar veni și în cazul în care o persoană rău intenționată pune mâna pe unul din aceste conturi, acesta va fi limitat și nu va putea modifica orice.

Protecția API-urilor și alegerea arhitecturii potrivite

Acesta este un punct ce poate deveni foarte complex. Există multe strategii de securizare, în funcție de nevoile platformei, comunicarea cu alte sisteme sau contextul în care va fi folosit.

Securizarea API-urilor se poate face prin adăugarea unor strategii precum: IP whitelisting (aplicabil în cazul în care acesta va fi accesat doar de aplicații create în colaborare cu echipa de dezvoltare a API-ului), folosirea access tokens (care, în funcție de tipul de API, ar putea fi de diferite tipuri - OAuth, API keys etc.) sau limitarea accesului doar din interiorul unui VPN.

Totodată, în anumite cazuri, se pot implementa și rate limiters, în special pentru protecția împotriva atacurilor DDoS sau pentru limitarea funcționalităților care pot costa, de exemplu trimiterea unor SMS-uri.

Înregistrare, logare și monitorizare

Este vital ca aplicațiile software să aibă un sistem de logare a tuturor acțiunilor, precum și un sistem de monitorizare. Acestea ar permite ca, în cazul unui atac, sau a activității suspicioase, să avem acces la toată informația de care avem nevoie pentru a remedia cât mai repede.

Totodată, implementarea unor alerte pentru activitate suspicioasă sau pentru erorile de sistem ar permite reducerea timpului în care sistemul este nefuncțional.

Infrastructură și DevOps

Deși există specializări specifice pentru aceste strategii, în ultimul timp formarea rolului DevSecOps a permis tratarea problemelor complexe și de către developeri, cu ajutorul unor serii de verificări și bune practici pe care le putem urma și cu expertiză minimă în domeniu.

Prima de pe această listă, ar fi segregarea mediilor de dezvoltare, care ne-ar ajuta să ne asigurăm că folosim chei de acces, chei de decriptare și să setăm conturi diferite pentru producție, față de cele de dezvoltare și test.

Totodată, există o serie de configurări pe care le putem face pentru a îmbunătăți siguranța infrastructurii noastre: precum stocarea criptată a secretelor sau adăugarea unor chei de acces cu perioadă de expirare pentru accesul fișierelor pe bază de URL.

Indiferent de platformele Cloud cu care lucrăm sau instrumentele open source pe care le folosim, este important să le ținem mereu actualizate, deoarece acestea primesc "security patches" constant.

Siguranța microserviciilor

În cazul în care lucrăm cu o arhitectură bazată pe microservicii, este important ca pentru microserviciile care expun date sau comunică doar cu alte servicii din sistemul nostru, să limităm accesul acestora, astfel încât să nu poată fi accesate altfel. Totodată, folosirea unui "service mesh" ar putea facilita comunicarea între servicii.

Managementul sesiunilor și autentificarea

Este important să respectăm standardele cheilor de acces și să generăm ID-uri de sesiune, chei de acces etc. cât mai sigure, folosind algoritmi complecși, astfel încât decriptarea acestora să fie cât mai dificilă.

Totodată, implementarea unui sistem de expirare pentru aceste chei ajută la restricționarea accesului în cazul în care cineva obține acces la o astfel de cheie și îngreunează exploatarea.

Practici pentru vulnerabilități comune

Cu ajutorul unor baze de date menținute constant, avem acces la o serie de vulnerabilități comune, față de care este important să ne protejăm sistemele. În special când discutăm de site-urile web, printre cele mai populare astfel de vulnerabilități ar fi Cross-Origin Resource Sharing (CORS) sau Cross-Site Scripting (XSS). Un alt exemplu foarte comun ar fi SQL injection, iar majoritatea frameworkurilor deja au o variantă care să ne ajute să evităm această exploatare.

Există și multe alte vulnerabilități comune, de le luat în considerare și pe care le putem găsi în o bază de date precum https://www.cvedetails.com/.

Concluzie

În procesul de dezvoltare ne gândim, de multe ori, la optimizarea performanței, folosirea celor mai populare frameworkuri sau la dezvoltarea cât mai rapidă a funcționalităților, dar este crucial să nu uităm și de elementul de securitate.

Desigur, există multe alte puncte pe care le putem adăuga în procesul nostru de dezvoltare care să ne ajute în dezvoltarea unor sisteme mai sigure și protejate împotriva atacatorilor. Această listă este gândită ca un ajutor pentru bune practici în perioada de implementare, permițând totodată și adaptarea pentru a servi ca o verificare regulată.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects