secure coding guidelines
Ta vadnica razlaga varno kodiranje, kako se izogniti ranljivostim, povezanim z varnostjo, in vsebuje smernice za kodiranje in kontrolni seznam za prakse varnega kodiranja:
Če želimo v programsko opremo vgraditi varnost in uporabiti smernice in najboljše prakse za varno kodiranje, mora celotna organizacija skupaj z ekipo, opredeljeno za delo pri predvidenem razvoju aplikacij, upoštevati nekatere vidike.
Tu bomo razpravljali o tistih vidikih, ki pomagajo razviti zavarovano programsko opremo.
Preprosto je, če razvijalec ne ve, kaj pomeni „Varnost programske opreme“ in kako lahko heker vdre v njihovo programsko opremo, prevzame nadzor nad njo in poskusi izkoristiti, potem je preprosto nemogoče kodirati varno programsko opremo. Torej mora razvijalec najprej razumeti pomen varnega kodiranja.
Kaj se boste naučili:
Kaj je varno kodiranje?
Varno kodiranje je načrtovanje in razvoj programske opreme do izogibanje slabostim ki vodijo do varnostnih ranljivosti z upoštevanjem določenih varnostnih standardov in najboljših industrijskih praks.
Prvo vprašanje, ki se pojavi v mislih vseh, je „Koliko varnosti zahteva naša programska oprema“ ali Kdaj lahko rečemo, da je naša programska oprema zaščitena? in Kakšni so ti varnostni standardi ?
Goljufije in varnostne grožnje se iz dneva v dan povečujejo in opažamo nove sorte in načine vdorov, tudi v tako imenovano najbolj zavarovano programsko opremo.
Pred kratkim smo slišali, da se program Aaadhar UIDAI spreminja glede osebnih podatkov. Zato je res težko vedeti, koliko varnosti je potrebna za programsko opremo in kakšni so varnostni standardi, razen če razumemo nevarnosti, povezane s programsko opremo, in jih določimo na podlagi tveganj za podjetje.
kako namestiti datoteko .bin
Morda bo težko zagotoviti 100-odstotno varnostno zaščito programske opreme, vendar če programska skupina analizira Tveganja in vrednostni papirji ki sodelujejo v njihovi programski opremi, tj.potencialnih grožnjah in če lahko ekipa poskrbi za njihovo ublažitev, bi bilo dobro z varnostne točke aplikacije.
Tako je prva naloga ekipe prepoznati in analizirati tveganja in vrednostne papirje, ki sodelujejo pri njihovi uporabi, ter razumeti možne možnosti ublažitve in v skladu s tem sprejeti najboljšo možnost.
Torej, ko prepozna deset najboljših ranljivosti, razvrsti skoraj vse napade, s katerimi se bo verjetno soočil program. To bo pomagalo razumeti grožnje in dati prednost varnostnim in razvojnim prizadevanjem bolj kot preprečevanje kot ublažitev.
Npr. Medtem ko nameravamo razviti aplikacijo, povezano z zdravstvom, ki obdeluje in hrani posameznikove zdravstvene podatke in njihove osebne podatke, je največje varnostno tveganje za aplikacijo kraja osebnih zdravstvenih podatkov.
Zmanjšanje tveganja
Da bi zmanjšali tveganje,
- Izvajanje varnosti dostopa do podatkov s strani nepooblaščenega uporabnika je treba obravnavati s pravilno avtentikacijo in avtorizacijo (močne izvedbe pravilnikov gesel, 2 Factor Authentication).
- Paziti je treba, da med prenosom podatkov iz enega vira v drugega ne pride do uhajanja podatkov z uvedbo zaščitenih kanalov (HTTPS) prenosa podatkov in izvajanjem šifriranja podatkov med prenosom.
- Druga možnost je tudi nedovoljeno poseganje ali kraja podatkov. Zato je shranjevanje osebnih zdravstvenih podatkov (uporaba šifriranja) zelo pomembno.
Preden se odpravite v 'Standard za varno kodiranje', je vedno bolje, da ima celotna programska ekipa a „Seja ozaveščanja o varnosti“ in razpravljali o možganih,
- Zahteva po varnosti za njihov poseben izdelek.
- Možne koristi, ki bi jih imel heker, če bi vdrl v njihov sistem.
- Možni načini in načini varnostnih kompromisov njihove uporabe.
- V podobni panogi in na drugem področju so sledile običajne varnostne prakse.
- Razumevanje tipičnih varnostnih težav njihovih programov.
Prav tako pomaga ekipi, da bolje ravna, če jo lahko razume Viri ranljivosti s katerimi se lahko sooča njihova programska oprema in razlogi, zaradi katerih je programska oprema zgrajena Slabo / neustrezno Varnost .
Razlogi za neustrezno izvajanje varnosti
Na splošno je nekaj razlogov za neustrezno izvajanje varnosti v aplikaciji.
- Prednost je dana funkcionalni izdaji kot varnostnim vidikom.
- Neznanje ali neobveščenost o varnosti programske opreme in hekerjih.
- Premalo jasnosti glede programa ali samega oblikovanja programske opreme.
- Zapletenost programa.
- Ni dovolj podatkov, informacije o aktivnem sistemu, kamor bo razporejen.
- Brez upoštevanja varnosti v fazah SDLC.
- Nezadostno znanje in razumevanje posebnosti jezika, ki se uporablja v programski opremi.
- Skupini in razvijalcem ni dovolj znanja o smernicah za varnostno kodiranje.
Vemo, da se vsi razvijalci in preizkuševalci ne zavedajo varnosti aplikacije in morda poglobljeno ne razumejo varnostnih ranljivosti in izkoriščanja, zlasti aplikacije, s katero bi delali. Na splošno jih bodo poznali, 'Kako funkcionalno kodirati' vendar vsi ne vedo, 'Kako varno kodirati'.
Zato je zelo pomemben vidik, da organizacija sprejme prakse varnega kodiranja v svoji programski opremi, najprej 'Izobraževanje ljudi' . Torej je zelo pomembno usposabljanje njihove ekipe o vidikih varnega kodiranja, najboljših praksah varnostnega kodiranja in pravilni uporabi orodij.
Najpomembnejše oblikovalsko načelo varnosti programske opreme je „Izvedba varnosti z zasnovo in privzeto“ .
Smernice za varno kodiranje
Za doseganje varnosti je zelo pomembno, da imate „Standard varnega kodiranja“ za program na samem začetku razvoja aplikacije, kar ekipi pomaga pri varnih privzetih nastavitvah za programsko opremo in jo zaščiti pred napadi.
Bistveno je zagotoviti, da je celotna ekipa Uveljavljeno v skladu s tem standardom , ne glede na kodni jezik in orodja, ki jih uporabljajo v programu.
Spodaj je nekaj primerov, ki jih je treba privzeto implementirati v zasnovo varne kode:
- Dostop mora biti omejen samo na overjene uporabnike, preverjanje pristnosti pa je treba izvesti na vsaki plasti.
- Za zaščito žetonov za preverjanje pristnosti je treba šifrirati komunikacijske kanale.
- Vsi ključi, gesla in potrdila morajo biti pravilno shranjeni in zaščiteni.
- Izvesti je treba šifriranje datotek, šifriranje baze podatkov in šifriranje podatkovnih elementov.
Izbira jezika za varno kodiranje
Izbira jezika za kodiranje morda ni odvisna od varnega kodiranja. Kot zaščiten ali nezaščiten jezik ni nič posebnega za kodiranje za izdelavo zaščitene programske opreme.
pripomoček za spremljanje temperature procesorja in hitrosti ventilatorja
Ravno tako uporabljamo programski jezik za izdelavo programske opreme in koliko poglobljenega znanja ima razvijalec o kodirnem jeziku pri izvajanju varnostnih vidikov.
Vendar je pojasnjeno, da čeprav Standardi varnega kodiranja so neodvisni od izbire jezika, najboljše prakse varne kode so odvisne od jezika, platforme in izvedbe .
Za razvijalno kodo je zato razvijalcu nujno poglobljeno znanje jezika, ki se uporablja v programu, tako da je mogoče z lahkoto uvesti najboljše varnostne prakse.
Primer:
- Verjetnost prepolnitve medpomnilnika se od jezika do jezika razlikuje, vendar C, C ++ in Assembly zaradi svojih zastarelih zmožnosti upravljanja pomnilnika veljajo za najbolj dovzetne. Več standardnih funkcij C lib, na primer strcpy () in memcpy (), je ranljivih za napade prelivanja medpomnilnika. Napačna uporaba teh funkcij s kopiranjem izvornega vmesnega pomnilnika, ki je prevelik, da bi se prilegal v ciljni vmesni pomnilnik, povzroči prelivanje medpomnilnika.
- Pogosta težava spletnih aplikacij, ki temeljijo na Javi, je možno puščanje virov, do katerega lahko pride zaradi odprtih sistemskih virov, kot so povezave datotek, vtičnic in baz podatkov.
Naslednji vidik varnosti je orodja, ki jih je treba uporabiti v aplikacijskem programu za optimizacijo varnosti z uporabo orodij, kot je Integrirana razvojna okolja bo najbolj koristno, saj zagotavljajo veliko Opozorila uporabnikom in opozorite na ta opozorila, da poskusite izboljšati kakovost programske opreme.
- Vključevanje komercialnih ali odprtokodnih knjižnic / vtičnikov, kot so Eclipse, Spring Tool Suite, RAD z IDE, pomaga razvijalcem pri pisanju varne kode z odkrivanjem in prepoznavanjem potencialno ranljive kode ter opozorila o ugotovitvah v zvezi z izvajanjem zlonamerne datoteke, uhajanjem informacij in nepravilno ravnanje z napakami.
Pomembno je tudi, da uporabite Statični in dinamični analizatorji za izboljšanje varnostnih vidikov programske opreme. Na splošno so statični analizatorji optimizirani za določene vrste napak, zato na koncu najdejo veliko število lažnih pozitivnih rezultatov, medtem ko prepoznajo določene napake. Včasih obstajajo možnosti, da tudi oni zamudijo dejanske napake.
Zato je priporočljivo uporabljati več statičnih analizatorjev za boljše pokrivanje različnih vrst napak in izogibanje številnim lažnim pozitivnim rezultatom. Včasih je priporočljivo tudi izvesti ročno testiranje do odpraviti lažne pozitivne učinke .
Pravila in priporočila za varno kodiranje
Dobro je, da program opredeli nabor „Pravila in priporočila za varno kodiranje“ za katerega je mogoče ovrednotiti izvorno kodo glede skladnosti, tako da lahko preskuševalci izvedejo „Preskušanje skladnosti“ za vsakega od teh standardov varnega kodiranja.
Zato je mogoče varnostno kodo potrditi kot skladno ali neskladno z uporabo teh pravil glede na nastavljeno referenčno vrednost.
Nekaj spodaj navedenih pravil je mogoče uporabiti za preverjanje kršitev varnosti:
- Datoteke je treba zapreti, ko niso več potrebne.
- Kadar koli prehajamo strukturo čez mejo, se je treba izogibati uhajanju informacij.
- Predmeti morajo biti prijavljeni z ustreznim trajanjem shranjevanja.
Torej je treba oblikovati in izvesti testne primere za preverjanje teh pravil, da se preveri skladnost. Ugotovljeno je tudi, da večino ranljivosti povzročajo tipične pogoste programske napake.
Zato mora razvijalec razumeti „Negotova metoda kodiranja“ , hkrati pa se naučijo najboljših praks varnega kodiranja. Idealno je zbrati najpogostejše programske napake, ki prispevajo k varnostnim ranljivostim njihove aplikacije, tako da je zanje mogoče poskrbeti med kodiranjem.
Takšne tipične programske napake prispevajo predvsem zaradi prelivov medpomnilnika, skriptov na več mestih in pomanjkljivosti vbrizgavanja.
Nekatere tipične programske ranljivosti vključujejo,
- SQL Injection (nepravilna nevtralizacija posebnih elementov, uporabljenih v ukazu SQL).
- Celotno prelivanje.
- Preliv medpomnilnika (kopiranje medpomnilnika brez preverjanja velikosti vnosa).
- Nekontroliran niz oblike.
- Manjkajoča overitev in avtorizacija (napačna avtorizacija).
- Izpostavljenost občutljivim podatkom.
- Nepravilno ravnanje z napakami.
Nekatere od teh napak lahko privedejo do sesutja sistema, nepričakovanega dostopa do sistema in nadzora nad programsko opremo, ki jo hekerji izgubijo.
Izogibajte se pogostim napakam pri programiranju
Spodaj je navedenih nekaj pogostih napak pri programiranju, ki se jim je treba izogniti:
- Nepravilna nevtralizacija posebnih elementov, uporabljenih v ukazu SQL („SQL Injection“).
- Kopiranje medpomnilnika brez preverjanja velikosti vnosa ('Classic Buffer Overflow').
- Manjkajoča overitev za kritično funkcijo.
- Manjkajoča ali napačna avtorizacija.
- Uporaba poverilnic.
- Manjka šifriranje občutljivih podatkov.
- Neomejen prenos datoteke z nevarno vrsto.
- Zanašanje na nezaupljive vnose v odločbi o varnosti.
- Izvedba z nepotrebnimi privilegiji.
- Ponarejanje zahtev za več spletnih mest (CSRF).
- Prenos kode brez preverjanja integritete.
- Napačen izračun velikosti medpomnilnika.
- Neustrezna omejitev pretiranih poskusov preverjanja pristnosti.
- Preusmeritev URL-ja na nezanesljivo spletno mesto („Odpri preusmeritev“).
- Nekontroliran niz oblike.
- Uporaba enosmernega razprševanja brez soli.
Kontrolni seznam za prakse varne kode
Nenazadnje pa morajo razvijalci po preučitvi vseh zgornjih točk vidikov varnega razvoja programske opreme slediti Vzpostavljen kontrolni seznam za prakse varne kode da se stvari ne zamudijo. Spodaj je nekaj, vendar ne izčrpen seznam.
Potrditev vnosa:
- Ne zaupajte vnosu, razmislite o centraliziranem preverjanju vnosa.
- Ne zanašajte se na preverjanje na strani odjemalca.
- Bodite previdni pri vprašanjih kanonizacije.
- Omejite, zavrnite in razkužite prispevek. Potrdite vrsto, dolžino, obliko in obseg.
Preverjanje pristnosti:
- Mesto particije po anonimnem, identificiranem in overjenem območju.
- Uporabite močna gesla.
- Podpira obdobja veljavnosti gesla in onemogočanje računa.
- Ne shranjujte poverilnic (uporabite enosmerne zgoščene posnetke s soljo).
- Šifrirajte komunikacijske kanale za zaščito žetonov za preverjanje pristnosti.
- Piškotke za preverjanje pristnosti obrazcev posredujte samo prek povezav HTTPS.
Dovoljenje:
- Uporabite najmanj privilegirane račune.
- Razmislite o podrobnosti pooblastila.
- Uveljaviti ločitev privilegijev.
- Omejite dostop uporabnika do sistemskih virov.
- Za overjanje in avtorizacijo uporabite protokol OAuth 2.0.
- Preverjanje izvedbe API-ja.
- Dovoljene metode na seznamu dovoljenih.
- Zaščitite privilegirana dejanja in občutljive zbirke virov.
- Zaščitite pred ponarejanjem virov na več mestih (CSRF).
Vodenje sej:
- Na strežniku ustvarite identifikator seje.
- Končajte sejo z odjavo.
- Ustvari novo sejo o ponovni overitvi.
- Nastavite atribut 'varno' za piškotke, ki se prenašajo prek TLS.
Kriptografija:
java kodiranje intervju vprašanja in odgovori
- Uporabite kriptografijo med „Podatki v prenosu, Podatki v pomnilniku, Podatki v gibanju, Celovitost sporočila“.
- Ne razvijajte svojega. Uporabite preizkušene funkcije platforme.
- Nešifrirane podatke hranite blizu algoritma.
- Uporabite pravi algoritem in velikost ključa.
- Izogibajte se upravljanju s ključi (uporabite DPAPI).
- Redno kolesarite po tipkah.
- Shranjujte ključe na omejenem mestu.
Beleženje in revizija:
- Ugotovite zlonamerno vedenje.
- Vedeti, kako izgleda dober promet.
- Revizija in beleženje dejavnosti na vseh ravneh aplikacij.
- Zavaren dostop do dnevniških datotek.
- Varnostno kopirajte in redno analizirajte dnevniške datoteke.
Izhodno kodiranje:
- Izvedba „Preverjanje vnosa (XML, JSON….).
- Uporabite parametrizirano poizvedbo.
- Izvedite 'validacijo sheme'.
- Izvedite kodiranje (XML, JSON ..).
- Pošlji varnostne glave.
Referenca: ' Kontrolni seznam praks varnega kodiranja OWASP (Skratka, kontrolni seznam SCP) '
Tabelarični povzetek kontrolnega seznama za varno kodiranje
Spodnja tabela povzema „Stvari, ki si jih je treba zapomniti pri varni kodi“ aplikacije.
# | Kaj? |
---|---|
7. | Zagotoviti, da je celotna ekipa prisiljena spoštovati standard varnega kodiranja. |
1. | Da bi jasno razumeli: 'Kaj je varna koda'? |
dva | Da bi razumeli pogoste „vire ranljivosti“. |
3. | Izvesti skupino „Ozaveščanje o varnosti“. |
4. | Ugotoviti in analizirati „tveganja in vrednostne papirje“, vključene v vlogo in metode za „ublažitev“. |
5. | 'Usposobiti ekipo' o standardih varnega kodiranja, najboljših praksah in smernicah. |
6. | Določitev „standarda za varno kodiranje“ |
8. | Uporaba jezika, ki je enostaven za izvajanje, in njegovo poglobljeno znanje. |
9. | Uporaba orodij IDE (Integrirano razvojno okolje) |
10. | Uporaba „statičnih in dinamičnih analizatorjev“ in „več statičnih analizatorjev“ za odpravo „lažnih pozitivnih rezultatov“ |
enajst | Če želite izvesti 'Ročno preskušanje', kjer koli je treba ugotoviti napako, zamudite. |
12. | Določiti sklop „pravil in priporočil za varno kodiranje“ |
13. | Izvesti 'Preskušanje skladnosti' za zastavljena pravila. |
14. | Da bi razumeli „Negotovo metodo kodiranja“ in zbrali „Pogoste napake pri programiranju“. |
petnajst | Za dosledno upoštevanje „kontrolnega seznama SCP“ |
Zaključek
Upamo, da bo ta vadnica vaš najboljši vodnik za zagotavljanje varnosti programske opreme.
Smernice za kodiranje varnega razvoja programske opreme so bile tukaj naštete preprosto in s primeri za lažje razumevanje koncepta.
Veselo branje !!
Priporočeno branje
- Testiranje varnosti (popoln vodnik)
- 30 najboljših podjetij za kibernetsko varnost v letu 2021 (od malih do velikih podjetij)
- Osnove računalniškega programiranja za začetnike | Vadnica za kodiranje
- 15 najboljših brezplačnih urejevalnikov kod za popolno kodiranje
- Vadnica za testiranje vbrizgavanja SQL (primer in preprečevanje napada vbrizgavanja SQL)
- Razvijalci niso dobri preizkuševalci. Kaj praviš?
- Oblika izpita ISTQB Foundation & smernice za reševanje prispevkov
- Smernice za testiranje varnosti mobilnih aplikacij