Plonk listek kibernetske varnosti za razvijalce
V takšnih primerih je priročno imeti pri sebi seznam najbolj pogostih napak in ranljivosti oziroma plonk listek. V ta namen je Mykola Mozgovy, višji razvijalec programske opreme pri Sigma Software, pripravil seznam stvari, za katere je potrebno poskrbeti.
Kaj vsebuje plonk listek kibernetske varnosti?
Varnost programske opreme je konceptualno drugačna in zato ni tako intuitivna v primerjavi s splošnimi funkcionalnimi zahtevami. Kljub temu je varnost ključna lastnost programske opreme, zlasti ko gre za stroje, ki jih nadzoruje programska oprema, ki lahko vplivajo na življenje in zdravje strank ali sistemov, ki obdelujejo osebne podatke. Medtem ko se v večini primerov želeno vedenje programa obravnava kot primarni cilj, je glavna skrb varnosti ravno nasprotno: česa program ne bi smel narediti, z drugimi besedami, preprečiti neželeno vedenje.
Varnostne lastnosti
Obstajajo tri primarne lastnosti varnosti programske opreme, za katere se trudimo preprečiti kršitve:
- Zaupnost: Pomeni, da občutljive informacije ne bi smele puščati nepooblaščenim osebam;
- Integriteta: Pomeni, da nepooblaščene osebe ne smejo poškodovati shranjene informacije;
- Razpoložljivost: Pomeni, da mora sistem ostati odziven na zahteve (v skladu z dogovorjenimi pogoji).
Čeprav je intuitivno razpoložljivost povezana z zaščito pred napadi DoS, ni omejena nanje. Samo razmislite o naslednjih težavah:
- Nadgradnje aplikacij;
- Obnovitev posesti naslova IP;
- Podaljšanje posesti domene;
- Preklop potrdil za šifriranje in preverjanje pristnosti.
Kadarkoli so te lastnosti kršene, se šteje, da ima programska oprema ranljivost.
Ranljivost je varnostno pomembna napaka programske opreme, ki jo je mogoče izkoristiti za doseganje neželenega vedenja. Če je ranljivost posledica napake v načrtovanju in ne kode, jo imenujemo napaka.
Varnostna načela
Obstaja niz skupnih načel, ki jih morate upoštevati pri izdelavi varne programske opreme. Na splošno je mogoče ta načela razdeliti v naslednje kategorije:
- Preprečevanje – popolno odpravo napak; Na primer, mogoče je odpraviti celotne nize napak z uporabo pomnilniško varnih jezikov, kot sta Java ali C# namesto C/C++.
- Omilitev — zmanjšati škodo zaradi izkoriščanja neznane napake; Na primer, škodo ugrabljene baze podatkov je mogoče močno zmanjšati, če so shranjeni podatki šifrirani. Blokiranje računov s sumljivim vedenjem in zahtevanje dodatne potrditve o potencialno škodljivih dejanjih je še en primer.
- Odkrivanje – prepoznavanje in razumevanje napada; O morebitnih zlonamernih dejanjih se je treba čim prej obvestiti. Celovita telemetrija v realnem času je v tem primeru v veliko pomoč.
- Okrevanje — odpravi škodo: vedno je potrebno imeti pripravljene varnostne kopije podatkov in vsa ostala dodatna sredstva, ki so na voljo v nujnih primerih. Poleg tega je zelo pomembno imeti postopke za obnovitev komprimiranih uporabniških računov.
Osnovna načela, ki jih morate upoštevati, ko načrtujete, izvajate ali vzdržujete programsko opremo, so naslednja:
- Dajte prednost preprostosti (preprečevanje);
- Dajte prednost preprostemu dizajnu; »Naj bo enostavno, neumno,« je dobro znana šala, ki je popolnoma uporabna v tem kontekstu. Na primer, dvakrat premislite, ko izbirate med staromodnim monolitom in preveč opevanimi mikro storitvami. Vedno upoštevajte razpoložljive zmogljivosti in strokovno znanje.
- Uporabite varne privzete nastavitve;
Nikoli ne uporabljajte privzetih gesel, uporabite industrijsko standardno kriptografijo, dajte prednost dodajanju na seznam dovoljenih pred črnim seznamom itd.
- Ne pričakujte strokovnega uporabnika;
Več kot je na razpolago nenadzorovane moči, večja je verjetnost, da jo boste zlorabili. Na primer, namestitev aplikacij iz nezaupanja vrednih virov v Android (datoteke APK) zahteva izrecno aktiviranje te funkcije v nastavitvah naprave, kar je zanesljiva rešitev.
- Dajte prednost preprostemu uporabniškemu vmesniku;
Še enkrat, zapletenost je sovražnik varnosti. Kompleksni uporabniški vmesnik poveča možnost napake tako na strani razvijalca kot na strani uporabnika.
- Izogibajte se omogočanju uporabnikom, da sami odločajo o varnosti.
Ne smete domnevati, da uporabniki razumejo kriptografske sheme ali celo pravila varnega spletnega obnašanja, zato jim ne dovolite, da izberejo šifrirne algoritme in ključe ali nevarna gesla.
- Zaupajte z zadržanostjo (preprečevanje/blažitev posledic);
- Uporabite majhno zaupanja vredno računalniško bazo;
Več komponent (strojne in programske opreme) je sestavljen iz vašega sistema – širša je površina napada. V tem smislu je treba vsako novo platformo, ki jo boste podpirali, in vsako storitev, s katero se integrirate, obravnavati kot vir tveganja in nevarnosti.
- Izogibajte se uporabi lastne kriptografije;
Kriptografija je tako samoumevna zadeva, da poskus izvajanja njenih vidikov lastnoročno ni nič drugega kot napuh, razen če niste strokovnjak. Pravi pristop je uporaba odprtih, industrijskih standardnih protokolov in algoritmov.
- Najmanj možnih privilegijev za komponente in uporabnike;
Bodite previdni, ko dajete dovoljenja svoji aplikaciji in uporabnikom (tudi posredno). Ali vaša aplikacija res potrebuje dostop do datotečnega sistema? Ali je treba operacije branja za bazo podatkov izvajati pod računom z višjimi privilegiji?
- Potrditev vnosa;
Ne oskrbujte svojega sistema z napačno oblikovanimi podatki. Jasno določite meje veljavnih podatkov in jih uveljavite z uvrstitvijo na seznam dovoljenih.
- Spodbujajte zasebnost – omejite dostop do osebnih podatkov;
Formalna opredelitev zasebnih/osebnih podatkov se lahko razlikuje glede na lokalno zakonodajo, skupna značilnost zasebnih podatkov pa je neposredna ali posredna možnost določitve dejanske osebe, ki ji ti podatki pripadajo.
- Razdelitev – uporabite procese, posode in peskovnike za izolacijo komponent ali celo posameznih operacij drug od drugega.
- Poglobljena obramba;
- Varnost glede na raznolikost (HTTPS + varen jezik + šifriranje podatkov + VPN); Združite vse varnostne mehanizme, ki so vam na voljo. Hkrati pa opustite uporabo orodij izven svoje kompetence in po potrebi poiščite strokovnjaka.
- Uporabite standardne in odprtokodne rešitve (izogibajte se varnosti zaradi nejasnosti); Znebite se ideje, da lastniška programska oprema ali protokoli (zlasti vaši) zagotavljajo kakršno koli zaščito na podlagi, da jih nihče ne pozna. Samo javno dostopna in preučena orodja in protokoli lahko trdijo, da so varna.
- Spremljanje in sledljivost
- Zbiranje dnevnikov, telemetrija; Ne pozabite ustvariti alarmov za nevarne/sumljive dogodke.
- Naredite varnostne kopije/posnetke. Hranite jih na ločenih strežnikih in imejte mehanizme za njihovo obnovitev.
Zagotovo obstaja še več podobnih načel, vendar je v večini primerov upoštevanje zgoraj omenjenih več kot zadostno.
Varen razvojni proces
Precej običajno je, da se varnostna vprašanja obravnavajo reaktivno. S tem načinom pa lahko postanejo nevzdržna in povabilo za nepridiprave, kar je napačen pristop. Varen razvojni proces pomeni, da se za vsako stopnjo razvoja uvedejo potrebne aktivnosti in prakse:
- Zahteve
- Določite varnostne zahteve; Primer zlorabe – je nasprotje primera uporabe (ali funkcionalne zahteve). Izrecno mora opredeliti, česa sistem ne bi smel početi.
- Določite zahtevane varnostne lastnosti komponent sistema (tj. zaupnost, celovitost, razpoložljivost); Izrecno določite, kateri deli ohranjenih podatkov so zaupni. Ugotovite, katere vloge so prisotne v sistemu in s katerimi podatki bi morali manipulirati. Uredite zahteve glede razpoložljivosti.
- Določite varnostne mehanizme za podporo teh lastnosti (avtentikacija, avtorizacija, revizija); Prisotnost teh treh mehanizmov se pogosto obravnava kot »zlati standard varnosti«. Sistema ni mogoče šteti za varnega, če nima enega od njih.
- Določite modele groženj. To pomeni, da je treba opredeliti zlonamernega akterja in možne točke napada (npr. omrežni promet, lokalne datoteke ali celo prikazane podatke).
- Oblikovanje;
- Zasnova, ki temelji na grožnjah (odziv na predhodno definirane modele groženj v zasnovi sistema);
- Analiza/ocena arhitekturnega tveganja (prepoznavanje morebitnih pomanjkljivosti pri načrtovanju);
- Uporabite zgoraj opredeljena varnostna načela (preprečevanje, ublažitev, odkrivanje, obnovitev).
- Izvajanje;
- Sledite najboljši praksi in smernicam kodiranja;
- Izvedite obvezne preglede kode;
- Uporabite orodja za avtomatizacijo, da uveljavite najvišjo kakovost kode.
- Statična analiza;
- Simbolična izvedba;
- Konkolična izvedba.
- Testiranje;
- Varnostni testi na podlagi tveganja; Ti testi so usmerjeni v najbolj kritične dele sistema, ki jih prepoznamo z modeliranjem groženj.
- Penetracijski testi; Varnostni strokovnjaki igrajo vlogo storilca pri poskusu premagovanja varnostnih mehanizmov.
- Testiranje mehkega mehurčka; Napajanje sistema z naključnimi in napačno oblikovanimi podatki lahko pogosto izpostavi neželeno vedenje.
Pogoste napake pri načrtovanju in izvedbi
Ko sledite varnemu procesu razvoja, vedno imejte v mislih zmote, ki jih pogosto zagrešijo razvijalci:
- Predpostavite zaupanje, namesto da ga izrecno dajete;
- Uporabite mehanizem za preverjanje pristnosti, ki ga je mogoče zaobiti;
- Pooblastiti brez zadostnega konteksta;
- Zamešajte podatke in navodila za nadzor; Prav to je vir zloglasnih injekcij SQL, napadov XSS in oddaljenih izvedb kode.
- Nepreverjeni podatki;
- Neustrezna uporaba kriptografije;
- Neuspešno prepoznavanje občutljivih podatkov;
- Integriranje zunanjih komponent, ne da bi upoštevali njihovo napadalno površino;
- Togo omejevanje prihodnjih sprememb na predmete in akterje.
OWASP in 10 najbolj pogostih ranljivosti
Open Web Application Security Project je neprofitna organizacija, ki se osredotoča na izboljšanje varnosti programske opreme in odličen vir ter priročnik za kibernetsko varnost. Ponujajo uporabne smernice in plonk listke za priljubljene razvojne platforme, kot sta .NET in Java. OWASP je znan predvsem po svojih seznamih, ki opisujejo najpogostejše ranljivosti na različnih domenah:
- OWASP Web Top 10
- OWASP Mobile Top 10
- OWASP IoT Top 10
Zelo pomembno je, da ste dobro seznanjeni z ranljivostmi, s katerimi se boste srečevali na vaši domeni. Bolje preventiva kot kurativa.
Povzetek
Takoj se posvetite varnostnim pomislekom, ne upajte si jih odlagati do bridkega konca. Načrtujte in izvedite potrebne aktivnosti skozi vsako fazo razvoja, da ohranite vaše stranke varne in vaš ugled nesporen. Upam, da vam bo ta članek koristen, vendar ne pozabite, da je to le plonk listek za splošno kibernetsko varnost. Če želite postati kompetenten varnostni specialist, vas čaka veliko učenja in prakse.
Vložite svoj čas in sredstva v udeležbo različnih tečaj ali za pridobivanje certifikatov, ki so specifični za področje, ki vas zanima. S
Sigma Software ponuja več kot 60 zaposlitev na daljavo.
Pridružite se gibanju #StandWithUkraine in postanite del močne mednarodne tehnološke ekipe.
Avtor prispevka: Mykola Mozgovy, višji razvijalec programske opreme pri podjetju Sigma Software
Prijavi napako v članku