secure coding guidelines
Ovaj vodič objašnjava sigurno kodiranje, kako izbjeći sigurnosne ranjivosti i pruža smjernice i kontrolni popis za prakse sigurnog kodiranja:
Da bi se sigurnost ugradila u softver i primijenile Smjernice i najbolje prakse za sigurno kodiranje, cijela organizacija, zajedno s timom utvrđenim za rad na planiranom razvoju aplikacija, mora uzeti u obzir određene aspekte.
Ovdje ćemo razgovarati o onim aspektima koji pomažu u razvoju sigurnog softvera.
To je tako jednostavno ako programer ne zna što se podrazumijeva pod tim ‘Sigurnost softvera’ i kako haker može hakirati njihov softver, preuzeti kontrolu nad njim i pokušati ga iskoristiti, onda je jednostavno nemoguće kodirati siguran softver. Dakle, programer prvo mora razumjeti značenje sigurnog kodiranja.
Što ćete naučiti:
- Što je sigurno kodiranje?
- Smjernice za sigurno kodiranje
- Kontrolni popis za prakse sigurnih kodova
- Zaključak
Što je sigurno kodiranje?
Sigurno kodiranje je dizajn i razvoj softvera izbjegavanje slabosti koji dovode do ranjivosti povezanih sa sigurnošću pridržavanjem navedenih sigurnosnih standarda i najboljih praksi u industriji.
Prvo pitanje koje se nameće svima u mislima je ‘Koliko je sigurnosti potrebno za naš softver’ ili Kada možemo reći da je naš softver osiguran? i Koji su to sigurnosni standardi ?
Prijevare i sigurnosne prijetnje povećavaju se iz dana u dan i vidimo nove vrste i načine hakiranja, čak i u takozvanom najsigurnijem softveru.
Nedavno smo čuli kako se UIDAI-ov program Aaadhar miješa u osobne podatke. Stoga je stvarno teško znati koliko je sigurnosti potrebno za softver i koji su sigurnosni standardi, osim ako ne razumijemo prijetnje uključene u softver i ne odredimo ih prema prioritetima na temelju rizika za poslovanje.
Možda će biti teško pružiti 100% sigurnosnu zaštitu softveru, ali ako programski tim analizira Rizici i vrijednosni papiri koji su uključeni u njihov softver, tj. potencijalne prijetnje i ako se tim može pobrinuti za ublažavanje tih rizika, to bi bilo dobro sa sigurnosne točke aplikacije.
Stoga je prvi zadatak tima identificirati i analizirati rizike i vrijednosne papire koji su uključeni u njihovu primjenu te razumjeti moguće mogućnosti ublažavanja i u skladu s tim usvojiti najbolju opciju.
Dakle, jednom identificirane top deset ranjivosti klasificiraju gotovo sve napade s kojima će se program vjerojatno suočiti. To će pomoći u razumijevanju prijetnji i davanju prioriteta sigurnosnim i razvojnim naporima više prema prevenciji nego prema ublažavanju.
Npr. Iako planiramo razviti zdravstvenu aplikaciju koja obrađuje i pohranjuje zdravstvene podatke pojedinca i njihove osobne podatke, najveći sigurnosni rizik za aplikaciju je krađa osobnih zdravstvenih podataka.
koji je sigurnosni ključ na usmjerivaču
Ublažavanje rizika
Da biste ublažili rizik,
- Provedbom sigurnosti pristupa podacima od strane neovlaštenog korisnika potrebno je postupati s odgovarajućom provjerom autentičnosti i autorizacijom (jake implementacije pravila zaporke, 2-faktorska provjera autentičnosti).
- Potrebno je paziti da tijekom prijenosa podataka iz jednog u drugi izvor ne dođe do curenja podataka primjenom zaštićenih kanala (HTTPS) prijenosa podataka i provedbom šifriranja podataka tijekom prijenosa.
- Također je druga mogućnost neovlašteno miješanje ili krađa podataka. Stoga je pohrana osobnih zdravstvenih podataka (korištenje šifriranja) vrlo bitna.
Prije odlaska na 'Standard sigurnog kodiranja', uvijek je bolje da cijeli programski tim ima ‘Sjednica svijesti o sigurnosti’ i raspravljati i mozgati o tome,
- Zahtjev sigurnosti za njihov specifični proizvod.
- Moguće koristi koje bi haker imao hakiranjem njihovog sustava.
- Mogući načini i sredstva sigurnosnih kompromisa njihove primjene.
- Uslijedile su uobičajene sigurnosne prakse u sličnoj industriji i domeni.
- Razumijevanje tipičnih sigurnosnih problema njihovih programa.
Također pomaže timu da se bolje snađe, ako može razumjeti Izvori ranjivosti s kojim se njihov softver može suočiti i razlozi zbog kojih je softver izgrađen Loše / neadekvatno Sigurnost .
Razlozi za neadekvatnu provedbu sigurnosti
Općenito, slijedi nekoliko razloga za neadekvatnu provedbu sigurnosti u aplikaciji.
- Prednost se daje funkcionalnom izdanju od sigurnosnih aspekata.
- Neznanje ili nepoznavanje sigurnosti softvera i hakera.
- Nema dovoljno jasnoće u pogledu Programa ili samog dizajna softvera.
- Složenost programa.
- Nema dovoljno podataka, informacije o aktivnom sustavu na kojem će se implementirati.
- Bez razmatranja sigurnosti u SDLC fazama.
- Nedovoljno znanje i razumijevanje specifičnosti jezika koji se koristi u softveru.
- Nema dovoljno znanja za tim i programere o smjernicama za sigurnosno kodiranje.
Znamo da nisu svi programeri i ispitivači svjesni sigurnosti aplikacije i možda neće imati dubinsko razumijevanje sigurnosnih ranjivosti i iskorištavanja, posebno aplikacije na kojoj bi radili. Općenito, bit će im poznato, 'Kako kodirati funkcionalno' ali ne znaju svi oni 'Kako sigurno kodirati'.
Stoga je vrlo važan aspekt za organizaciju da usvoji prakse sigurnog kodiranja u svom softveru prvo ‘Treniraj ljude’ . Dakle, vrlo je važno osposobiti njihov tim o aspektima sigurnog kodiranja, najboljim praksama sigurnosnog kodiranja i ispravnoj upotrebi alata.
Najvažniji princip dizajna softverske sigurnosti je da ‘Provedba sigurnosti dizajnom i zadanim postavkama’ .
Smjernice za sigurno kodiranje
Da biste postigli sigurnost, vrlo je bitno imati a 'Standard sigurnog kodiranja' identificiran za program na samom početku razvoja aplikacije, a to pomaže timu da se brine za sigurne zadane vrijednosti softvera i štiti ga od napada.
Bitno je osigurati da cijeli tim jest Prisiljeno pridržavati se ovog standarda , bez obzira na jezik kodiranja i alate koje koriste u programu.
Slijedi nekoliko primjera koje treba standardno implementirati u dizajn sigurnog koda:
- Pristup bi trebao biti ograničen samo na ovjerene korisnike, a ovjeru treba provesti na svakom sloju.
- Komunikacijski kanali trebaju biti šifrirani da bi se zaštitili tokeni za provjeru autentičnosti.
- Svi ključevi, lozinke i certifikati moraju biti pravilno pohranjeni i zaštićeni.
- Treba implementirati enkripciju datoteka, enkripciju baze podataka i enkripciju podataka.
Odabir jezika za sigurno kodiranje
Odabir jezika za kodiranje možda neće ovisiti o sigurnom kodiranju. Ne postoji ništa specifično kao zaštićeni ili nesigurni jezik za kodiranje za izgradnju sigurnog softvera.
Upravo se mi koristimo programskim jezikom za izgradnju softvera i koliko dubinskog znanja programer ima o kodiranju u provođenju sigurnosnih aspekata.
Međutim, pojašnjava se da je ipak Standardi sigurnog kodiranja neovisni su o odabiru jezika, najbolji postupci sigurnog koda ovise o jeziku, o platformi i o implementaciji .
Stoga je za razvoj sigurnosnog koda neophodno da programer dobro poznaje jezik koji se koristi u programu, tako da se najbolje sigurnosne prakse mogu lako primijeniti.
Primjer:
najbolji softver za uklanjanje zlonamjernog i špijunskog softvera
- Vjerojatnost ranjivosti preljeva međuspremnika razlikuje se od jezika do jezika, ali C, C ++ i Assembly smatraju se najosjetljivijima zbog svojih zastarjelih mogućnosti upravljanja memorijom. Nekoliko standardnih C lib funkcija, poput strcpy () i memcpy (), ranjivo je na napade prelijevanja međuspremnika. Neispravna upotreba ovih funkcija kopiranjem izvornog međuspremnika koji je prevelik da bi se uklopio u odredišni međuspremnik rezultira preljevom međuspremnika.
- Uobičajeni problem u web-aplikacijama temeljenim na Javi je moguće curenje resursa koje se može dogoditi zbog otvorenih resursa sustava, kao što su datoteke, utičnica i veze s bazom podataka.
Sljedeći aspekt sigurnosti odnosi se na alati koji će se koristiti u aplikacijskom programu za optimizaciju sigurnosti, koristeći alate poput Integrirana razvojna okruženja će biti najkorisnije jer pružaju puno Upozorenja korisnicima i skrenite pozornost na ta upozorenja kako bi pokušali poboljšati kvalitetu softvera.
- Integracija komercijalnih ili open-source knjižnica / dodataka kao što su Eclipse, Spring Tool Suite, RAD s IDE-om pomaže programerima da napišu siguran kôd otkrivanjem i identificiranjem potencijalno ranjivog koda i daje upozorenja o nalazima povezanim s izvršavanjem zlonamjernih datoteka, curenjem informacija i nepravilno postupanje s pogreškama.
Također je bitno koristiti Statički i dinamički analizatori za poboljšanje sigurnosnih aspekata softvera. Općenito, statički analizatori optimizirani su za određene vrste pogrešaka, pa na kraju pronalaze velik broj lažno pozitivnih rezultata dok identificiraju određene pogreške. Ponekad postoje mogućnosti da i oni propuste stvarne pogreške.
Stoga se preporučuje korištenje više statičkih analizatora kako bi se postiglo bolje pokrivanje različitih vrsta pogrešaka i izbjeglo puno lažnih pozitivnih rezultata. Ponekad se preporučuje i provođenje ručno ispitivanje do eliminirati lažne pozitivne rezultate .
Sigurna pravila kodiranja i preporuke
Bilo bi dobro da Program definira skup ‘Pravila i preporuke sigurnog kodiranja’ kojima se izvorni kod može procijeniti na usklađenost kako bi testeri mogli izvršiti ‘Ispitivanje sukladnosti’ za svaki od ovih standarda sigurnog kodiranja.
Stoga se sigurnosni kod može potvrditi kao Sukladan ili Neusaglašen koristeći se tim pravilima u odnosu na postavljenu referentnu vrijednost.
Nekoliko od dolje spomenutih pravila može se koristiti za provjeru sigurnosnih kršenja:
- Datoteke je potrebno zatvoriti kad više nisu potrebne.
- Kad god prolazi strukturu preko granice, treba izbjegavati curenje informacija.
- Predmeti se trebaju prijaviti u odgovarajućem trajanju skladištenja.
Dakle, potrebno je osmisliti i provesti test slučajeve za provjeru ovih pravila kako bi se provjerila sukladnost. Također je utvrđeno da su većina ranjivosti uzrokovane tipičnim uobičajenim programskim pogreškama.
Stoga programer mora razumjeti ‘Nesigurna metoda kodiranja’ , dok također uče najbolje prakse sigurnog kodiranja. Idealno je prikupiti najčešće programske pogreške koje doprinose sigurnosnim ranjivostima njihove aplikacije kako bi se mogle zbrinuti tijekom kodiranja.
Takvim tipičnim programskim pogreškama pridonose uglavnom preljevi međuspremnika, skriptiranje na više mjesta i nedostaci ubrizgavanja.
Neke od tipičnih programskih ranjivosti uključuju,
- SQL ubrizgavanje (Nepravilna neutralizacija posebnih elemenata korištenih u SQL naredbi).
- Preljev cijelog broja.
- Preliv međuspremnika (Kopija međuspremnika bez provjere veličine ulaza).
- Nekontrolirani niz formata.
- Nedostaje provjera autentičnosti i autorizacija (netočna autorizacija).
- Izloženost osjetljivim podacima.
- Nepravilno rukovanje pogreškama.
Neke od ovih pogrešaka mogu dovesti do pada sustava, nepredviđenog pristupa sustavu i hakera da izgube kontrolu nad softverom.
Česte pogreške u programiranju koje treba izbjegavati
U nastavku je navedeno nekoliko uobičajenih pogrešaka u programiranju koje treba izbjegavati:
- Nepravilna neutralizacija posebnih elemenata koji se koriste u SQL naredbi (‘SQL Injection’).
- Kopiranje međuspremnika bez provjere veličine ulaza ('Klasični preljev međuspremnika').
- Nedostaje provjera autentičnosti zbog kritične funkcije.
- Nedostaje ili je netočno odobrenje.
- Upotreba tvrdo kodiranih vjerodajnica.
- Nedostaje šifriranje osjetljivih podataka.
- Neograničen prijenos datoteke opasne vrste.
- Oslanjanje na nepouzdane ulaze u sigurnosnoj odluci.
- Izvršenje s nepotrebnim privilegijama.
- Krivotvorenje zahtjeva za više web lokacija (CSRF).
- Preuzimanje koda bez provjere integriteta.
- Pogrešan izračun veličine međuspremnika.
- Nepravilno ograničavanje pretjeranih pokušaja autentifikacije.
- Preusmjeravanje URL-a na nepouzdano web mjesto (‘Otvoreno preusmjeravanje’).
- Nekontrolirani niz formata.
- Korištenje jednosmjernog raspršivača bez soli.
Kontrolni popis za prakse sigurnih kodova
Posljednje, ali ne najmanje važno, nakon što razmotre sve gore navedene aspekte aspekata sigurnog razvoja softvera, programeri moraju slijediti Uspostavljen je kontrolni popis za prakse sigurnog kodeksa kako bi se osiguralo da se stvari ne propuste. Slijedi nekoliko, ali ne i iscrpan popis.
Provjera unosa:
- Ne vjerujte unosu, razmislite o centraliziranoj provjeri unosa.
- Ne oslanjajte se na provjeru na strani klijenta.
- Budite oprezni s pitanjima kanonizacije.
- Ograničite, odbacite i sanirajte unos. Potvrdite vrstu, duljinu, format i raspon.
Ovjera:
- Mjesto particije prema anonimnom, identificiranom i ovjerenom području.
- Koristite jake lozinke.
- Podržite razdoblja isteka lozinke i onemogućavanje računa.
- Ne pohranjujte vjerodajnice (koristite jednosmjerne hashove sa soli).
- Šifriranje komunikacijskih kanala za zaštitu tokena za provjeru autentičnosti.
- Kolačiće za provjeru autentičnosti prosljeđujte samo putem HTTPS veza.
Odobrenje:
- Koristite najmanje privilegirane račune.
- Razmotrite detaljnost autorizacije.
- Provesti odvajanje privilegija.
- Ograničite pristup korisnika resursima na razini sustava.
- Za autentifikaciju i autorizaciju koristite protokol OAuth 2.0.
- Provjera API-ja za provođenje.
- Dopuštene metode na dopuštenom popisu.
- Zaštitite privilegirane radnje i osjetljive zbirke resursa.
- Zaštitite se od krivotvorenja resursa na više lokacija (CSRF).
Upravljanje sjednicom:
- Stvorite identifikator sesije na poslužitelju.
- Prekinite sesiju odjavom.
- Generirajte novu sesiju o ponovnoj provjeri autentičnosti.
- Postavite atribut 'sigurno' za kolačiće koji se prenose putem TLS-a.
Kriptografija:
- Koristite kriptografiju dok su 'Podaci u prijenosu, podaci u pohrani, podaci u pokretu, cjelovitost poruke'.
- Ne razvijajte svoje. Koristite provjerene značajke platforme.
- Nešifrirane podatke držite u blizini algoritma.
- Koristite pravi algoritam i veličinu ključa.
- Izbjegavajte upravljanje ključevima (koristite DPAPI).
- Povremeno ciklirajte tipke.
- Pohranite ključeve na ograničenom mjestu.
Sječa i revizija:
- Prepoznajte zlonamjerno ponašanje.
- Znajte kako izgleda dobar promet.
- Revizija i evidentiranje aktivnosti kroz sve razine aplikacija.
- Siguran pristup datotekama dnevnika.
- Napravite sigurnosnu kopiju i redovito analizirajte datoteke dnevnika.
Izlazno kodiranje:
- Izvođenje ‘Provjera unosa (XML, JSON….).
- Upotrijebite parametarski upit.
- Provedite 'Provjeru sheme'.
- Izvršite kodiranje (XML, JSON ..).
- Pošaljite sigurnosna zaglavlja.
Referenca: ' OWASP kontrolni popis postupaka sigurnog kodiranja (Ukratko, SCP kontrolni popis) '
Tablični sažetak popisa sigurnog kodiranja
Tablica u nastavku sažima 'Stvari koje treba zapamtiti zbog sigurnog koda' aplikacije.
web stranice za gledanje animea besplatno
# | Što? |
---|---|
7 | Kako bi se osiguralo da se cijeli tim prisiljava pridržavati se standarda sigurnog kodiranja. |
1 | Da biste jasno razumjeli, 'Što je siguran kod'? |
dva | Da biste razumjeli uobičajene 'Izvore ranjivosti'. |
3 | Provesti tim za ‘Sjednicu svijesti o sigurnosti’. |
4 | Identificirati i analizirati „rizike i vrijednosne papire“ koji su uključeni u aplikaciju i metode za „ublažavanje“. |
5 | 'Obučiti tim' o standardima sigurnog kodiranja, najboljim praksama i smjernicama. |
6 | Definiranje 'Standarda sigurnog kodiranja' |
8 | Da biste koristili ‘Jezik koji je lagan za implementaciju’ i imali ga „dubinsko znanje“. |
9 | Korištenje alata IDE (Integrirano razvojno okruženje) |
10 | Upotreba 'statičkih i dinamičkih analizatora' i 'više statičkih analizatora' za uklanjanje 'lažnih pozitivnih rezultata' |
jedanaest | Da biste izvršili 'ručno testiranje' gdje god je potrebno za identificiranje pogreške, propustite. |
12 | Definiranje skupa 'Pravila i preporuke za sigurno kodiranje' |
13 | Izvršiti 'Ispitivanje sukladnosti' za postavljena pravila. |
14 | Da biste razumjeli 'nesigurnu metodu kodiranja' i prikupili 'Uobičajene pogreške programiranja'. |
petnaest | Strogo slijediti 'SCP kontrolni popis' |
Zaključak
Nadamo se da će vam ovaj vodič biti najbolji vodič za osiguravanje softverske sigurnosti.
Smjernice za kodiranje za siguran razvoj softvera ovdje su navedene jednostavnim riječima s primjerima za lakše razumijevanje koncepta.
Sretno čitanje !!
Preporučena literatura
- Ispitivanje sigurnosti (cjelovit vodič)
- Top 30 NAJBOLJIH tvrtki za kibernetsku sigurnost 2021. (mala i velika poduzeća)
- Osnove računalnog programiranja za početnike | Vodič za kodiranje
- Top 15 najboljih besplatnih uređivača koda za savršeno iskustvo kodiranja
- Vodič za ispitivanje ubrizgavanja SQL (Primjer i sprečavanje napada na ubrizgavanje SQL)
- Programeri nisu dobri testeri. Što kažeš?
- Format i smjernice za rješavanje radova ISTQB Foundation Exam
- Smjernice za testiranje sigurnosti mobilne aplikacije