secure coding guidelines
Tento tutoriál vysvetľuje zabezpečené kódovanie, ako sa vyhnúť zraniteľnostiam súvisiacim so zabezpečením, a poskytuje pokyny a kontrolný zoznam pre bezpečné kódovanie:
Aby bolo možné v softvéri zabudovať zabezpečenie a implementovať pokyny a osvedčené postupy pre bezpečné kódovanie, musí celá organizácia spolu s tímom určeným na prácu na zamýšľanom vývoji aplikácií brať do úvahy určité aspekty.
Tu budeme diskutovať o tých aspektoch, ktoré pomáhajú vyvíjať zabezpečený softvér.
Je to také jednoduché, ak vývojár nevie, čo sa myslí „Zabezpečenie softvéru“ a ako môže hacker hacknúť svoj softvér, prevziať nad ním kontrolu a pokúsiť sa zneužiť, potom je jednoducho nemožné kódovať zabezpečený softvér. Vývojár musí teda najskôr pochopiť význam bezpečného kódovania.
Čo sa dozviete:
- Čo je bezpečné kódovanie?
- Pokyny na bezpečné kódovanie
- Kontrolný zoznam postupov zabezpečených kódov
- Záver
Čo je bezpečné kódovanie?
Bezpečné kódovanie je navrhovať a vyvíjať softvér pomocou vyhýbanie sa slabostiam ktoré vedú k zraniteľnostiam spojeným s bezpečnosťou dodržiavaním špecifikovaných bezpečnostných štandardov a najlepších postupov v odbore.
Úplne prvá otázka, ktorá sa vynára v mysli každého, je „Koľko zabezpečenia je potrebné pre náš softvér“ alebo Kedy môžeme povedať, že náš softvér je zabezpečený? a Čo sú to za bezpečnostné štandardy ?
Podvody a bezpečnostné hrozby každým dňom pribúdajú a vidíme nové varianty a spôsoby hackerstva, a to aj v takzvanom najbezpečnejšom softvéri.
Nedávno sme počuli, že program Aidad UIDAI neoprávnene upravuje osobné údaje. Preto je skutočne ťažké vedieť, koľko bezpečnosti je potrebné pre softvér a aké sú bezpečnostné štandardy, pokiaľ nerozumieme hrozbám, ktoré softvér predstavuje, a neuprednostňujeme ich na základe rizík pre podnik.
Môže byť ťažké poskytnúť softvéru 100% bezpečnostnú ochranu, ale ak programový tím analyzuje Riziká a cenné papiere potenciálne hrozby a ak sa tím dokáže postarať o zníženie týchto rizík, bolo by to dobré z hľadiska bezpečnosti aplikácie.
Úplne prvou úlohou tímu je teda identifikovať a analyzovať riziká a cenné papiere, ktoré sú súčasťou ich aplikácie, porozumieť možným možnostiam zmierňovania a podľa toho prijať najlepšiu možnosť.
Po identifikácii prvých desiatich zraniteľností teda môžeme klasifikovať takmer všetky útoky, ktorým program pravdepodobne bude čeliť. Pomôže to pochopiť riziká a uprednostniť bezpečnostné a rozvojové snahy skôr v oblasti prevencie ako zmierňovania.
Napr. Aj keď plánujeme vyvinúť aplikáciu súvisiacu so zdravotnou starostlivosťou, ktorá spracúva a ukladá údaje o zdraví jednotlivca a jeho osobné informácie, najdôležitejším bezpečnostným rizikom aplikácie je ukradnutie osobných údajov o zdraví.
Zmiernenie rizika
Na zmiernenie rizika
- Implementáciu zabezpečenia prístupu k údajom neoprávneným používateľom je potrebné zvládnuť pomocou náležitej autentifikácie a autorizácie (silné implementácie politiky hesla, 2faktorová autentifikácia).
- Je potrebné dbať na to, aby sa zabezpečilo, že počas prenosu údajov z jedného zdroja do druhého nedôjde k úniku údajov, a to implementáciou zabezpečených kanálov (HTTPS) prenosu údajov a implementáciou šifrovania údajov počas prepravy.
- Ďalšou možnosťou je manipulácia alebo odcudzenie údajov v pokoji. Ukladanie osobných údajov o zdraví (pomocou šifrovania) je preto veľmi dôležité.
Pred prechodom na štandard „Secure Coding Standard“ je vždy lepšie, aby celý programový tím mal a „Relácia o zvýšení povedomia o bezpečnosti“ a diskutovať a diskutovať o
- Požiadavka zabezpečenia ich konkrétneho produktu.
- Možné výhody, ktoré by hacker získal pri hacknutí svojho systému.
- Možné spôsoby a prostriedky bezpečnostných kompromisov ich aplikácie.
- Bežné bezpečnostné postupy sa uplatňovali v podobnom priemysle a doméne.
- Pochopenie typických bezpečnostných problémov príslušných programov.
Pomáha tiež tímu lepšie sa vysporiadať, ak rozumie Zdroje zraniteľností ktorým môže ich softvér čeliť, a dôvody, pre ktoré je softvér zostavený Slabé / nedostatočné Bezpečnosť .
Dôvody nedostatočnej implementácie bezpečnosti
Nasleduje všeobecne niekoľko dôvodov pre nedostatočnú implementáciu zabezpečenia v aplikácii.
- Priorita je daná funkčnému uvoľneniu pred bezpečnostnými aspektmi.
- Neznalosť alebo žiadne povedomie o bezpečnosti softvéru a hackeroch.
- Nedostatočná jasnosť v programe alebo v samotnom softvérovom dizajne.
- Zložitosť programu.
- Nedostatok údajov, informácie o živom systéme, kde bude nasadený.
- Bez ohľadu na bezpečnosť vo fázach SDLC.
- Nedostatočné znalosti a porozumenie špecifík jazyka používaného v softvéri.
- Nedostatok vedomostí pre tím a vývojárov o pokynoch pre bezpečnostné kódovanie.
Vieme, že to nie je to, že všetci vývojári a testeri sú si vedomí bezpečnosti aplikácie a nemusia mať dôkladné znalosti o bezpečnostných zraniteľnostiach a zneužitiach, najmä pokiaľ ide o aplikáciu, na ktorej by pracovali. Spravidla budú oboznámení s „Ako funkčne kódovať“ ale nie všetci vedia „Ako bezpečne kódovať“.
Preto je veľmi dôležitým aspektom pre organizáciu, aby vo svojom softvéri prijala postupy bezpečného kódovania, je prvý „Vlak ľudí“ . Školenie ich tímu v oblasti aspektov bezpečného kódovania, najlepších postupov v kódovaní zabezpečenia a používania správneho nástroja je preto veľmi dôležité.
Najdôležitejšou zásadou zabezpečenia softvéru je „Implementovať zabezpečenie zámerne a predvolene“ .
Pokyny na bezpečné kódovanie
Na dosiahnutie bezpečnosti je veľmi dôležité mať a „Štandard zabezpečeného kódovania“ identifikovaný pre program na samom začiatku vývoja aplikácie, a to pomáha tímu pri starostlivosti o softvér Secure Defaults pre softvér a pri ochrane pred útokmi.
Je nevyhnutné zabezpečiť, aby bol celý tím Vynútené dodržiavať tento štandard , bez ohľadu na kódovací jazyk a nástroje, ktoré používajú v programe.
Ďalej uvádzame niekoľko príkladov, ktoré je potrebné implicitne implementovať do návrhu zabezpečeného kódu:
- Prístup by mal byť obmedzený iba na autentifikovaných používateľov a autentifikáciu je potrebné implementovať v každej vrstve.
- Komunikačné kanály musia byť šifrované, aby sa chránili autentifikačné tokeny.
- Všetky kľúče, heslá a certifikáty musia byť správne uložené a chránené.
- Je potrebné implementovať šifrovanie súborov, šifrovanie databázy a šifrovanie dátových prvkov.
Výber jazyka pre bezpečné kódovanie
Výber jazyka pre kódovanie nemusí závisieť od bezpečného kódovania. Nie je nič konkrétne ako zabezpečený alebo nezabezpečený jazyk pre kódovanie na vytvorenie zabezpečeného softvéru.
Je to presne to, ako na programovanie používame programovací jazyk a koľko hlbokých vedomostí má vývojár o kódovacom jazyku pri implementácii bezpečnostných aspektov.
Je však zrejmé, že Štandardy zabezpečeného kódovania sú nezávislé na výbere jazyka, osvedčené postupy zabezpečeného kódu sú závislé od jazyka, platformy a implementácie. .
Pre zaistenie bezpečného kódu je preto nevyhnutné, aby mal vývojár hlboké znalosti jazyka, ktorý sa používa v programe, aby bolo možné ľahko implementovať osvedčené postupy zabezpečenia.
Príklad:
- Pravdepodobnosť zraniteľnosti pri pretečení medzipamäte sa líši od jazyka k jazyku, ale C, C ++ a Assembly sú považované za najcitlivejšie kvôli ich zastaraným schopnostiam správy pamäte. Niekoľko štandardných funkcií C lib, ako napríklad strcpy () a memcpy (), je náchylných na útoky pretečením medzipamäte. Nesprávne použitie týchto funkcií, kopírovanie zdrojovej medzipamäte, ktorá je príliš veľká na to, aby sa zmestila do cieľovej medzipamäte, vedie k pretečeniu medzipamäte.
- Spoločným problémom webových aplikácií založených na prostredí Java sú možné úniky prostriedkov, ktoré môžu nastať v dôsledku otvorených systémových prostriedkov, ako sú pripojenie súborov, soketov a databáz.
Ďalším aspektom bezpečnosti je nástroje, ktoré sa majú použiť v Aplikačnom programe optimalizovať zabezpečenie pomocou nástrojov ako napr Integrované vývojové prostredia budú najprínosnejšie, pretože poskytujú veľa Výstrahy používateľom a upozorniť ich na tieto pokusy, aby sa pokúsili zlepšiť kvalitu softvéru.
- Integrácia komerčných alebo open-source knižníc / zásuvných modulov, ako napríklad Eclipse, Spring Tool Suite, RAD s IDE, pomáha vývojárom pri písaní bezpečného kódu detekciou a identifikáciou potenciálne zraniteľného kódu a poskytuje výstrahy týkajúce sa nálezov týkajúcich sa škodlivého vykonávania súborov, úniku informácií a nesprávne spracovanie chýb.
Je tiež nevyhnutné používať Statické a dynamické analyzátory na zlepšenie bezpečnostných aspektov softvéru. Všeobecne sú statické analyzátory optimalizované pre konkrétne typy chýb, takže nakoniec nájdu veľké množstvo falošných poplachov pri identifikácii konkrétnych chýb. Niekedy existujú možnosti, že im chýbajú aj skutočné chyby.
Preto sa odporúča používať viac statických analyzátorov lepšie pokrytie rôznych typov chýb a zabránenie mnohým falošným pozitívam. Občas sa tiež odporúča vykonať ručné testovanie do vylúčiť falošné pozitíva .
Bezpečné pravidlá kódovania a odporúčania
Pre program bude dobré definovať súbor „Pravidlá a odporúčania týkajúce sa bezpečného kódovania“ podľa ktorého je možné vyhodnotiť súlad so zdrojovým kódom, aby testéri mohli vykonať „Testovanie zhody zhody“ pre každý z týchto štandardov bezpečného kódovania.
Preto môže byť bezpečnostný kód certifikovaný ako vyhovujúci alebo nevyhovujúci pomocou týchto pravidiel oproti stanovenej referenčnej hodnote.
Na kontrolu porušenia bezpečnosti možno použiť niektoré z nižšie uvedených pravidiel:
- Súbory musia byť zatvorené, keď už nie sú potrebné.
- Kedykoľvek prechádzate konštrukciou cez hranice, je potrebné zabrániť úniku informácií.
- Objekty by mali byť deklarované s príslušnou dobou skladovania.
Je preto potrebné navrhnúť a vykonať testovacie prípady na overenie týchto pravidiel, aby sa overila zhoda s predpismi. Taktiež sa zistilo, že väčšina zraniteľností je spôsobená typickými bežnými programovacími chybami.
Preto musí vývojár rozumieť „Neistá metóda kódovania“ , pričom sa tiež naučia osvedčené postupy zabezpečeného kódovania. Ideálne je zhromaždiť najbežnejšie chyby programovania, ktoré prispievajú k bezpečnostným zraniteľnostiam ich aplikácií, aby o ne bolo možné postarať sa pri kódovaní.
K týmto typickým programovým chybám prispievajú hlavne pretečenia medzipamäte, skriptovanie medzi servermi a chyby vstrekovania.
Medzi typické chyby programovania patria:
- Injekcia SQL (nesprávna neutralizácia špeciálnych prvkov použitých v príkaze SQL).
- Celé pretečenie.
- Pretekanie vyrovnávacej pamäte (kopírovanie vyrovnávacej pamäte bez kontroly veľkosti vstupu).
- Nekontrolovaný formátovací reťazec.
- Chýba autentifikácia a autorizácia (nesprávna autorizácia).
- Citlivé vystavenie údajov.
- Nesprávne spracovanie chýb.
Niektoré z týchto chýb môžu viesť k zlyhaniu systému, neočakávanému prístupu do systému a strate kontroly nad softvérom hackerom.
Bežné chyby v programovaní, ktorým je potrebné sa vyhnúť
Uvádzame niekoľko bežných chýb pri programovaní, ktorým je potrebné sa vyhnúť:
- Nesprávna neutralizácia špeciálnych prvkov použitých v príkaze SQL („SQL Injection“).
- Kopírovanie medzipamäte bez kontroly veľkosti vstupu („Klasické pretečenie medzipamäte“).
- Chýba autentifikácia pre kritickú funkciu.
- Chýba alebo je nesprávna autorizácia.
- Používanie pevne zakódovaných poverení.
- Chýba šifrovanie citlivých údajov.
- Neobmedzené nahrávanie súboru s nebezpečným typom.
- Spoliehanie sa na nedôveryhodné vstupy v rozhodnutí o bezpečnosti.
- Vykonanie so zbytočnými výsadami.
- Cross-Site Request Forgery (CSRF).
- Stiahnutie kódu bez kontroly integrity.
- Nesprávny výpočet veľkosti vyrovnávacej pamäte.
- Nesprávne obmedzenie pokusov o nadmerné overenie totožnosti.
- Presmerovanie URL na nedôveryhodné stránky („Open Redirect“).
- Reťazec nekontrolovaného formátu.
- Použitie jednosmernej hash bez soli.
Kontrolný zoznam postupov zabezpečených kódov
V neposlednom rade, po zvážení všetkých vyššie uvedených aspektov aspektov bezpečného vývoja softvéru, musia vývojári postupovať podľa Vytvorený kontrolný zoznam pre postupy zabezpečeného kódu aby sme neprišli o veci. Ďalej uvádzame niekoľko, nie však vyčerpávajúci zoznam.
Validácia vstupu:
implicitné čakanie a výslovné čakanie v seléne
- Nedôverujte vstupu, zvážte centralizované overenie vstupu.
- Nespoliehajte sa na validáciu na strane klienta.
- Pri otázkach kanonizácie buďte opatrní.
- Obmedzte, odmietnite a dezinfikujte vstup. Overte typ, dĺžku, formát a rozsah.
Overenie:
- Rozdeľte web na anonymnú, identifikovanú a autentifikovanú oblasť.
- Používajte silné heslá.
- Podporujte obdobia vypršania platnosti hesla a deaktiváciu účtu.
- Neukladajte poverenia (používajte jednosmerné hashe so soľou).
- Šifrujte komunikačné kanály na ochranu autentifikačných tokenov.
- Cookies na autentifikáciu formulárov odovzdávajte iba cez pripojenia HTTPS.
Autorizácia:
- Používajte najmenej privilegované účty.
- Zvážte podrobnosť autorizácie.
- Presadzovať oddelenie privilégií.
- Obmedzte prístup používateľov na zdroje na úrovni systému.
- Na autentifikáciu a autorizáciu použite protokol OAuth 2.0.
- Carryout API Validation.
- Povolené metódy na bielu listinu.
- Chráňte privilegované akcie a citlivé zbierky prostriedkov.
- Chráňte pred falšovaním zdrojov na iných stránkach (CSRF).
Správa relácie:
- Vytvorte identifikátor relácie na serveri.
- Ukončite reláciu odhlásením.
- Vytvoriť novú reláciu o opätovnom overení totožnosti.
- Nastavte atribút „zabezpečené“ pre súbory cookie prenášané prostredníctvom protokolu TLS.
Kryptografia:
- Kryptografiu používajte pri funkcii „Dáta na ceste, Dáta v úložisku, Dáta v pohybe, Integrita správy“.
- Nerozvíjajte svoje vlastné. Používajte osvedčené funkcie platformy.
- Nešifrované údaje uchovávajte blízko algoritmu.
- Použite správny algoritmus a veľkosť kľúča.
- Vyhnite sa správe kľúčov (použite DPAPI).
- Pravidelne používajte svoje klávesy.
- Kľúče ukladajte na obmedzenom mieste.
Prihlásenie a audit:
- Identifikujte škodlivé správanie.
- Vedzte, ako vyzerá dobrá premávka.
- Audit a aktivita denníka na všetkých úrovniach aplikácií.
- Zabezpečený prístup k súborom denníka.
- Zálohujte si a pravidelne analyzujte súbory denníka.
Výstupné kódovanie:
- Vykonanie „Validácia vstupu (XML, JSON….).
- Použite parametrizovaný dopyt.
- Vykonajte „validáciu schémy“.
- Vykonajte kódovanie (XML, JSON ..).
- Pošlite hlavičky zabezpečenia.
Referencia: „ Kontrolný zoznam postupov zabezpečeného kódovania OWASP (Stručne povedané, SCP Checklist) „
Tabuľkové zhrnutie kontrolného zoznamu bezpečného kódovania
V nasledujúcej tabuľke je zhrnuté: „Pamätajte na bezpečný kód“ žiadosti.
# | Čo? |
---|---|
7 | Zaistiť, aby bol celý tím nútený dodržiavať štandard zabezpečeného kódovania. |
1 | Aby ste jasne pochopili, „Čo je zabezpečený kód“? |
dva | Pochopiť spoločné „Zdroje zraniteľností“. |
3 | Uskutočniť „tím zameraný na zabezpečenie“. |
4 | Identifikovať a analyzovať „Riziká a cenné papiere“ zapojené do aplikácie a metódy „zmierňovania“. |
5 | „Vyškoliť tím“ v oblasti štandardov bezpečného kódovania, osvedčených postupov a pokynov. |
6 | Definovanie „štandardu bezpečného kódovania“ |
8 | Používať „jazyk ľahko implementovateľný“ a mať o ňom „podrobné znalosti“. |
9 | Používať nástroje IDE (Integrated Development Environment) |
10 | Používanie statických a dynamických analyzátorov a viacerých statických analyzátorov na elimináciu falošných pozitív |
jedenásť | Ak chcete vykonať ‘ručné testovanie’, kedykoľvek je to potrebné na identifikáciu chyby, vymeškajte. |
12 | Definovať súbor „Pravidiel a odporúčaní bezpečného kódovania“ |
13 | Vykonať „Testovanie zhody zhody“ pre stanovené pravidlá. |
14 | Porozumieť „nezabezpečenej metóde kódovania“ a zhromaždiť „bežné chyby programovania“. |
pätnásť | Dôsledne dodržiavať „Kontrolný zoznam SCP“ |
Záver
Dúfame, že tento návod bude vaším najlepším sprievodcom pri zabezpečovaní zabezpečenia softvéru.
Pokyny pre kódovanie pre bezpečný vývoj softvéru boli tu uvedené v jednoduchých pojmoch spolu s príkladmi na ľahké pochopenie koncepcie.
Príjemné čítanie !!
Odporúčané čítanie
- Testovanie bezpečnosti (kompletný sprievodca)
- Top 30 NAJLEPŠÍCH spoločností v oblasti kybernetickej bezpečnosti v roku 2021 (malé až veľké podniky)
- Základy počítačového programovania pre začiatočníkov Výukový program pre kódovanie
- Top 15 najlepších editorov bezplatných kódov pre dokonalý zážitok z kódovania
- Výukový program na testovanie injekcie SQL (príklad a zabránenie útoku SQL Injection)
- Vývojári nie sú dobrými testermi. Čo si povedal?
- Formát skúšky a pokyny pre riešenie príspevkov nadácie ISTQB
- Pokyny na testovanie zabezpečenia mobilných aplikácií