Programare sigură

Programarea securizată este o  tehnică de dezvoltare software care previne introducerea accidentală a vulnerabilităților și oferă rezistență la malware și accesul neautorizat . Bug -urile și erorile logice sunt cauza principală a vulnerabilităților software.

Software-ul securizat este un software dezvoltat folosind un set de măsuri menite să prevină apariția și eliminarea vulnerabilităților programului [1] .

Sarcina programării securizate este de a proteja datele utilizatorului de furt și deteriorare, de a menține controlul asupra sistemului. Un program nesigur este o țintă potențială pentru un atacator care poate folosi vulnerabilitățile existente pentru a vizualiza, modifica sau șterge informații existente, poate afecta funcționarea programelor și serviciilor (pornire sau oprire) și injecta cod rău intenționat în sistem [2] .

Terminologie

În literatura engleză, există doi termeni care pot fi traduși ca programare securizată.

Programarea defensivă este un principiu de dezvoltare a software -ului în care dezvoltatorii încearcă să țină cont de toate erorile și eșecurile posibile, să le izoleze cât mai mult posibil și, dacă este posibil, să restabilească performanța programului în cazul unor defecțiuni. Acest lucru ar trebui să facă software-ul mai stabil și mai puțin vulnerabil. De exemplu, o implementare hardware a acestui principiu este un timer watchdog , calculul sumei de control  - pentru a detecta erorile în transmisia de pachete de date [3] .

Codarea securizată este o tehnică de scriere a programelor care sunt rezistente la atacurile de la malware și intruși. Programarea securizată ajută la protejarea datelor utilizatorului împotriva furtului sau corupției. În plus, un program nesigur poate oferi unui atacator acces pentru a controla serverul sau computerul utilizatorului; Consecințele pot varia de la refuzul serviciului pentru un singur utilizator până la compromiterea informațiilor sensibile, pierderea serviciului sau deteriorarea sistemelor a mii de utilizatori [2] .

Importanță

Problemele de asigurare a siguranței și operabilității sistemului fac parte integrantă din etapa de proiectare a acestuia ( proiectarea sistemului) [4] . Cerințele de securitate pentru produsele și sistemele informatice specifice sunt stabilite pe baza amenințărilor de securitate existente și anticipate, politica de securitate fiind urmată și ținând cont și de condițiile de aplicare a acestora [5] . Implementarea soluțiilor de securitate după ce un sistem a fost dezvoltat este complexă și costisitoare. Prin urmare, cerințele de securitate ar trebui să fie luate în considerare încă de la început pe parcursul întregului ciclu de viață al sistemului [4] .

Sistemul informatic este împărțit în niveluri fizice și logice. Înțelegerea a ceea ce trebuie protejat de factorii externi ajută la alegerea și aplicarea celei mai eficiente măsuri de protecție. O graniță clară între niveluri ar trebui să fie determinată de politica de securitate care guvernează un anumit set de informații și tehnologii informaționale care au granițe fizice. O altă complicație este că același computer sau server poate găzdui atât informații publice, cât și private . Ca rezultat, mai multe politici de securitate pot fi aplicate aceleiași mașini sau în cadrul aceluiași sistem. Prin urmare, atunci când se dezvoltă un sistem informațional, limitele de securitate ar trebui să fie luate în considerare și descrise în documentația relevantă și în politicile de securitate a sistemului [4] . Dezvoltatorii săi trebuie să fie capabili să asigure securitatea sistemului atunci când proiectează , dezvoltă , administrează și configurează , integrează ., testați corespunzător [6] .

Analiza (manuală sau automată) și securitatea este o procedură costisitoare care crește costul total al unui produs software . Anterior, eliminarea completă a riscurilor era un obiectiv comun al securității. Astăzi se recunoaște că eliminarea tuturor riscurilor nu este rentabilă. Pentru fiecare sistem de control propus, trebuie efectuată o analiză cost-beneficiu. În unele cazuri, beneficiile unui sistem mai sigur pot să nu justifice costurile directe și indirecte. Beneficiile includ nu numai prevenirea pierderilor bănești; Merită să luăm în considerare, de exemplu, pierderile de reputație. Costurile directe includ costul achiziției și instalării acestei tehnologii; costurile indirecte includ performanța redusă a sistemului și formarea suplimentară a angajaților [7] .

Principii

În prezent, există diverse tehnologii pentru dezvoltarea software-ului securizat . Dar există un set de principii care sunt luate în considerare în orice abordare [8] :

Ultimele patru calități au devenit baza Trustworthy computing (TwC) ( Eng.  Trustworthy computing ) („Calcule care sunt de încredere”) - inițiative ale Microsoft Corporation , a căror sarcină principală este de a atrage atenția dezvoltatorilor asupra importanței asigurarea acestor cerințe la fiecare etapă a dezvoltării software [9] .

Există multe principii de securitate software, dintre care majoritatea sunt similare între ele. Generalizarea lor poate fi considerată principiile de mai sus [10] .

Clasificarea și tipurile de vulnerabilități

Clasificatori

Utilizarea descrierilor standardizate de vulnerabilități simplifică munca specialiștilor în securitatea informațiilor. În prezent, există mai multe clasificatoare populare [11] :

Analizatoarele de cod moderne și auditorii automati pot exploata baze similare de vulnerabilități. Acest lucru crește nivelul de încredere în produs și poate fi, de asemenea, important atunci când se raportează vulnerabilitățile prezente în produsul software [13] .

Există și alți clasificatori. Atunci când lucrați cu acestea, trebuie acordată atenție autorilor, deoarece fiecare sistem de clasificare trebuie creat de experți în acest domeniu [14] .

Valori

Fiecare program este o țintă potențială pentru atacatori. După ce vor găsi vulnerabilități în aplicații sau servicii, vor încerca să le folosească pentru a fura informații confidențiale, a corupe date, a controla sistemele și rețelele informatice [15] . Pentru a descrie proprietățile unei vulnerabilități, experții folosesc sistemul de notare a riscului de vulnerabilitate CVSS . Este o scală pe baza căreia se acordă punctajele. Sistemul de metrici este conceput pentru a prioritiza remedierea vulnerabilităților. Fiecare scară se referă la o secțiune semantică specifică, care se numește metrică. Există trei astfel de metrici [16] [17] [11] :

Ultimele două metrici sunt de natură auxiliară și sunt folosite doar pentru ajustarea indicatorilor metricii de bază, ținând cont de diverse specificități [18] .

Tipuri de vulnerabilități

Lista erorilor comune care compromit securitatea programelor moderne [19] :

Este imposibil să enumerați toate vulnerabilitățile cunoscute , având în vedere că în fiecare zi apar altele noi. Această listă conține vulnerabilități comune care sunt ușor de comis, dar ale căror consecințe pot fi catastrofale. De exemplu, răspândirea viermelui Blaster a fost cauzată de o eroare în doar două linii de cod [22] .

Apărare

Strategia corectă de protecție împotriva erorilor și vulnerabilităților este prevenirea și prevenirea acestora. Acest lucru necesită ca dezvoltatorul să verifice în mod constant datele de intrare. De exemplu, cel mai bun mod de a vă proteja împotriva atacurilor de depășire a bufferului este să vă asigurați că datele de intrare nu depășesc dimensiunea bufferului în care sunt stocate. Datele destinate a fi trimise în baza de date necesită validare pentru a proteja împotriva unui atac precum injecția SQL. Dacă datele sunt trimise către o pagină web, atunci acestea ar trebui validate conform XSS . Cu toate acestea, un număr excesiv de verificări complică dezvoltarea codului sursă al programului și poate duce, la rândul său, la apariția unor noi erori, așa că această strategie ar trebui combinată cu altele [23] .

Mecanismele de protecție împotriva erorilor pot fi furnizate de compilator sau de sistemul de operare . Compilatorul GCC permite utilizarea funcției _builtin_object_size () pentru a obține dimensiunea unui obiect printr-un pointer către acest obiect, astfel încât utilizarea acesteia face procedura de copiere mai sigură. MSVC , atunci când se utilizează steag- ul /RTCs , permite verificarea în timp de compilare pentru depășiri de variabile locale, utilizarea variabilelor neinițializate, coruperea pointerului de stivă cauzată de convențiile de apelare nepotrivite. Utilizarea tehnologiei CRED (C range error detector) și a inserțiilor speciale în fața secțiunii protejate a stivei ( StackGuard , SSP ) permite parțial detectarea și prevenirea atacurilor asociate cu depășirea matricei și distrugerea stivei [24] .

Sistemul de operare poate controla și execuția programului. Această strategie poate fi utilă dacă codul sursă al acestui program este necunoscut. ASLR (Address Space Schema Randomization) este o caracteristică de securitate a sistemului de operare concepută pentru a împiedica rularea codului arbitrar. În prezent, ASLR este acceptat atât pe Linux , cât și pe Windows . Creșterea nivelului de securitate se realizează prin utilizarea tehnologiilor stack neexecutabile: W^X, PaX [24] .

Atacurile tipice asupra serviciilor web sunt injecția SQL, XSS, CSRF , clickjacking . Cadrele moderne ajută dezvoltatorii să creeze aplicații web sigure. Utilizarea soluțiilor gata făcute vă permite să nu vă ocupați de numeroase verificări ale datelor primite: de la anteturile solicitărilor HTTP până la conținutul acestora. De asemenea, oferă o metodă mai sigură de lucru cu baza de date  - ORM [25] [26] .

Daune

Informațiile despre vulnerabilități pot fi folosite de atacatori pentru a scrie viruși . De exemplu, unul dintre primii viermi de rețea cunoscuți ( virusul Morris ) în 1988 a exploatat vulnerabilități, cum ar fi o depășire a tamponului în demonul Unix , pentru a se răspândi între mașini. Atunci numărul mașinilor infectate a fost de aproximativ 6 mii [27] , iar prejudiciul economic, conform Camerei de Conturi a SUA, a variat între 10 și 100 de milioane de dolari [28] .

În 2016 , virușii informatici au cauzat daune în valoare de 450 de miliarde de dolari economiei globale [29] [30] .

În 2017, pagubele cauzate de virusul WannaCry au fost estimate la 1 miliard de dolari. Au fost raportate infecții în cel puțin 150 de țări [31] [32] [33] . Virusul a folosit exploatarea EternalBlue exploatând o vulnerabilitate de depășire a tamponului în protocolul SMB [34] [35] [36] [37] .

Note

  1. GOST R 56939-2016, 2016 , Termeni și definiții, pp. 2.
  2. 1 2 Introducere în Ghidul de codare sigură .
  3. Programare defensivă .
  4. 1 2 3 Engineering Principles for Information Technology Security, 2004 , Security Foundations.Principle 2, pp. 7.
  5. Criteriile de evaluare a securității în tehnologia informației, 2002 , Dispoziții generale, pp. III-IV.
  6. Engineering Principles for Information Technology Security, 2004 , Security Foundations, pp. 6-8.
  7. Engineering Principles for Information Technology Security, 2004 , Security Foundations. Principiul 5, pp. opt.
  8. Tehnologii moderne pentru dezvoltarea de programe fiabile și sigure, 2008 , pp. 25-26.
  9. Tehnologii moderne pentru dezvoltarea de programe fiabile și sigure, 2008 , pp. 26.
  10. Secure Programming HOWTO - Creating Secure Software, 2015 , Principii de securitate, pp. 7-8.
  11. 1 2 Revista Hacker: Măsurăm vulnerabilitățile, 2009 , pp. 48-51.
  12. OSVDB: FIN, 2016 .
  13. Hacker Magazine: Measuring Vulnerabilities, 2009 , Utilizarea clasificatorilor în scanere, pp. 51: „Auditorii moderni automatizați sunt de obicei adaptați unei anumite baze de cunoștințe. În primul rând, este prestigios, iar în al doilea rând, este util. De exemplu, atunci când se pregătește pentru certificare conform unuia dintre standardele moderne (NERC-CIP, PCI , FISMA, GLBA sau HIPAA), administratorului i se oferă posibilitatea de a primi un raport șablon care corespunde documentului emis de auditor.
  14. Hacker Magazine: Measuring Vulnerabilities, 2009 , Clasificări selectate, pp. 51: „Uneori puteți vedea clasificări absolut făcute de sine pe web... Desigur, un astfel de sistem nu are prea multă greutate, deoarece ar trebui să fie compilat de experți reali care înțeleg esența problemei.”
  15. Introducere în Ghidul de codare sigură , O privire.
  16. Common Vulnerability Scoring System, 2006 , p.86.
  17. CVSS: Specificație .
  18. CVSS:Specificație , 1.2. Scor: „Valoarea de bază poate fi rafinată prin calcularea valorilor temporale și contextuale pentru a reflecta mai bine riscul pentru utilizator cauzat de vulnerabilitate.”
  19. 24 de păcate capitale ale securității software: defecte de programare și cum să le remediați, 2009 , introducere.
  20. Metoda de căutare a vulnerabilității șirurilor de format, 2015 , Introducere: „Chiar și în lucrările anilor 90, s-a demonstrat că munca incorectă cu șirul de format poate duce la vulnerabilități grave de securitate a software-ului, cum ar fi execuția arbitrară a codului, escaladarea privilegiilor și scurgeri de informații. date sensibile”.
  21. The Protection of Information in Computer Systems, 1975 , h) Acceptabilitate psihologică: „Este foarte important ca interfața cu utilizatorul să fie ușor de utilizat, astfel încât utilizatorii să aplice în mod intuitiv și simplu mecanismele de protecție în mod corect. Dacă reprezentările mentale ale utilizatorului cu privire la obiectivele de protecție sunt în concordanță cu mecanismele pe care le folosește în practică, numărul erorilor va fi minimizat. Dacă utilizatorul trebuie să-și traducă ideile despre protecție într-un limbaj complet diferit de specificații, va face inevitabil greșeli.
  22. Secure Coding in C and C++, 2013 , Figura 1.2. Logica defectuoasă exploatată de viermele W32.Blaster.Worm: „Defectele logice exploatate de viermele W32.Blaster.Worm sunt prezentate în fig. 1.2. Problema este că bucla while de pe liniile 21 și 22 (folosită pentru a extrage numele gazdei dintr-un șir lung) nu este suficient de delimitată."
  23. Secure Coding in C and C++, 2013 , 2.6 Runtime Protection Strategies:Input Validation.
  24. 1 2 Secure Coding in C and C++, 2013 , 2.6 Runtime Protection Strategies.
  25. Django Security .
  26. Ruby on Rails Security .
  27. Notes of a Computer Virus Researcher, 2005 , Tabelul 3.1, p. 90.
  28. Malware History, 2010 , The NSA versus Morris: $100 Million in Damage, p. 23.
  29. CNBC International: Crima cibernetică costă economia globală 450 de miliarde de dolari .
  30. The New Paper: Cybercrime a costat economia mondială 620 de miliarde de dolari anul trecut .
  31. RBC: Daunele cauzate de virusul WannaCry au fost estimate la 1 miliard de dolari .
  32. 6abs: Daunele cauzate de virusul WannaCry au depășit 1 miliard de dolari .
  33. Hi-Tech Mail.ru: Experții au numit o cantitate record de daune cauzate de virusul WannaCry .
  34. MS17-010: Pool-ul mare nepaginat al EternalBlue în driverul SRV .
  35. WannaCry ransomware utilizat în atacuri răspândite în întreaga lume .
  36. CNews: Daune economice cauzate de viruși .
  37. Pierderi nete: estimarea costului global al criminalității cibernetice .

Literatură

Lectură suplimentară

  • Seacord RC Standardul de codare sigură CERT  C. - 2008. - P. Pearson Education. — 720p. — ISBN 9780132702461 .

Link -uri