Säker programmering
Säker programmering är en mjukvaruutvecklingsteknik som förhindrar oavsiktlig introduktion av sårbarheter och ger motstånd mot skadlig programvara och obehörig åtkomst . Buggar och logiska fel är den främsta orsaken till sårbarheter i programvara.
Säker programvara är programvara som utvecklats med hjälp av en uppsättning åtgärder som syftar till att förhindra uppkomsten och eliminera programsårbarheter [1] .
Uppgiften med säker programmering är att skydda användardata från stöld och skada, för att behålla kontrollen över systemet. Ett osäkert program är ett potentiellt mål för en angripare som kan använda befintliga sårbarheter för att visa, ändra eller ta bort befintlig information, påverka driften av program och tjänster (starta eller stoppa) och injicera skadlig kod i systemet [2] .
Terminologi
I engelsk litteratur finns det två termer som kan översättas till säker programmering.
Defensiv programmering är en mjukvaruutvecklingsprincip där utvecklare försöker ta hänsyn till alla möjliga fel och misslyckanden, isolera dem så mycket som möjligt och om möjligt återställa programmets prestanda vid fel. Detta bör göra programvaran mer stabil och mindre sårbar. Till exempel är en hårdvaruimplementering av denna princip en watchdog-timer , kontrollsummaberäkning - för att upptäcka fel i paketdataöverföring [3] .
Säker kodning är en teknik för att skriva program som är resistenta mot attacker från skadlig programvara och inkräktare. Säker programmering hjälper till att skydda användardata från stöld eller korruption. Dessutom kan ett osäkert program ge en angripare tillgång att kontrollera användarens server eller dator; Konsekvenserna kan sträcka sig från denial of service till en enskild användare till att äventyra känslig information, förlust av service eller skada på tusentals användares system [2] .
Betydelse
Frågorna om att säkerställa systemets säkerhet och funktion är en integrerad del av konstruktionsstadiet ( systemdesign) [4] . Säkerhetskrav för specifika IT- produkter och -system fastställs utifrån befintliga och förutspådda säkerhetshot, den säkerhetspolicy som förs och även med hänsyn till villkoren för deras tillämpning [5] . Att implementera säkerhetslösningar efter att ett system har utvecklats är komplext och dyrt. Därför bör säkerhetskrav beaktas redan från början under hela systemets livscykel [4] .
Informationssystemet är uppdelat i fysiska och logiska nivåer. Att förstå exakt vad som behöver skyddas från yttre faktorer hjälper till med det mest effektiva valet och tillämpningen av skyddsåtgärder. En tydlig gräns mellan nivåer bör bestämmas av den säkerhetspolicy som styr en viss uppsättning informations- och informationsteknologier som har fysiska gränser. En ytterligare komplikation är att samma dator eller server kan vara värd för både offentlig och privat information. Som ett resultat kan flera säkerhetspolicyer tillämpas på samma maskin eller inom samma system. När man utvecklar ett informationssystem bör därför säkerhetsgränser beaktas och beskrivas i relevant dokumentation och systemsäkerhetspolicyer [4] . Dess utvecklare måste kunna säkerställa systemets säkerhet när de designar , utvecklar , hanterar och konfigurerar , integrerar, korrekt testa [6] .
Analys (manuell eller automatisk) och säkerhet är en dyr procedur som ökar den totala kostnaden för en mjukvaruprodukt . Tidigare var fullständig eliminering av risker ett gemensamt mål för säkerheten. Idag är det känt att det inte är kostnadseffektivt att eliminera alla risker. För varje föreslaget kontrollsystem bör en kostnads-nyttoanalys genomföras. I vissa fall kan fördelarna med ett säkrare system inte motivera de direkta och indirekta kostnaderna. Fördelarna inkluderar inte bara förebyggande av monetära förluster; Det är värt att överväga till exempel rykteförluster. Direkta kostnader inkluderar kostnaden för att förvärva och installera denna teknik; indirekta kostnader inkluderar minskad systemprestanda och ytterligare utbildning av anställda [7] .
Principer
För närvarande finns det olika tekniker för att utveckla säker programvara . Men det finns en uppsättning principer som beaktas i alla tillvägagångssätt [8] :
- prestanda och användbarhet ( användbarhet , engelsk användbarhet );
- säkerhet ( engelska säkerhet ) - förmågan att skydda mot externa hot, attacker och upprätthålla prestanda efter att de reflekterats och eliminerats;
- reliability ( engelska reliability ) - förutsägbart, korrekt och felsäkert beteende vid felaktiga initiala data;
- konfidentialitet ( engelska privacy ) - säkerställa säkert och korrekt arbete med konfidentiell information;
- Säkerställa integriteten och riktigheten av verksamheten ( engelska business integrity ) - en tydlig organisation av programunderhåll, kontroll av transparens, laglighet, korrekthet av användarens arbete.
De fyra sista egenskaperna har blivit grunden för Trustworthy computing (TwC) ( Eng. Trustworthy computing ) ("Computations that are trustworthy") - initiativ från Microsoft Corporation , vars huvuduppgift är att uppmärksamma utvecklarna på vikten av säkerställa dessa krav i varje steg av mjukvaruutvecklingen [9] .
Det finns många säkerhetsprinciper för programvara, varav de flesta liknar varandra. Deras generalisering kan betraktas som ovanstående principer [10] .
Klassificering och typer av sårbarheter
Klassificerare
Användningen av standardiserade sårbarhetsbeskrivningar förenklar arbetet för informationssäkerhetsspecialister. För närvarande finns det flera populära klassificerare [11] :
- CVE (Common Vulnerabilities and Exposures) - en ordbok över specifika sårbarheter för specifika produkter;
- CWE(Common Weakness Enumeration) - en databas över sårbarhetstyper. Huvudsyftet med projektet är att ge beskrivningar av vanliga typer av sårbarheter, sätt att förebygga, upptäcka och åtgärda dem;
- Säkerhetsfokus BID;
- OSVDB(Open Sourced Vulnerability Database) - "en öppen databas över sårbarheter" skapad av tre ideella organisationer. Slutade arbeta den 5 april 2016. Bloggen fortsätter att fungera [12] ;
- Secunia - ett band med sårbarheter från det välkända danska företaget Secunia inom området dator- och nätverkssäkerhet;
- IBM ISS X Force.
Moderna kodanalysatorer och automatiserade revisorer kan utnyttja liknande sårbarhetsbaser. Detta ökar förtroendet för produkten och kan också vara viktigt när man rapporterar om sårbarheter som finns i mjukvaruprodukten [13] .
Det finns även andra klassificerare. När man arbetar med dem bör man vara uppmärksam på författarna, eftersom varje klassificeringssystem måste skapas av experter inom detta område [14] .
Mätvärden
Varje program är ett potentiellt mål för angripare. Efter att ha hittat sårbarheter i applikationer eller tjänster kommer de att försöka använda dem för att stjäla konfidentiell information, korrupta data, kontrollera datorsystem och nätverk [15] . För att beskriva egenskaperna hos en sårbarhet använder experter CVSS- sårbarhetsriskpoängsystemet . Det är en skala baserad på vilka poäng som ges. Mätsystemet är utformat för att prioritera att åtgärda sårbarheter. Varje skala hänvisar till en specifik semantisk sektion, som kallas en metrik. Det finns tre sådana mått [16] [17] [11] :
- Base ( engelsk bas ) - sårbarhetsegenskaper som inte beror på tid och exekveringsmiljö. Syftar till att beskriva svårigheten att utnyttja en sårbarhet, den potentiella skadan på informationens konfidentialitet, integritet och tillgänglighet;
- Temporal ( engelska temporal ) - ett mått som tar hänsyn till tidsfaktorn, till exempel tiden för att åtgärda en sårbarhet;
- Contextual ( engelska environment ) - ett mått som tar hänsyn till information om mjukvarans miljö.
De två sista måtten är av hjälpkaraktär och används endast för att justera indikatorerna för den grundläggande måtten, med hänsyn till olika detaljer [18] .
Typer av sårbarheter
Lista över vanliga buggar som äventyrar säkerheten för moderna program [19] :
Det är omöjligt att lista alla kända sårbarheter med tanke på att nya dyker upp varje dag. Den här listan innehåller vanliga sårbarheter som är lätta att begå, men vars konsekvenser kan bli katastrofala. Till exempel orsakades spridningen av Blaster-masken av ett fel i bara två rader kod [22] .
Försvar
Den korrekta strategin för att skydda mot buggar och sårbarheter är att förhindra och förhindra dem. Detta kräver att utvecklaren ständigt kontrollerar indata. Till exempel är det bästa sättet att skydda mot buffertspillsattacker att säkerställa att indata inte överstiger storleken på bufferten där den är lagrad. Data som är avsedda att skickas till databasen kräver validering för att skydda mot en attack som SQL-injektion. Om data skickas till en webbsida bör den valideras mot XSS . Ett alltför stort antal kontroller komplicerar dock utvecklingen av programmets källkod och kan i sin tur leda till att det uppstår nya fel, så denna strategi bör kombineras med andra [23] .
Felskyddsmekanismer kan tillhandahållas av kompilatorn eller operativsystemet . GCC-kompilatorn tillåter användning av funktionen _builtin_object_size () för att få storleken på ett objekt genom en pekare till detta objekt, så att använda den gör kopieringsproceduren säkrare. MSVC , när du använder /RTCs- flaggan, tillåter kompileringstidskontroll för lokala variabelspill, användning av oinitierade variabler, korruption av stackpekare orsakad av felaktiga anropskonventioner. Användningen av CRED-teknik (C range error detector) och speciella insatser framför den skyddade sektionen av stacken ( StackGuard , SSP ) tillåter delvis att detektera och förhindra attacker associerade med arrayspill och stackförstörelse [24] .
Operativsystemet kan också styra exekveringen av programmet. Denna strategi kan vara användbar om källkoden för detta program är okänd. ASLR (Address Space Schema Randomization) är en säkerhetsfunktion i operativsystemet utformad för att förhindra att godtycklig kod körs. ASLR stöds för närvarande på både Linux och Windows . Att öka säkerhetsnivån uppnås genom att använda icke-körbara stackteknologier: W^X, PaX [24] .
Typiska attacker på webbtjänster är SQL-injektion, XSS, CSRF , clickjacking . Moderna ramverk hjälper utvecklare att skapa säkra webbapplikationer. Genom att använda färdiga lösningar kan du inte hantera många kontroller av inkommande data: från HTTP - förfrågningsrubriker till deras innehåll. Det ger också en säkrare metod att arbeta med databasen - ORM [25] [26] .
Skada
Information om sårbarheter kan användas av angripare för att skriva virus . Till exempel, en av de första kända nätverksmaskarna ( Morris-viruset ) 1988 utnyttjade sårbarheter som ett buffertspill i Unix fingerdemon för att spridas mellan maskiner. Då var antalet infekterade bilar cirka 6 tusen [27] , och de ekonomiska skadorna, enligt US Accounts Chamber, varierade från 10 till 100 miljoner dollar [28] .
År 2016 orsakade datavirus 450 miljarder dollar i skada på den globala ekonomin [29] [30] .
2017 uppskattades skadan från WannaCry -viruset till 1 miljard dollar. Infektioner har rapporterats i minst 150 länder [31] [32] [33] . Viruset använde EternalBlue och utnyttjade en sårbarhet för buffertspill i SMB- protokollet [34] [35] [36] [37] .
Anteckningar
- ↑ GOST R 56939-2016, 2016 , Termer och definitioner, s. 2.
- ↑ 1 2 Introduktion till Secure Coding Guide .
- ↑ Defensiv programmering .
- ↑ 1 2 3 Engineering Principles for Information Technology Security, 2004 , Security Foundations.Principe 2, pp. 7.
- ↑ Kriterier för informationsteknologisäkerhetsbedömning, 2002 , Allmänna bestämmelser, pp. III-IV.
- ↑ Engineering Principles for Information Technology Security, 2004 , Security Foundations, pp. 6-8.
- ↑ Tekniska principer för informationsteknologisäkerhet, 2004 , säkerhetsgrunder. Princip 5, s. åtta.
- ↑ Modern teknik för att utveckla pålitliga och säkra program, 2008 , s. 25-26.
- ↑ Modern teknik för att utveckla pålitliga och säkra program, 2008 , s. 26.
- ↑ Säker programmering HOWTO - Skapa säker programvara, 2015 , Säkerhetsprinciper, s. 7-8.
- ↑ 1 2 Hacker magazine: We measure vulnerabilities, 2009 , s. 48-51.
- ↑ OSVDB: FIN, 2016 .
- ↑ Hacker Magazine: Measuring Vulnerabilities, 2009 , Using Classifiers in Scanners, pp. 51: ”Moderna automatiserade revisorer är vanligtvis skräddarsydda för en specifik kunskapsbas. För det första är det prestigefyllt, och för det andra är det användbart. Vid till exempel förberedelser för certifiering enligt någon av de moderna standarderna (NERC-CIP, PCI , FISMA, GLBA eller HIPAA) ges administratören möjlighet att få en mallrapport som överensstämmer med det dokument som utfärdats av revisorn.
- ↑ Hacker Magazine: Measuring Vulnerabilities, 2009 , Selected Classifications, s. 51: "Ibland kan du se absolut självgjorda klassificeringar på webben ... Naturligtvis har ett sådant system inte mycket vikt, eftersom det borde sammanställas av riktiga experter som förstår problemets kärna."
- ↑ Introduktion till Secure Coding Guide , i ett ögonkast.
- ↑ Common Vulnerability Scoring System, 2006 , s.86.
- ↑ CVSS: Specifikation .
- ↑ CVSS:Specifikation , 1.2. Poängsättning: "Basmåttet kan förfinas genom att beräkna tidsmässiga och kontextuella mätvärden för att bättre återspegla risken för användaren som orsakas av sårbarheten."
- ↑ 24 Deadly Sins of Software Security: Programmeringsbrister och hur man fixar dem, 2009 , Introduktion.
- ↑ Sökmetod för sårbarhet för formatsträngar, 2015 , Inledning: "Även under 90-talets arbeten visades det att felaktigt arbete med formatsträngen kan leda till allvarliga säkerhetsbrister, såsom exekvering av godtycklig kod, eskalering av rättigheter och läckor av känsliga uppgifter."
- ↑ The Protection of Information in Computer Systems, 1975 , h) Psykologisk acceptans: ”Det är mycket viktigt att användargränssnittet är användarvänligt så att användarna intuitivt och enkelt tillämpar skyddsmekanismer på rätt sätt. Om användarens mentala representationer av skyddsmålen överensstämmer med de mekanismer som han använder i praktiken, kommer antalet fel att minimeras. Om användaren måste översätta sina idéer om skydd till ett helt annat specifikationsspråk kommer han oundvikligen att göra misstag.
- ↑ Säker kodning i C och C++, 2013 , Figur 1.2. Felaktig logik som utnyttjas av W32.Blaster.Worm: "De logiska bristerna som utnyttjas av W32.Blaster.Worm-masken visas i fig. 1.2. Felet är att while-slingan på raderna 21 och 22 (används för att extrahera värdnamnet från en lång sträng) inte är tillräckligt avgränsad."
- ↑ Säker kodning i C och C++, 2013 , 2.6 Runtime Protection Strategies: Input Validation.
- ↑ 1 2 Säker kodning i C och C++, 2013 , 2.6 Runtime Protection Strategies.
- ↑ Django Security .
- ↑ Ruby on Rails Security .
- ↑ Notes of a Computer Virus Researcher, 2005 , Tabell 3.1, sid. 90.
- ↑ Malware History, 2010 , NSA kontra Morris: 100 miljoner dollar i skada, s. 23.
- ↑ CNBC International: Cyberbrottslighet kostar den globala ekonomin 450 miljarder dollar .
- ↑ The New Paper: Cyberbrottslighet kostade världsekonomin 620 miljarder dollar förra året .
- ↑ RBC: Skadorna från WannaCry-viruset uppskattades till 1 miljard dollar .
- ↑ 6abs: Skadorna från WannaCry-viruset översteg 1 miljard dollar .
- ↑ Hi-Tech Mail.ru: Experter namngav en rekordmängd skada från WannaCry-viruset .
- ↑ MS17-010: EternalBlue's Large Non-paged Pool Overflow i SRV-drivrutin .
- ↑ WannaCry ransomware används i utbredda attacker över hela världen .
- ↑ CNews: Ekonomiska skador från virus .
- ↑ Nettoförluster: Uppskattning av den globala kostnaden för cyberbrottslighet .
Litteratur
- Kaspersky K. Anteckningar om en datorvirusforskare . - Peter, 2005. - P. 93, 103-104, 117-122. — 316 sid. — ISBN 5469003310 .
- GOST R 56939-2016: Informationssäkerhet. Utveckling av säker programvara. Allmänna krav / Federal Agency for Technical Regulation and Metroology. - Standarinform, 2016. - 24 sid.
- GOST R ISO/IEC 25010-2015: Informationsteknologi. System- och mjukvaruteknik. Krav och kvalitetsbedömning av system och mjukvara (SQuaRE). Kvalitetsmodeller av system och mjukvaruprodukter / Federal Agency for Technical Regulation and Metrology. - Standarinform, 2015. - 36 sid.
- Rysslands statliga tekniska kommission . Vägledningsdokument. Informationstekniksäkerhet. Kriterier för utvärdering av informationsteknologisäkerhet . - 2002. - P. III-IV. — 48 sid.
- Informationssäkerhet för företag. Studie av aktuella trender inom affärsinformationssäkerhet. : Forskning / Kaspersky Lab. - 2014. - S. 14.
- Komarov A. Vi mäter sårbarheter // Hacker : Journal. - 2009. - Nr 04 (124) . - S. 48-51.
- Safonov V. O. Moderna teknologier för utveckling av tillförlitliga och säkra program // Datorverktyg inom utbildning : Journal. - 2008. - Nr 06 . - S. 25-33.
- Vakhrushev I.A., Kaushan V.V., Padaryan V.A., Fedotov A.N. Formatsträngssårbarhet sökmetod // Proceedings of ISP RAS. - 2015. - T. 27 , nr 4 . - S. 23-38 . - S. 25-33.
- Howard M., LeBlanc D., Viega J. 24 Deadly Sins of Software Security : Programmeringsbrister och hur man åtgärdar dem . - McGraw Hill Professional, 2009. - 464 sid. — ISBN 9780071626767 .
- Seacord RC Säker kodning i C och C++ . - 2. - Addison-Wesley, 2013. - 600 sid. — ISBN 9780132981972 .
- Stoneburner G., Hayden C., Feringa A. Engineering Principles for Information Technology Security (A Baseline for Achieving Security) (engelska) / National Institute of Standards and Technology . - Revision A. - 2004. - 33 sid.
- Wheeler D.A. Säker programmering HOWTO - Skapa säker programvara . - 2015. - 186 sid.
- Historik om skadlig programvara (engelska) / BitDefender . - 2010. - S. 23-24. — 71 sid.
- Howard M., LeBlanc D. Skriva säker kod . - 2. - Microsoft Press, 2002. - S. 43. - 512 sid. — ISBN 9780735615885 .
Ytterligare läsning
Länkar
- Bondarenko, Maria . Skadorna från WannaCry-viruset uppskattades till 1 miljard dollar , Moskva: RBC (25 maj 2017). Hämtad 23 oktober 2017.
- Matyukhin, Grigory . Experter namngav en rekordstor skada från WannaCry-viruset , Moskva: Hi-Tech Mail.ru (25 maj 2017). Hämtad 23 oktober 2017.
- Borovko, Roman . Ekonomisk skada från virus , Moskva: CNews Analytics (2003). Hämtad 23 oktober 2017.
- Introduktion till Secure Coding Guide . https://developer.apple.com/ . Apple Inc. . Hämtad: 23 oktober 2017.
- Django Software Foundation . Säkerhet i Django . https://www.djangoproject.com/ _ Hämtad: 5 december 2017.
- Ruby on Rails Säkerhetsguide . http://rubyonrails.org/ . Hämtad: 5 december 2017.
- Graham, Luke . Cyberbrottslighet kostar den globala ekonomin 450 miljarder dollar: VD , USA: CNBC International (7 februari 2017). Hämtad 23 oktober 2017.
- Sol, David . Cyberbrottslighet kostade världsekonomin 620 miljarder dollar förra året , Singapore: The New Paper (5 juli 2017). Hämtad 23 oktober 2017.
- Skadorna från WannaCry-viruset översteg 1 miljard dollar (engelska) , USA: 6abc (25 maj 2017). Arkiverad från originalet den 15 oktober 2017. Hämtad 23 oktober 2017.
- William Gamazo Sanchez (Sårbarhetsforskning). MS17-010: EternalBlue 's Large Non-paged Pool Overflow i SRV-drivrutin . http://blog.trendmicro.com/ . Trend Micro (2 juni 2017). Hämtad: 23 oktober 2017.
- WannaCry ransomware används i utbredda attacker över hela världen . https://securelist.com/ . ZAO Kaspersky Lab (12 maj 2017). Hämtad: 23 oktober 2017.
- M. Tim Jones. Defensiv programmering (engelska) (inte tillgänglig länk) (1 februari 2005). Hämtad 12 november 2017. Arkiverad från originalet 13 november 2017.
- OSVDB: FIN (engelska) (nedlänk) . https://blog.osvdb.org/ (5 april 2016). Hämtad 3 december 2017. Arkiverad från originalet 28 maj 2016.
- Common Vulnerability Scoring System v3.0 : Specifikationsdokument . https://www.first.org/ . FÖRST. Hämtad: 12 november 2017.