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] :
- performanță și utilitate ( utilizabilitate , utilizare în limba engleză );
- securitate ( English security ) - capacitatea de a proteja împotriva amenințărilor externe, atacurilor și de a menține performanța după ce acestea sunt reflectate și eliminate;
- fiabilitate ( engleză fiabilitate ) - comportament previzibil, corect și sigur în caz de date inițiale incorecte;
- confidențialitate ( în engleză privacy ) - asigurarea lucrului sigur și corect cu informații confidențiale;
- Asigurarea integrității și corectitudinii afacerii (în engleză business integrity ) - o organizare clară a întreținerii programului, controlul transparenței, legalității, corectitudinii muncii utilizatorului.
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] :
- CVE (Common Vulnerabilities and Exposures) - un dicționar de vulnerabilități specifice ale anumitor produse;
- CWE(Common Weakness Enumeration) - o bază de date cu tipuri de vulnerabilități. Obiectivul principal al proiectului este de a oferi descrieri ale tipurilor comune de vulnerabilități, modalități de a le preveni, detecta și remedia;
- Securitate Focus BID;
- OSVDB(Open Sourced Vulnerability Database) - „o bază de date deschisă a vulnerabilităților” creată de trei organizații non-profit. A încetat să lucreze pe 5 aprilie 2016. Blogul continuă să funcționeze [12] ;
- Secunia - o bandă cu vulnerabilități a cunoscutei companii daneze Secunia în domeniul securității computerelor și rețelelor;
- IBM ISS X Force.
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] :
- Bază ( bază în limba engleză ) - caracteristici de vulnerabilitate care nu depind de timp și de mediul de execuție. Servește pentru a descrie dificultatea exploatării unei vulnerabilități, potențiala deteriorare a confidențialității, integrității și disponibilității informațiilor;
- Temporal ( temporal în engleză ) - o metrică care ia în considerare factorul timp, de exemplu, timpul de remediere a unei vulnerabilități;
- Contextual ( în engleză de mediu ) - o măsură care ia în considerare informații despre mediul software-ului.
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] :
- implementarea codului SQL ( ing. SQL injectare );
- vulnerabilități asociate cu serverele web ( XSS , XSRF , divizarea cererilor HTTP ( divizarea răspunsului HTTP ));
- vulnerabilități ale clientului web ( DOM XSS );
- buffer overflow ( în engleză Buffer Overflow );
- defecte de șir de format [20] ( șir de format necontrolat );
- depășiri întregi ( ing. depășire de întregi );
- gestionarea incorectă a excepțiilor și erorilor;
- injectare comandă (injectare comandă, ing. Injectare comandă );
- scurgeri de informații ( Expunerea la informații în engleză );
- starea cursei ; _ _
- utilizare slabă [21] ( Insuficientă acceptabilitate psihologică );
- executarea codului cu privilegii ridicate ( ing. Execuție cu privilegii inutile );
- stocarea datelor neprotejate ( Protection Mechanism Failure );
- probleme cu codul mobil( Probleme cu codul mobil ing. );
- parole slabe ;
- numere aleatoare slabe;
- alegerea slabă a algoritmilor criptografici;
- utilizarea soluțiilor criptografice nesigure;
- trafic de rețea neprotejat ( Transmitere în text clar a informațiilor sensibile ) ;
- utilizarea incorectă a PKI ( Validare a certificatului incorectă în engleză );
- încredere în mecanismul de rezoluție a numelor de rețea ( ing. Reliance on Reverse DNS Resolution ).
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
- ↑ GOST R 56939-2016, 2016 , Termeni și definiții, pp. 2.
- ↑ 1 2 Introducere în Ghidul de codare sigură .
- ↑ Programare defensivă .
- ↑ 1 2 3 Engineering Principles for Information Technology Security, 2004 , Security Foundations.Principle 2, pp. 7.
- ↑ Criteriile de evaluare a securității în tehnologia informației, 2002 , Dispoziții generale, pp. III-IV.
- ↑ Engineering Principles for Information Technology Security, 2004 , Security Foundations, pp. 6-8.
- ↑ Engineering Principles for Information Technology Security, 2004 , Security Foundations. Principiul 5, pp. opt.
- ↑ Tehnologii moderne pentru dezvoltarea de programe fiabile și sigure, 2008 , pp. 25-26.
- ↑ Tehnologii moderne pentru dezvoltarea de programe fiabile și sigure, 2008 , pp. 26.
- ↑ Secure Programming HOWTO - Creating Secure Software, 2015 , Principii de securitate, pp. 7-8.
- ↑ 1 2 Revista Hacker: Măsurăm vulnerabilitățile, 2009 , pp. 48-51.
- ↑ OSVDB: FIN, 2016 .
- ↑ 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.
- ↑ 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.”
- ↑ Introducere în Ghidul de codare sigură , O privire.
- ↑ Common Vulnerability Scoring System, 2006 , p.86.
- ↑ CVSS: Specificație .
- ↑ 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.”
- ↑ 24 de păcate capitale ale securității software: defecte de programare și cum să le remediați, 2009 , introducere.
- ↑ 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”.
- ↑ 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.
- ↑ 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ă."
- ↑ Secure Coding in C and C++, 2013 , 2.6 Runtime Protection Strategies:Input Validation.
- ↑ 1 2 Secure Coding in C and C++, 2013 , 2.6 Runtime Protection Strategies.
- ↑ Django Security .
- ↑ Ruby on Rails Security .
- ↑ Notes of a Computer Virus Researcher, 2005 , Tabelul 3.1, p. 90.
- ↑ Malware History, 2010 , The NSA versus Morris: $100 Million in Damage, p. 23.
- ↑ CNBC International: Crima cibernetică costă economia globală 450 de miliarde de dolari .
- ↑ The New Paper: Cybercrime a costat economia mondială 620 de miliarde de dolari anul trecut .
- ↑ RBC: Daunele cauzate de virusul WannaCry au fost estimate la 1 miliard de dolari .
- ↑ 6abs: Daunele cauzate de virusul WannaCry au depășit 1 miliard de dolari .
- ↑ Hi-Tech Mail.ru: Experții au numit o cantitate record de daune cauzate de virusul WannaCry .
- ↑ MS17-010: Pool-ul mare nepaginat al EternalBlue în driverul SRV .
- ↑ WannaCry ransomware utilizat în atacuri răspândite în întreaga lume .
- ↑ CNews: Daune economice cauzate de viruși .
- ↑ Pierderi nete: estimarea costului global al criminalității cibernetice .
Literatură
- Kaspersky K. Note ale unui cercetător de viruși informatici . - Petru, 2005. - P. 93, 103-104, 117-122. — 316 p. — ISBN 5469003310 .
- GOST R 56939-2016: Securitatea informațiilor. Dezvoltarea de software securizat. Cerințe generale / Agenția Federală pentru Reglementare Tehnică și Metrologie. - Standartinform, 2016. - 24 p.
- GOST R ISO/IEC 25010-2015: Tehnologia informației. Inginerie de sistem și software. Cerințe și evaluarea calității sistemelor și software-ului (SQuaRE). Modele de calitate ale sistemelor și produselor software / Agenția Federală pentru Reglementare Tehnică și Metrologie. - Standartinform, 2015. - 36 p.
- Comisia Tehnică de Stat a Rusiei . Document de orientare. Securitatea tehnologiei informației. Criterii de evaluare a securității tehnologiei informației . - 2002. - P. III-IV. — 48p.
- Securitatea informațiilor în afaceri. Studiul tendințelor actuale în securitatea informațiilor în afaceri. : Cercetare / Kaspersky Lab. - 2014. - P. 14.
- Komarov A. Măsurăm vulnerabilitățile // Hacker : Journal. - 2009. - Nr 04 (124) . - P. 48-51.
- Safonov V. O. Tehnologii moderne pentru dezvoltarea de programe fiabile și sigure // Instrumente informatice în educație: Jurnal. - 2008. - Nr 06 . - P. 25-33.
- Vakhrushev I.A., Kaushan V.V., Padaryan V.A., Fedotov A.N. Metoda de căutare a vulnerabilității șirurilor de format // Proceedings of ISP RAS. - 2015. - T. 27 , Nr. 4 . - S. 23-38 . - P. 25-33.
- Howard M., LeBlanc D., Viega J. 24 de păcate capitale ale securității software : defecte de programare și cum să le remediați . - McGraw Hill Professional, 2009. - 464 p. — ISBN 9780071626767 .
- Seacord RC Secure Coding în C și C++ . - 2. - Addison-Wesley, 2013. - 600 p. — ISBN 9780132981972 .
- Stoneburner G., Hayden C., Feringa A. Engineering Principles for Information Technology Security (A Baseline for Achieving Security) (engleză) / National Institute of Standards and Technology . - Revizia A. - 2004. - 33 p.
- Wheeler D.A. Programare securizată HOWTO - Crearea unui software securizat . - 2015. - 186 p.
- Istoricul programelor malware (engleză) / BitDefender . - 2010. - P. 23-24. — 71p.
- Howard M., LeBlanc D. Scrierea codului sigur . - 2. - Microsoft Press, 2002. - P. 43. - 512 p. — ISBN 9780735615885 .
Lectură suplimentară
- Seacord RC Standardul de codare sigură CERT C. - 2008. - P. Pearson Education. — 720p. — ISBN 9780132702461 .
Link -uri
- Bondarenko, Maria . Pagubele cauzate de virusul WannaCry au fost estimate la un miliard de dolari , Moscova: RBC (25 mai 2017). Preluat la 23 octombrie 2017.
- Matyukhin, Grigori . Experții au numit o cantitate record de daune cauzate de virusul WannaCry , Moscova: Hi-Tech Mail.ru (25 mai 2017). Preluat la 23 octombrie 2017.
- Borovko, Roman . Daune economice cauzate de viruși , Moscova: CNews Analytics (2003). Preluat la 23 octombrie 2017.
- Introducere în Ghidul de codare sigură . https://developer.apple.com/ . Compania Apple. . Preluat: 23 octombrie 2017.
- Django Software Foundation . Securitate în Django . https://www.djangoproject.com/ _ Preluat: 5 decembrie 2017.
- Ghid de securitate Ruby on Rails . http://rubyonrails.org/ . Preluat: 5 decembrie 2017.
- Graham, Luke . Criminalitatea cibernetică costă economia globală 450 de miliarde de dolari: CEO , SUA: CNBC International (7 februarie 2017). Preluat la 23 octombrie 2017.
- Soare, David . Crima cibernetică a costat economia mondială 620 de miliarde de dolari anul trecut , Singapore: The New Paper (5 iulie 2017). Preluat la 23 octombrie 2017.
- Prejudiciul cauzat de virusul WannaCry a depășit 1 miliard de dolari (engleză) , SUA: 6abc (25 mai 2017). Arhivat din original pe 15 octombrie 2017. Preluat la 23 octombrie 2017.
- William Gamazo Sanchez (Vulnerability Research). MS17-010: Pool -ul mare nepaginat al lui EternalBlue în driverul SRV . http://blog.trendmicro.com/ . Trend Micro (2 iunie 2017). Preluat: 23 octombrie 2017.
- WannaCry ransomware utilizat în atacuri larg răspândite în întreaga lume . https://securelist.com/ . ZAO Kaspersky Lab (12 mai 2017). Preluat: 23 octombrie 2017.
- M. Tim Jones. Programare defensivă (engleză) (link indisponibil) (1 februarie 2005). Consultat la 12 noiembrie 2017. Arhivat din original pe 13 noiembrie 2017.
- OSVDB: FIN (engleză) (downlink) . https://blog.osvdb.org/ (5 aprilie 2016). Preluat la 3 decembrie 2017. Arhivat din original la 28 mai 2016.
- Common Vulnerability Scoring System v3.0 : Document de specificații . https://www.first.org/ . PRIMUL. Preluat: 12 noiembrie 2017.