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] :

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] :

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] :

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

  1. GOST R 56939-2016, 2016 , Termer och definitioner, s. 2.
  2. 1 2 Introduktion till Secure Coding Guide .
  3. Defensiv programmering .
  4. 1 2 3 Engineering Principles for Information Technology Security, 2004 , Security Foundations.Principe 2, pp. 7.
  5. Kriterier för informationsteknologisäkerhetsbedömning, 2002 , Allmänna bestämmelser, pp. III-IV.
  6. Engineering Principles for Information Technology Security, 2004 , Security Foundations, pp. 6-8.
  7. Tekniska principer för informationsteknologisäkerhet, 2004 , säkerhetsgrunder. Princip 5, s. åtta.
  8. Modern teknik för att utveckla pålitliga och säkra program, 2008 , s. 25-26.
  9. Modern teknik för att utveckla pålitliga och säkra program, 2008 , s. 26.
  10. Säker programmering HOWTO - Skapa säker programvara, 2015 , Säkerhetsprinciper, s. 7-8.
  11. 1 2 Hacker magazine: We measure vulnerabilities, 2009 , s. 48-51.
  12. OSVDB: FIN, 2016 .
  13. 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.
  14. 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."
  15. Introduktion till Secure Coding Guide , i ett ögonkast.
  16. Common Vulnerability Scoring System, 2006 , s.86.
  17. CVSS: Specifikation .
  18. 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."
  19. 24 Deadly Sins of Software Security: Programmeringsbrister och hur man fixar dem, 2009 , Introduktion.
  20. 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."
  21. 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.
  22. 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."
  23. Säker kodning i C och C++, 2013 , 2.6 Runtime Protection Strategies: Input Validation.
  24. 1 2 Säker kodning i C och C++, 2013 , 2.6 Runtime Protection Strategies.
  25. Django Security .
  26. Ruby on Rails Security .
  27. Notes of a Computer Virus Researcher, 2005 , Tabell 3.1, sid. 90.
  28. Malware History, 2010 , NSA kontra Morris: 100 miljoner dollar i skada, s. 23.
  29. CNBC International: Cyberbrottslighet kostar den globala ekonomin 450 miljarder dollar .
  30. The New Paper: Cyberbrottslighet kostade världsekonomin 620 miljarder dollar förra året .
  31. RBC: Skadorna från WannaCry-viruset uppskattades till 1 miljard dollar .
  32. 6abs: Skadorna från WannaCry-viruset översteg 1 miljard dollar .
  33. Hi-Tech Mail.ru: Experter namngav en rekordmängd skada från WannaCry-viruset .
  34. MS17-010: EternalBlue's Large Non-paged Pool Overflow i SRV-drivrutin .
  35. WannaCry ransomware används i utbredda attacker över hela världen .
  36. CNews: Ekonomiska skador från virus .
  37. Nettoförluster: Uppskattning av den globala kostnaden för cyberbrottslighet .

Litteratur

Ytterligare läsning

Länkar