Bezpečné programování
Zabezpečené programování je technika vývoje softwaru , která zabraňuje náhodnému zavedení zranitelností a poskytuje odolnost vůči malwaru a neoprávněnému přístupu . Chyby a logické chyby jsou hlavní příčinou zranitelnosti softwaru.
Bezpečný software je software vyvíjený pomocí souboru opatření zaměřených na předcházení vzniku a eliminaci zranitelnosti programu [1] .
Úkolem bezpečného programování je chránit uživatelská data před krádeží a poškozením, udržovat kontrolu nad systémem. Nebezpečný program je potenciálním cílem pro útočníka, který může využít existující zranitelnosti k zobrazení, změně nebo odstranění existujících informací, ovlivnění provozu programů a služeb (spuštění nebo zastavení) a zavedení škodlivého kódu do systému [2] .
Terminologie
V anglické literatuře existují dva termíny, které lze přeložit jako bezpečné programování.
Defenzivní programování je princip vývoje softwaru , ve kterém se vývojáři snaží vzít v úvahu všechny možné chyby a selhání, co nejvíce je izolovat a pokud možno obnovit výkon programu v případě poruch. Díky tomu by měl být software stabilnější a méně zranitelný. Hardwarovou implementací tohoto principu je například watchdog timer , výpočet kontrolního součtu - pro detekci chyb v paketovém přenosu dat [3] .
Zabezpečené kódování je technika pro psaní programů , které jsou odolné vůči útokům malwaru a vetřelců. Zabezpečené programování pomáhá chránit uživatelská data před krádeží nebo poškozením. Kromě toho může nezabezpečený program poskytnout útočníkovi přístup k ovládání serveru nebo počítače uživatele; Důsledky se mohou pohybovat od odmítnutí služby jedinému uživateli až po ohrožení citlivých informací, ztrátu služby nebo poškození systémů tisíců uživatelů [2] .
Důležitost
Problematika zajištění bezpečnosti a provozuschopnosti systému je nedílnou součástí etapy jeho návrhu ( návrhu systému) [4] . Bezpečnostní požadavky na konkrétní IT produkty a systémy jsou stanoveny na základě existujících a předpokládaných bezpečnostních hrozeb, uplatňované bezpečnostní politiky a také s přihlédnutím k podmínkám jejich aplikace [5] . Implementace bezpečnostních řešení po vyvinutí systému je složitá a nákladná. Bezpečnostní požadavky by proto měly být brány v úvahu od samého počátku v průběhu celého životního cyklu systému [4] .
Informační systém je rozdělen na fyzickou a logickou úroveň. Pochopení toho, co přesně je třeba chránit před vnějšími faktory, pomáhá s nejúčinnějším výběrem a aplikací ochranných opatření. Jasná hranice mezi úrovněmi by měla být určena bezpečnostní politikou, která řídí určitý soubor informací a informačních technologií , který má fyzické hranice. Další komplikací je, že stejný počítač nebo server může hostit veřejné i soukromé informace. V důsledku toho lze na stejný počítač nebo v rámci stejného systému použít více zásad zabezpečení . Při vývoji informačního systému by proto měly být brány v úvahu bezpečnostní hranice a popsány v příslušné dokumentaci a zásadách bezpečnosti systému [4] . Jeho vývojáři musí být schopni zajistit bezpečnost systému při navrhování , vývoji , správě a konfiguraci , integraci, řádně otestujte [6] .
Analýza (manuální nebo automatická) a zabezpečení je nákladný postup, který zvyšuje celkové náklady na softwarový produkt . Dříve byla úplná eliminace rizik běžným cílem bezpečnosti. Dnes se uznává, že eliminace všech rizik není nákladově efektivní. Pro každý navrhovaný kontrolní systém by měla být provedena analýza nákladů a přínosů. V některých případech nemusí přínosy bezpečnějšího systému ospravedlnit přímé a nepřímé náklady. Mezi výhody patří nejen prevence peněžních ztrát; Za úvahu stojí například reputační ztráty. Přímé náklady zahrnují náklady na pořízení a instalaci této technologie; nepřímé náklady zahrnují snížený výkon systému a dodatečné školení zaměstnanců [7] .
Principy
V současné době existují různé technologie pro vývoj bezpečného softwaru . Existuje však soubor zásad, které jsou brány v úvahu při každém přístupu [8] :
- výkon a užitečnost ( použitelnost , anglická použitelnost );
- zabezpečení ( anglicky security ) - schopnost chránit se před vnějšími hrozbami, útoky a udržovat výkon po jejich odrazu a eliminaci;
- spolehlivost ( anglicky reliability ) - předvídatelné, správné a bezpečné chování v případě nesprávných počátečních údajů;
- důvěrnost ( anglicky privacy ) - zajištění bezpečné a správné práce s důvěrnými informacemi;
- Zajištění integrity a korektnosti podnikání ( anglicky business integrity ) - přehledná organizace údržby programu, kontrola transparentnosti, zákonnosti, korektnosti práce uživatele.
Poslední čtyři kvality se staly základem Trustworthy computingu (TwC) ( anglicky Trustworthy computing ) („Computations that are trustworthy“) - iniciativ společnosti Microsoft Corporation , jejichž hlavním úkolem je upozornit vývojáře na důležitost zajištění těchto požadavků v každé fázi vývoje softwaru [9] .
Existuje mnoho principů zabezpečení softwaru, z nichž většina je si navzájem podobná. Za jejich zobecnění lze považovat výše uvedené principy [10] .
Klasifikace a typy zranitelností
Klasifikátory
Použití standardizovaných popisů zranitelnosti zjednodušuje práci specialistů na informační bezpečnost. V současné době existuje několik populárních klasifikátorů [11] :
- CVE (Common Vulnerabilities and Exposures) - slovník konkrétních zranitelností konkrétních produktů;
- CWE(Common Weakness Enumeration) – databáze typů zranitelnosti. Hlavním cílem projektu je poskytnout popisy běžných typů zranitelností, způsoby, jak jim předcházet, odhalovat a opravovat;
- Nabídka zaměření na zabezpečení;
- OSVDB(Open Sourced Vulnerability Database) – „otevřená databáze zranitelností“ vytvořená třemi neziskovými organizacemi. Přestal pracovat 5. dubna 2016. Blog nadále funguje [12] ;
- Secunia - páska zranitelností známé dánské společnosti Secunia v oblasti počítačové a síťové bezpečnosti;
- IBM ISS X Force.
Moderní analyzátory kódu a automatizovaní auditoři mohou využívat podobné základny zranitelnosti. To zvyšuje úroveň důvěry v produkt a může být také důležité při podávání zpráv o zranitelnostech přítomných v softwarovém produktu [13] .
Existují také další klasifikátory. Při práci s nimi je třeba věnovat pozornost autorům, neboť každý klasifikační systém musí být vytvořen odborníky v této oblasti [14] .
Metriky
Každý program je potenciálním cílem pro útočníky. Po nalezení zranitelných míst v aplikacích nebo službách se je pokusí využít k odcizení důvěrných informací, poškození dat, ovládání počítačových systémů a sítí [15] . K popisu vlastností zranitelnosti používají odborníci systém hodnocení rizik zranitelnosti CVSS . Je to stupnice, na jejímž základě se udělují skóre. Systém metrik je navržen tak, aby upřednostňoval opravy zranitelností. Každá stupnice odkazuje na určitou sémantickou sekci, která se nazývá metrika. Existují tři takové metriky [16] [17] [11] :
- Base ( anglicky base ) - charakteristiky zranitelnosti, které nezávisí na čase a prostředí provádění. Slouží k popisu obtížnosti zneužití zranitelnosti, potenciálního poškození důvěrnosti, integrity a dostupnosti informací;
- Temporal ( anglicky temporal ) – metrika, která bere v úvahu faktor času, například čas na opravu zranitelnosti;
- Kontextový ( anglicky environmentální ) – metrika, která zohledňuje informace o prostředí softwaru.
Poslední dvě metriky jsou pomocného charakteru a slouží pouze k úpravě ukazatelů základní metriky s přihlédnutím k různým specifikům [18] .
Typy zranitelností
Seznam běžných chyb, které ohrožují bezpečnost moderních programů [19] :
Není možné vyjmenovat všechny známé zranitelnosti , protože se každý den objevují nové. Tento seznam obsahuje běžné chyby zabezpečení, které lze snadno spáchat, ale jejichž následky mohou být katastrofální. Například rozšíření červa Blaster bylo způsobeno chybou v pouhých dvou řádcích kódu [22] .
Obrana
Správná strategie ochrany proti chybám a zranitelnostem je předcházet jim a předcházet jim. To vyžaduje, aby vývojář neustále kontroloval vstupní data. Nejlepším způsobem ochrany před útoky přetečením vyrovnávací paměti je například zajistit, aby vstupní data nepřesáhla velikost vyrovnávací paměti, ve které jsou uložena. Data určená k odeslání do databáze vyžadují ověření pro ochranu před útokem, jako je SQL injection. Pokud jsou data odesílána na webovou stránku, měla by být ověřena proti XSS . Nadměrný počet kontrol však komplikuje vývoj zdrojového kódu programu a může vést ke vzniku nových chyb, proto je vhodné tuto strategii kombinovat s dalšími [23] .
Mechanismy ochrany proti chybám mohou poskytovat kompilátor nebo operační systém . Kompilátor GCC umožňuje pomocí funkce _builtin_object_size () získat velikost objektu ukazatelem na tento objekt, takže její použití činí proceduru kopírování bezpečnější. MSVC při použití příznaku /RTCs umožňuje během kompilace kontrolu přetečení lokálních proměnných, použití neinicializovaných proměnných, poškození ukazatele zásobníku způsobeného neodpovídajícími konvencemi volání. Použití technologie CRED (C range error detector) a speciálních vložek před chráněnou část zásobníku ( StackGuard , SSP ) částečně umožňuje detekovat a předcházet útokům spojeným s přetečením pole a destrukcí zásobníku [24] .
Operační systém může také řídit provádění programu. Tato strategie může být užitečná, pokud je neznámý zdrojový kód tohoto programu. ASLR (Address Space Schema Randomization) je bezpečnostní funkce operačního systému navržená tak, aby zabránila spuštění libovolného kódu. ASLR je v současné době podporován na Linuxu i Windows . Zvýšení úrovně zabezpečení je dosaženo použitím nespustitelných technologií zásobníku: W^X, PaX [24] .
Typickými útoky na webové služby jsou SQL injection, XSS, CSRF , clickjacking . Moderní frameworky pomáhají vývojářům vytvářet zabezpečené webové aplikace. Použití hotových řešení vám umožní neřešit četné kontroly příchozích dat: od hlaviček HTTP požadavků až po jejich obsah. Poskytuje také bezpečnější metodu práce s databází - ORM [25] [26] .
Poškození
Informace o zranitelnostech mohou útočníci využít k zápisu virů . Například jeden z prvních známých síťových červů ( virus Morris ) v roce 1988 využíval zranitelnosti, jako je přetečení vyrovnávací paměti v unixovém finger démonu , k šíření mezi počítači. Tehdy byl počet infikovaných aut asi 6 tisíc [27] a ekonomické škody se podle US Accounts Chamber pohybovaly mezi 10 až 100 miliony dolarů [28] .
V roce 2016 způsobily počítačové viry globální ekonomice škody ve výši 450 miliard dolarů [29] [30] .
V roce 2017 byly škody způsobené virem WannaCry odhadnuty na 1 miliardu dolarů. Infekce byly hlášeny v nejméně 150 zemích [31] [32] [33] . Virus využíval EternalBlue využívající zranitelnost přetečení vyrovnávací paměti v protokolu SMB [ 34] [35] [36] [37] .
Poznámky
- ↑ GOST R 56939-2016, 2016 , Termíny a definice, str. 2.
- ↑ 1 2 Úvod do Příručky bezpečného kódování .
- ↑ Defenzivní programování .
- ↑ 1 2 3 Inženýrské principy pro bezpečnost informačních technologií, 2004 , Základy bezpečnosti. Princip 2, str. 7.
- ↑ Kritéria hodnocení bezpečnosti informačních technologií, 2002 , Obecná ustanovení, str. III-IV.
- ↑ Engineering Principles for Information Technology Security, 2004 , Security Foundations, pp. 6-8.
- ↑ Inženýrské principy pro bezpečnost informačních technologií, 2004 , Základy bezpečnosti. Zásada 5, str. osm.
- ↑ Moderní technologie pro vývoj spolehlivých a bezpečných programů, 2008 , s. 25-26.
- ↑ Moderní technologie pro vývoj spolehlivých a bezpečných programů, 2008 , s. 26.
- ↑ Secure Programming HOWTO - Creating Secure Software, 2015 , Security Principles, pp. 7-8.
- ↑ 1 2 Časopis Hacker: Měříme zranitelnosti, 2009 , str. 48-51.
- ↑ OSVDB: FIN, 2016 .
- ↑ Hacker Magazine: Measuring Vulnerabilities, 2009 , Using Classifiers in Scanners, pp. 51: „Moderní automatizovaní auditoři jsou obvykle přizpůsobeni konkrétní znalostní bázi. Za prvé je to prestižní a za druhé užitečné. Například při přípravě na certifikaci podle některého z moderních standardů (NERC-CIP, PCI , FISMA, GLBA nebo HIPAA) má administrátor možnost obdržet vzor zprávy, který odpovídá dokumentu vydanému auditorem.
- ↑ Hacker Magazine: Measuring Vulnerabilities, 2009 , Selected Classifications, pp. 51: „Někdy můžete na webu vidět klasifikace naprosto vlastními silami... Takový systém samozřejmě nemá velkou váhu, protože by jej měli sestavit skuteční odborníci, kteří chápou podstatu problému.“
- ↑ Úvod do Průvodce bezpečným kódováním , Stručný přehled.
- ↑ Common Vulnerability Scoring System, 2006 , s.86.
- ↑ CVSS: Specifikace .
- ↑ CVSS:Specifikace , 1.2. Bodování: "Základní metriku lze upřesnit výpočtem časových a kontextových metrik, aby lépe odrážely riziko pro uživatele způsobené zranitelností."
- ↑ 24 smrtelných hříchů softwarové bezpečnosti: chyby v programování a jak je opravit, 2009 , Úvod.
- ↑ Metoda vyhledávání zranitelnosti formátovacího řetězce, 2015 , Úvod: „Dokonce i v dílech z 90. let se ukázalo, že nesprávná práce s formátovacím řetězcem může vést k závažným zranitelnostem zabezpečení softwaru, jako je svévolné spuštění kódu, eskalace oprávnění a úniky citlivé údaje."
- ↑ The Protection of Information in Computer Systems, 1975 , h) Psychologická přijatelnost: „Je velmi důležité, aby uživatelské rozhraní bylo uživatelsky přívětivé, aby uživatelé intuitivně a jednoduše používali ochranné mechanismy správným způsobem. Pokud jsou mentální reprezentace cílů ochrany v souladu s mechanismy, které používá v praxi, počet chyb bude minimalizován. Pokud má uživatel překládat své představy o ochraně do zcela jiného jazyka specifikací, nevyhnutelně se dopustí chyb.
- ↑ Bezpečné kódování v C a C++, 2013 , Obrázek 1.2. Chybná logika využívaná červem W32.Blaster.Worm: "Logické chyby využívané červem W32.Blaster.Worm jsou znázorněny na obr. 1.2. Chyba je v tom, že smyčka while na řádcích 21 a 22 (používaná k extrahování názvu hostitele z dlouhého řetězce) není dostatečně oddělena."
- ↑ Bezpečné kódování v C a C++, 2013 , 2.6 Strategie ochrany za běhu: Ověření vstupu.
- ↑ 1 2 Zabezpečené kódování v C a C++, 2013 , 2.6 Strategie ochrany za běhu.
- ↑ Zabezpečení Django .
- ↑ Zabezpečení Ruby on Rails .
- ↑ Poznámky výzkumníka počítačových virů, 2005 , tabulka 3.1, str. 90.
- ↑ Historie malwaru, 2010 , The NSA versus Morris: $ 100 Million in Damage, str. 23.
- ↑ CNBC International: Kyberzločin stojí globální ekonomiku 450 miliard dolarů .
- ↑ The New Paper: Kyberkriminalita stála loni světovou ekonomiku 620 miliard dolarů .
- ↑ RBC: Škody způsobené virem WannaCry byly odhadnuty na 1 miliardu dolarů .
- ↑ 6abs: Škody způsobené virem WannaCry přesáhly 1 miliardu dolarů .
- ↑ Hi-Tech Mail.ru: Odborníci jmenovali rekordní množství škod způsobených virem WannaCry .
- ↑ MS17-010: Přetečení velkého nestránkovaného fondu EternalBlue v ovladači SRV .
- ↑ Ransomware WannaCry používaný v rozsáhlých útocích po celém světě .
- ↑ CNews: Ekonomické škody způsobené viry .
- ↑ Čisté ztráty: Odhad globálních nákladů na počítačovou kriminalitu .
Literatura
- Kaspersky K. Poznámky výzkumníka počítačových virů . - Petr, 2005. - S. 93, 103-104, 117-122. — 316 s. — ISBN 5469003310 .
- GOST R 56939-2016: Bezpečnost informací. Vývoj bezpečného softwaru. Všeobecné požadavky / Federální agentura pro technickou regulaci a metrologii. - Standartinform, 2016. - 24 s.
- GOST R ISO/IEC 25010-2015: Informační technologie. Systémové a softwarové inženýrství. Požadavky a hodnocení kvality systémů a softwaru (SQuaRE). Modely kvality systémů a softwarových produktů / Federální agentura pro technickou regulaci a metrologii. - Standartinform, 2015. - 36 s.
- Státní technická komise Ruska . Dokument s pokyny. Bezpečnost informačních technologií. Kritéria pro hodnocení bezpečnosti informačních technologií . - 2002. - P. III-IV. — 48p.
- Informační bezpečnost podnikání. Studium současných trendů v bezpečnosti podnikových informací. : Výzkum / Kaspersky Lab. - 2014. - 14. str.
- Komarov A. Měříme zranitelnosti // Hacker : Journal. - 2009. - č. 04 (124) . - S. 48-51.
- Safonov V. O. Moderní technologie pro vývoj spolehlivých a bezpečných programů // Počítačové nástroje ve vzdělávání : Journal. - 2008. - č. 06 . - S. 25-33.
- Vakhrushev I.A., Kaushan V.V., Padaryan V.A., Fedotov A.N. Metoda vyhledávání zranitelnosti formátovacího řetězce // Proceedings of ISP RAS. - 2015. - T. 27 , č. 4 . - S. 23-38 . - S. 25-33.
- Howard M., LeBlanc D., Viega J. 24 smrtelných hříchů softwarové bezpečnosti : Chyby v programování a jak je opravit . - McGraw Hill Professional, 2009. - 464 s. — ISBN 9780071626767 .
- Seacord RC Secure Coding v C a C++ . - 2. - Addison-Wesley, 2013. - 600 s. — ISBN 9780132981972 .
- Stoneburner G., Hayden C., Feringa A. Inženýrské principy pro bezpečnost informačních technologií (základní linie pro dosažení bezpečnosti) (anglicky) / National Institute of Standards and Technology . - Revize A. - 2004. - 33 s.
- Wheeler D.A. Zabezpečené programování HOWTO - Vytváření zabezpečeného softwaru . - 2015. - 186 s.
- Historie malwaru (anglicky) / BitDefender . - 2010. - S. 23-24. — 71p.
- Howard M., LeBlanc D. Psaní bezpečného kódu . - 2. - Microsoft Press, 2002. - S. 43. - 512 s. — ISBN 9780735615885 .
Další čtení
Odkazy
- Bondarenko, Maria . Škody způsobené virem WannaCry byly odhadnuty na 1 miliardu $ , Moskva: RBC (25. května 2017). Staženo 23. října 2017.
- Matyukhin, Grigory . Odborníci pojmenovali rekordní množství škod způsobených virem WannaCry , Moskva: Hi-Tech Mail.ru (25. května 2017). Staženo 23. října 2017.
- Borovko, Roman . Ekonomické škody způsobené viry , Moskva: CNews Analytics (2003). Staženo 23. října 2017.
- Úvod do Příručky bezpečného kódování . https://developer.apple.com/ . Společnost Apple Inc. . Staženo: 23. října 2017.
- Django Software Foundation . Bezpečnost v Django . https://www.djangoproject.com/ _ Staženo: 5. prosince 2017.
- Průvodce zabezpečením Ruby on Rails . http://rubyonrails.org/ . Staženo: 5. prosince 2017.
- Graham, Luke . Kyberzločin stojí globální ekonomiku 450 miliard dolarů: CEO , USA: CNBC International (7. února 2017). Staženo 23. října 2017.
- Slunce, Davide . Kyberkriminalita stála světovou ekonomiku v loňském roce 620 miliard dolarů , Singapur: The New Paper (5. července 2017). Staženo 23. října 2017.
- Škody způsobené virem WannaCry přesáhly 1 miliardu $ (anglicky) , USA: 6abc (25. května 2017). Archivováno z originálu 15. října 2017. Staženo 23. října 2017.
- William Gamazo Sanchez (výzkum zranitelnosti). MS17-010 : Přetečení velkého nestránkovaného fondu EternalBlue v ovladači SRV . http://blog.trendmicro.com/ . Trend Micro (2. června 2017). Staženo: 23. října 2017.
- Ransomware WannaCry používaný v rozsáhlých útocích po celém světě . https://securelist.com/ . ZAO Kaspersky Lab (12. května 2017). Staženo: 23. října 2017.
- M. Tim Jones. Defenzivní programování (anglicky) (nedostupný odkaz) (1. února 2005). Získáno 12. listopadu 2017. Archivováno z originálu 13. listopadu 2017.
- OSVDB: FIN (anglicky) (downlink) . https://blog.osvdb.org/ (5. dubna 2016). Získáno 3. prosince 2017. Archivováno z originálu 28. května 2016.
- Common Vulnerability Scoring System v3.0 : Dokument specifikace . https://www.first.org/ . PRVNÍ. Staženo: 12. listopadu 2017.