secure coding guidelines
Tento výukový program vysvětluje zabezpečené kódování, jak se vyhnout chybám zabezpečení souvisejícím se zabezpečením, a poskytuje pokyny a kontrolní seznamy pro kódovací postupy pro bezpečné kódování:
Aby bylo možné v softwaru zabudovat zabezpečení a implementovat pokyny a osvědčené postupy pro bezpečné kódování, musí celá organizace spolu s týmem určeným pro práci na zamýšleném vývoji aplikací zvážit určité aspekty.
Zde budeme diskutovat o těch aspektech, které pomáhají vyvíjet zabezpečený software.
Je to tak jednoduché, pokud vývojář neví, co se rozumí „Zabezpečení softwaru“ a jak může hacker hacknout svůj software, převzít nad ním kontrolu a pokusit se zneužít, pak je jednoduše nemožné kódovat zabezpečený software. Vývojář tedy musí nejprve pochopit význam zabezpečeného kódování.
Co se naučíte:
- Co je bezpečné kódování?
- Pokyny pro bezpečné kódování
- Kontrolní seznam pro postupy zabezpečeného kódu
- Závěr
Co je bezpečné kódování?
Bezpečné kódování je navrhovat a vyvíjet software pomocí vyhýbat se slabostem které vedou k zranitelnostem souvisejícím se zabezpečením dodržováním specifikovaných bezpečnostních standardů a osvědčených postupů v oboru.
Úplně první otázka, která vyvstává v mysli každého, je „Kolik zabezpečení je požadováno pro náš software“ nebo Kdy můžeme říci, že náš software je zabezpečený? a Jaké jsou tyto bezpečnostní standardy ?
Podvody a bezpečnostní hrozby každým dnem přibývají a vidíme nové varianty a způsoby hackování, a to i v takzvaném nejzajištěnějším softwaru.
Nedávno jsme slyšeli, jak program Aaadhar společnosti UIDAI manipuluje s osobními údaji. Proto je opravdu těžké vědět, kolik zabezpečení je požadováno pro software a jaké jsou bezpečnostní standardy, pokud nerozumíme hrozbám, které software zahrnuje, a upřednostňujeme je na základě rizik pro podnikání.
Může být obtížné poskytnout softwaru 100% ochranu zabezpečení, ale pokud programový tým provede analýzu Rizika a cenné papíry kteří jsou zapojeni do jejich softwaru, tj. potenciálních hrozeb, a pokud se tým dokáže postarat o zmírnění těchto rizik, pak by to bylo dobré z bezpečnostního hlediska aplikace.
Úplně prvním úkolem týmu je tedy identifikovat a analyzovat rizika a cenné papíry, které jsou součástí jejich aplikace, porozumět možným možnostem zmírnění a podle toho přijmout nejlepší možnost.
Jakmile je tedy identifikováno deset nejlepších zranitelností, klasifikují téměř všechny útoky, kterým program pravděpodobně čelí. To pomůže pochopit hrozby a upřednostnit úsilí v oblasti bezpečnosti a rozvoje více před prevencí než zmírňováním.
jaký je nejlepší bezplatný stahovač hudby pro Android
Např. I když plánujeme vyvinout aplikaci související se zdravotní péčí, která zpracovává a ukládá údaje o zdraví jednotlivce a jeho osobní údaje, největším bezpečnostním rizikem aplikace je krádež osobních údajů o zdraví.
Snižování rizik
Ke zmírnění rizika
- Implementaci zabezpečení pro přístup k datům neoprávněným uživatelem je třeba řešit řádným ověřováním a autorizací (silné implementace zásad hesla, dvoufaktorové ověřování).
- Je třeba dbát na to, aby nedocházelo k úniku dat během přenosu dat z jednoho zdroje do druhého, a to implementací zabezpečených kanálů (HTTPS) přenosu dat a implementací šifrování dat během přenosu.
- Další možností je také manipulace nebo krádež dat v klidu. Ukládání osobních údajů o zdraví (pomocí šifrování) je tedy velmi důležité.
Před přechodem na „Secure Coding Standard“ je vždy lepší, aby celý programový tým měl a „Session Awareness Session“ a diskutovat a diskutovat o
- Požadavek zabezpečení pro jejich konkrétní produkt.
- Možné výhody, které by hacker získal hacknutím svého systému.
- Možné způsoby a prostředky bezpečnostních kompromisů jejich aplikace.
- V podobném odvětví a doméně následovaly běžné bezpečnostní postupy.
- Porozumění typickým bezpečnostním problémům jejich příslušných programů.
Pomáhá také týmu lépe zacházet, pokud rozumí Zdroje chyb zabezpečení že jejich software může čelit a důvody, kvůli kterým je software vytvořen Špatný / nedostatečný Bezpečnostní .
Důvody nedostatečné implementace zabezpečení
Obecně je uvedeno několik důvodů pro nedostatečnou implementaci zabezpečení v aplikaci.
- Priorita je dána funkčním uvolněním před aspekty zabezpečení.
- Neznalost nebo žádné povědomí o zabezpečení softwaru a hackerech.
- Nedostatečná jasnost v programu nebo v samotném softwarovém designu.
- Složitost programu.
- Nedostatek dat, informace o živém systému, kde bude nasazen.
- Bez ohledu na bezpečnost ve fázích SDLC.
- Nedostatečné znalosti a porozumění specifik jazyka používaného v softwaru.
- Týmu a vývojářům chybí dostatečné znalosti o pokynech pro bezpečnostní kódování.
Víme, že to není tak, že by si všichni vývojáři a testeři byli vědomi bezpečnosti aplikace a nemuseli důkladně rozumět bezpečnostním zranitelnostem a zneužití, zejména aplikacím, na kterých by pracovali. Obecně budou obeznámeni s „Jak funkčně kódovat“ ale ne všichni vědí „Jak bezpečně kódovat“.
Proto je velmi důležitým aspektem, aby organizace přijala ve svém softwaru zabezpečené kódovací postupy, je první „Vlak lidí“ . Školení jejich týmu o aspektech zabezpečeného kódování, osvědčených postupech kódování zabezpečení a správném používání nástrojů je tedy velmi důležité.
Nejdůležitější konstrukční princip softwarového zabezpečení je „Implementovat zabezpečení záměrně a ve výchozím nastavení“ .
Pokyny pro bezpečné kódování
Pro dosažení bezpečnosti je velmi důležité mít a „Bezpečný standard kódování“ identifikován pro program na samém začátku vývoje aplikace, a to pomáhá týmu při péči o zabezpečené výchozí hodnoty softwaru a pomáhá jej chránit před útoky.
Je nezbytné zajistit, aby byl celý tým Vynuceno dodržovat tento standard , bez ohledu na kódovací jazyk a nástroje, které v programu používají.
Níže uvádíme několik příkladů, které je třeba implicitně implementovat v návrhu zabezpečeného kódu:
- Přístup by měl být omezen pouze na ověřené uživatele a ověřování je třeba implementovat v každé vrstvě.
- Komunikační kanály je třeba za účelem ochrany autentizačních tokenů zašifrovat.
- Všechny klíče, hesla a certifikáty musí být správně uloženy a chráněny.
- Je třeba implementovat šifrování souborů, šifrování databáze a šifrování datových prvků.
Výběr jazyka pro bezpečné kódování
Výběr jazyka pro kódování nemusí záviset na zabezpečeném kódování. Neexistuje nic konkrétního jako zabezpečený nebo nezajištěný jazyk pro kódování k vytvoření zabezpečeného softwaru.
Jde jen o to, jak k programování používáme programovací jazyk a kolik hlubokých znalostí má vývojář o kódovacím jazyce při implementaci bezpečnostních aspektů.
Je však objasněno, že Standardy zabezpečeného kódování jsou nezávislé na výběru jazyka, doporučené postupy zabezpečeného kódu jsou závislé na jazyce, závisejí na platformě a implementaci .
Aby tedy měl Zabezpečený kód, je pro vývojáře zásadní hluboké znalosti jazyka, který se v programu používá, aby bylo možné snadno implementovat osvědčené postupy zabezpečení.
Příklad:
- Pravděpodobnost chyby zabezpečení týkající se přetečení vyrovnávací paměti se liší jazyk od jazyka, ale C, C ++ a Assembly jsou považovány za nejcitlivější kvůli jejich zastaralým možnostem správy paměti. Několik standardních funkcí C lib, například strcpy () a memcpy (), je zranitelných vůči útokům přetečení vyrovnávací paměti. Nesprávné použití těchto funkcí kopírováním zdrojové vyrovnávací paměti, která je příliš velká, aby se vešla do cílové vyrovnávací paměti, vede k přetečení vyrovnávací paměti.
- Běžným problémem webových aplikací založených na prostředí Java jsou možné úniky prostředků, ke kterým může dojít v důsledku otevřených systémových prostředků, jako jsou připojení souborů, soketů a databází.
Dalším aspektem bezpečnosti je nástroje, které se mají použít v aplikačním programu optimalizovat zabezpečení pomocí nástrojů, jako je Integrovaná vývojová prostředí bude nejpřínosnější, protože poskytují mnoho Upozornění uživatelům a upozornit na tyto výstrahy, aby se pokusili zlepšit kvalitu softwaru.
- Integrace komerčních knihoven / pluginů s otevřeným zdrojovým kódem, jako je Eclipse, Spring Tool Suite, RAD s IDE, pomáhá vývojářům psát zabezpečený kód detekcí a identifikací potenciálně zranitelného kódu a poskytuje upozornění na nálezy související se spuštěním škodlivého souboru, únikem informací a nesprávné zpracování chyb.
Je také nezbytné používat Statické a dynamické analyzátory ke zlepšení bezpečnostních aspektů softwaru. Obecně jsou statické analyzátory optimalizovány pro konkrétní typy chyb, takže nakonec najdou velké množství falešných poplachů při identifikaci konkrétních chyb. Někdy existují možnosti, že jim také chybějí skutečné chyby.
Proto se doporučuje použít více statických analyzátorů získat lepší pokrytí různých typů chyb a vyhnout se mnoha falešným poplachům. Občas se také doporučuje provést ruční testování na eliminovat falešné poplachy .
Zabezpečte pravidla kódování a doporučení
Pro program bude dobré definovat soubor „Pravidla a doporučení pro bezpečné kódování“ ke kterému lze vyhodnotit shodu zdrojového kódu, aby testeři mohli provádět „Testování shody shody“ pro každý z těchto standardů bezpečného kódování.
Z tohoto důvodu může být bezpečnostní kód certifikován jako vyhovující nebo nevyhovující s použitím těchto pravidel v porovnání s nastaveným měřítkem.
Pro kontrolu porušení zabezpečení lze použít několik níže uvedených pravidel:
- Soubory je třeba zavřít, když už nejsou potřeba.
- Kdykoli procházíte strukturou přes hranici, je třeba se vyhnout úniku informací.
- Objekty by měly být deklarovány s příslušnou dobou skladování.
Je tedy třeba navrhnout a provést testovací případy k ověření těchto pravidel, aby se zkontrolovalo dodržování shody. Rovněž bylo zjištěno, že většina chyb zabezpečení je způsobena typickými běžnými programovacími chybami.
jak vrátit pole v Javě
Proto vývojář musí rozumět „Nejistá metoda kódování“ , zatímco se také naučí osvědčené postupy zabezpečeného kódování. Ideální je shromáždit nejběžnější programovací chyby, které přispívají k bezpečnostním zranitelnostem jejich aplikace, aby se o ně během kódování mohlo postarat.
K takovým typickým programovacím chybám přispívají hlavně přetečení vyrovnávací paměti, skriptování mezi weby a chyby vstřikování.
Mezi typické chyby programování patří
- Injekce SQL (nesprávná neutralizace speciálních prvků použitých v příkazu SQL).
- Přetečení celého čísla.
- Přetečení vyrovnávací paměti (kopírování vyrovnávací paměti bez kontroly velikosti vstupu).
- Nekontrolovaný formátovací řetězec.
- Chybějící autentizace a autorizace (nesprávná autorizace).
- Citlivá expozice dat.
- Nesprávné zpracování chyb.
Některé z těchto chyb mohou vést ke zhroucení systému, neočekávanému přístupu do systému a ke ztrátě kontroly nad hackery.
Běžné chyby v programování, kterým je třeba se vyhnout
Níže je uvedeno několik běžných programovacích chyb, kterým je třeba se vyhnout:
- Nesprávná neutralizace speciálních prvků použitých v příkazu SQL („SQL Injection“).
- Kopírování vyrovnávací paměti bez kontroly velikosti vstupu („Classic Buffer Overflow“).
- Chybějící ověření pro kritickou funkci.
- Chybějící nebo nesprávná autorizace.
- Použití pevně zadaných pověření.
- Chybějící šifrování citlivých dat.
- Neomezené nahrávání souboru nebezpečného typu.
- Spoléhání se na nedůvěryhodné vstupy v rozhodnutí o zabezpečení.
- Provádění s zbytečnými oprávněními.
- Cross-Site Request Forgery (CSRF).
- Stažení kódu bez kontroly integrity.
- Nesprávný výpočet velikosti vyrovnávací paměti.
- Nesprávné omezení pokusů o nadměrné ověření.
- Přesměrování URL na nedůvěryhodný web („Open Redirect“).
- Řetězec nekontrolovaného formátu.
- Použití jednosměrného hash bez soli.
Kontrolní seznam pro postupy zabezpečeného kódu
V neposlední řadě, po zvážení všech výše uvedených aspektů aspektů bezpečného vývoje softwaru, musí vývojáři postupovat podle Byl vytvořen kontrolní seznam pro postupy zabezpečeného kódu zajistit, aby vám věci neunikly. Níže uvádíme několik, ale ne vyčerpávající seznam.
Ověření vstupu:
- Nevěřte vstupu, zvažte centralizované ověření vstupu.
- Nespoléhejte na ověření na straně klienta.
- Při problémech s kanonizací buďte opatrní.
- Omezte, odmítněte a dezinfikujte vstup. Ověřte typ, délku, formát a rozsah.
Ověření:
- Rozdělte web podle anonymní, identifikované a ověřené oblasti.
- Používejte silná hesla.
- Podpora období vypršení platnosti hesla a deaktivace účtu.
- Neukládejte pověření (použijte jednosměrné hashe se solí).
- Šifrujte komunikační kanály k ochraně autentizačních tokenů.
- Předávejte cookies ověřování formulářů pouze přes připojení HTTPS.
Oprávnění:
- Používejte nejméně privilegované účty.
- Zvažte podrobnost autorizace.
- Vynutit oddělení oprávnění.
- Omezte přístup uživatelů na prostředky na úrovni systému.
- Pro ověřování a autorizaci použijte protokol OAuth 2.0.
- Carryout API Validation.
- Povolené metody seznamu povolených.
- Chraňte privilegované akce a citlivé sbírky prostředků.
- Chraňte proti padělání prostředků napříč weby (CSRF).
Správa relací:
- Vytvořte na serveru identifikátor relace.
- Ukončete relaci odhlášením.
- Vytvořit novou relaci při opětovném ověření.
- U souborů přenášených prostřednictvím protokolu TLS nastavte atribut ‘zabezpečené’.
Kryptografie:
- Používejte kryptografii v části „Data v přenosu, Data v úložišti, Data v pohybu, Integrita zpráv“.
- Nevyvíjejte své vlastní. Používejte osvědčené funkce platformy.
- Nešifrovaná data udržujte blízko algoritmu.
- Použijte správný algoritmus a velikost klíče.
- Vyhněte se správě klíčů (použijte DPAPI).
- Pravidelně používejte klávesy.
- Ukládejte klíče na omezeném místě.
Protokolování a auditování:
- Identifikujte škodlivé chování.
- Zjistěte, jak vypadá dobrý provoz.
- Auditujte a zaznamenávejte aktivitu prostřednictvím všech úrovní aplikací.
- Zabezpečený přístup k souborům protokolu.
- Zálohujte a pravidelně analyzujte soubory protokolu.
Kódování výstupu:
- Provedení „Ověření vstupu (XML, JSON….).
- Použijte parametrizovaný dotaz.
- Proveďte „Ověření schématu“.
- Proveďte kódování (XML, JSON ..).
- Odesílejte záhlaví zabezpečení.
Odkaz: '' Kontrolní seznam postupů zabezpečeného kódování OWASP (Stručně řečeno, kontrolní seznam SCP) ''
Tabulkové shrnutí kontrolního seznamu zabezpečeného kódování
Níže uvedená tabulka shrnuje „Co je třeba si zapamatovat pro zabezpečený kód“ aplikace.
# | Co? |
---|---|
7 | Zajistit, aby byl celý tým vynucen dodržovat standard zabezpečeného kódování. |
jeden | Abychom jasně pochopili, „Co je zabezpečený kód“? |
dva | Pochopit běžné „zdroje zranitelnosti“. |
3 | Vedení týmu „Session Awareness Session“. |
4 | Identifikovat a analyzovat „Rizika a cenné papíry“ zapojené do aplikace a metody „zmírňování“. |
5 | „Školit tým“ v oblasti standardů zabezpečeného kódování, osvědčených postupů a pokynů. |
6 | Definování „standardu bezpečného kódování“ |
8 | Používat jazyk „Snadná implementace“ a mít o něm „hluboké znalosti“. |
9 | Chcete-li používat nástroje IDE (Integrated Development Environment) |
10 | Chcete-li použít „statické a dynamické analyzátory“ a „více statických analyzátorů“ k eliminaci „falešných pozitiv“ |
jedenáct | Chcete-li provést „ruční testování“, kdykoli je to nutné k identifikaci chyby, vynechejte. |
12 | Definovat sadu „pravidel a doporučení bezpečného kódování“ |
13 | Provádět „Testování shody shody“ pro stanovená pravidla. |
14 | Pochopit „nezabezpečenou metodu kódování“ a shromáždit „běžné chyby programování“. |
patnáct | Důsledně dodržovat „Kontrolní seznam SCP“ |
Závěr
Doufáme, že tento výukový program bude vaším nejlepším průvodcem pro zajištění zabezpečení softwaru.
Pokyny pro kódování pro bezpečný vývoj softwaru zde byly uvedeny v jednoduchých termínech s příklady pro snadné pochopení konceptu.
Šťastné čtení!!
Doporučené čtení
- Testování zabezpečení (kompletní průvodce)
- Top 30 NEJLEPŠÍCH společností v oblasti kybernetické bezpečnosti v roce 2021 (malé až velké podniky)
- Základy počítačového programování pro začátečníky Výukový program pro kódování
- Top 15 nejlepších editorů bezplatných kódů pro dokonalý zážitek z kódování
- Výukový program pro testování injekce SQL (příklad a prevence útoku SQL Injection)
- Vývojáři nejsou dobří testeři. Co říkáš?
- ISTQB Foundation Format Format & Guidelines to Solve Papers
- Pokyny pro testování zabezpečení mobilních aplikací