DORA (Digital Operation Ressiliance Act) je nařízení EU, které nedá spát mnoha finančním institucím a pojišťovnám. Odolnostčinnosti mnoha organizací je dnes v převážné míře závislá na funkčnosti informačních systémů, jejichž bezpečnost začíná už přijejich vývoji. Aneb co chybí na počátku, později se už nedožene.
DORA bezpečný vývoj IT bezpečnost kybernetická odolnost
Nařízení DORA (Digitální operační odolnost) vstoupilo v platnost 25. listopadu 2022 s cílem posílit kybernetickou odolnost finančního sektoru Evropské unie. V dnešním digitálním světě závislém na online prostředí se ochrana dat a činností organizace (procesů, služeb) stává životně důležitou pro chod celého finančního sektoru. Kybernetické hrozby nabývají na síle a sofistikovanosti, a proto je nezbytné, aby finanční instituce posílily svou kybernetickou odolnost. Toto nařízení představuje ambiciózní snahu o posílení kybernetické odolnosti finančních institucí v EU a zavádí komplexní rámec pro řízení digitálních operačních rizik. Organizace, pro které je toto nařízení relevantní (zejména banky a pojišťovny) musejí splnit požadavky DORA do 17. ledna 2025.
Ačkoli se nařízení DORA primárně soustředí na provozní a infrastrukturní odolnost systémů v produkci, je nezbytné si uvědomit, že bezpečnost aplikací hraje v celkové odolnosti organizace neméně důležitou roli. V tomto článku prozkoumáme propojení DORA a bezpečného vývoje softwaru a zdůrazníme, proč je klíčové integrovat oba přístupy pro dosažení skutečně robustní a trvalé kybernetické odolnosti.
DORA se zaměřuje na odolnost infrastruktury, která zahrnuje systémy, sítě a hardwary kritické pro provoz finanční služby. Nicméně pro dosažení trvalé a komplexní kybernetické odolnosti je nezbytné, aby se organizace zaměřily i na oblast vývoje softwaru. Podle studie společnosti IBM „Cost of Data Breach“ z roku 2023 dosáhly průměrné náklady na kybernetický incident kategorie „data breach“ v roce 2022 4,4 mil. dolarů, v přepočtu zhruba 102 mil. Kč, přičemž 65 % incidentů začalo narušením aplikace.
Existuje hned několik faktorů, které přispívají k vysokému počtu kybernetických incidentů začínajících narušením aplikace:
- Komplexnost aplikací: Moderní aplikace jsou složité systémy skládající se z mnoha komponent, knihoven a rozhraní API. Tato komplexnost otevírá dveře pro chyby a zranitelnosti, které mohou útočníci zneužít k získání přístupu k datům a systémům.
- Rychlý vývoj aplikací: V dnešním dynamickém prostředí se aplikace vyvíjejí a nasazují rychleji než kdy dříve. To může vést k tomu, že se bezpečnostní aspekty zanedbají a do produkčního prostředí se dostanou aplikace s neznámými zranitelnostmi.
- Nedostatečná standardizace: V oblasti vývoje softwaru existuje mnoho různých programovacích jazyků, platforem a rámců. Tato absence standardizace ztěžuje implementaci konzistentních bezpečnostních opatření a zvyšuje riziko zranitelností.
- Nedostatečné testování: Neúplné nebo nedostatečné testování aplikací může vést k tomu, že se zranitelnosti neodhalí a zůstanou skryté až do doby, kdy je zneužije útočník.
- Nedostatečné povědomí o bezpečnosti: Mnoho vývojářů a IT profesionálů nemá dostatečné znalosti o kybernetických hrozbách a nejlepších bezpečnostních postupech. To může vést k chybám v kódu a implementaci bezpečnostních opatření, která nejsou dostatečně robustní.
- Cílení útočníků: Aplikace představují pro útočníky atraktivní cíl, protože často obsahují citlivá data, jako jsou osobní údaje, finanční informace nebo obchodní tajemství. Útočníci investují značné úsilí do vývoje nástrojů a technik pro zneužití zranitelností v aplikacích.
Nařízení DORA zdůrazňuje rizikově orientovaný přístup ke kybernetické bezpečnosti, a to i v oblasti aplikací. Společnosti musejí aktivně vyhledávat a analyzovat své kybernetické hrozby a zranitelnosti. Kritické aplikace musejí procházet „threat-led penetration“ testy. Tyto testy zahrnují definování scénářů hrozeb, které by mohly ohrozit aplikaci a následné testování definovaných scénářů hrozeb simulovanými útoky. Testy se provádějí dle předepsané metodiky a slouží k odhalení reálných zranitelností, které by mohl útočník zneužít.
Mnoho firem se dle očekávání bude soustřeďovat na plnění minimálních požadavků DORA, je ale vhodné neopomíjet základní principy bezpečného vývoje softwaru. Penetrační testování produkční aplikace odhalí chyby, ale nebrání jejich vzniku. Aplikace s inherentními zranitelnostmi bude vždy náchylná k útokům. Oprava chyb po nasazení je mnohem dražší a zdlouhavější než jejich prevence.
Zaměření se na bezpečný vývoj naproti tomu přináší řadu benefitů. Bezpečnostní principy zabudované do vývojového procesu minimalizují rizika zranitelností a zneužití. Rychlejší a snazší oprava chyb v raných fázích vývoje vede k nižším nákladům. Software vyvinutý s ohledem na bezpečnost je odolnější vůči kybernetickým útokům. Je to jako stavět dům na pevných základech, místo abychom se snažili opravovat trhliny ve zdech až po nastěhování.
Společnosti by se měly zaměřit nejen na testování, ale i na podporu bezpečného vývoje softwaru. To znamená investovat do implementace principů Secure Software Development Lifecycle (SSDLC) nebo požadovat od svých dodavatelů, aby při vývoji softwaru využívali tento přístup. Investice do bezpečného vývoje aplikací je spolu s požadavky DORA klíčovým krokem k dosažení vysoké odolnosti společností vůči kybernetickým hrozbám, a tím minimalizaci kybernetických rizik. Nařízení DORA představuje bezesporu důležitý krok k dosažení odolnosti provozu v digitálním světě, ovšem zaměřením se na prevenci namísto hašení požárů firmy ušetří čas, peníze a zajistí si větší klid v digitálním světě.
Jak na bezpečný vývoj: Implementace principů SSDLC
Klíčem k bezpečnosti aplikací je její zakomponování do každé fáze vývoje. Tímto způsobem se předchází vzniku zranitelností a snižují se náklady na jejich pozdější odstranění. Secure Software Development Lifecycle (SSDLC) je komplexní přístup, který integruje bezpečnostní opatření do celého životního cyklu vývoje softwaru. Mezi jeho klíčové principy patří:
Minimalizace attack surface: Jedná se o strategii, jejímž cílem je omezit počet potenciálních vstupních bodů, které by útočník mohl zneužít. Minimalizací funkcí, rozhraní, portů a dalších prvků aplikace se snižuje riziko úspěšného útoku. Příkladem může být omezení přístupu k administrativním funkcím pouze na oprávněné uživatele nebo vypnutí nepoužívaných služeb a portů.
Bezpečné výchozí nastavení: Aplikace by měla být již od svého prvního spuštění co nejvíce bezpečná, bez nutnosti dalších úprav ze strany uživatele. To znamená, že všechna výchozí nastavení musejí být navržena s ohledem na maximální bezpečnost. Např. by měla být standardně zapnuta silná hesla a dvoufaktorová autentizace. Princip nejmenšího oprávnění: Tento princip říká, že každý uživatel nebo proces by měl mít pouze ta oprávnění, která jsou nezbytně nutná pro vykonávání jeho úkolů. Tím se minimalizuje riziko, že útočník získá přístup k citlivým datům nebo funkcím, pokud se mu podaří získat kontrolu nad účtem s omezenými právy.
Princip obrany do hloubky: Vrstvená bezpečnost je klíčová. Princip obrany do hloubky spočívá v implementaci několika vrstev bezpečnostních opatření, takže pokud jedna vrstva selže, další vrstvy mohou útok zastavit. To může zahrnovat kombinaci technických opatření, jako jsou firewally, antivirové programy a detekce narušení, s organizačními opatřeními, jako jsou bezpečnostní školení a procesy řízení přístupu.
Bezpečné selhání: Když aplikace narazí na chybu nebo neočekávanou situaci, je důležité, aby selhala bezpečným způsobem. To znamená, že selhání nesmí vést k ohrožení bezpečnosti systému nebo dat. Např. by aplikace neměla zobrazit uživateli citlivé informace o systému nebo mu umožnit přístup k funkcím, ke kterým nemá oprávnění.
Nulová důvěra: V dnešním propojeném světě je důležité předpokládat, že žádný uživatel ani systém není implicitně důvěryhodný. Všechna data, zejména ta pocházející z externích zdrojů, musejí být důkladně validována a ověřena. Autentizace by měla být prováděna pomocí silných mechanismů, jako jsou certifikáty nebo tokeny s omezenou platností.
Oddělení povinností: Tento princip se uplatňuje zejména u kritických operací, kde je vysoké riziko podvodu nebo zneužití. Cílem je rozdělit úkoly mezi více osob tak, aby žádná jednotlivá osoba neměla úplnou kontrolu nad celým procesem. Tím se snižuje riziko podvodného jednání nebo chyb.
Security by Design: Bezpečnost by měla být nedílnou součástí návrhu a architektury aplikace od samého začátku vývoje. To znamená, že bezpečnostní aspekty by měly být zohledněny již při vytváření konceptu aplikace a následně implementovány ve všech fázích vývoje. Tímto přístupem se předchází vzniku zranitelností a snižují se náklady na jejich pozdější odstranění.
Princip jednoduchosti: Komplexnost je nepřítelem bezpečnosti. Čím složitější je kód aplikace, tím větší je pravděpodobnost, že bude obsahovat chyby a zranitelnosti. Proto je důležité usilovat o co nejjednodušší a nejsrozumitelnější kód. To usnadňuje nejen vývoj a údržbu aplikace, ale také její bezpečnostní audit a testování.
Použití standardních bezpečnostních komponent: Pro běžné bezpečnostní funkce, jako je autentizace, autorizace nebo šifrování, je vhodné využívat ověřené a důvěryhodné knihovny a komponenty. Tím se snižuje riziko implementace vlastních řešení, která mohou obsahovat chyby a zranitelnosti. Princip detekce anomálií: Aplikace by měla být schopna detekovat a zaznamenávat neobvyklé chování nebo události, které mohou indikovat pokus o útok nebo zneužití. To umožňuje včas reagovat na potenciální hrozby a minimalizovat jejich dopad.
Fáze životního cyklu vývoje softwaru (SDLC) a jejich bezpečnostní aspekty
Životní cyklus vývoje softwaru (SDLC) se skládá z několika fází, z nichž každá hraje klíčovou roli v zajištění bezpečnosti výsledné aplikace. Je zásadní zdůraznit, že během všech těchto fází, kdy aplikace ještě není nasazena do produkčního prostředí, nesmí pracovat s reálnými daty klientů, zaměstnanců nebo finančními údaji.
Fáze 1: Business zadání (IDEA)
V této úvodní fázi je důležité formulovat jasné a srozumitelné zadání pro následnou analýzu. Dále je třeba zvolit vhodnou metodiku řízení projektu a sestavit tým, který bude zahrnovat klíčové role: business owner, projektový manažer, analytik. Již v této fázi je nezbytné alokovat dostatečné prostředky pro analýzu a design a začít formulovat bezpečnostní požadavky, které budou aplikaci chránit před potenciálními hrozbami. Zároveň je třeba vytvořit časový plán pro analýzu a design, aby bylo možné efektivně řídit celý projekt.
Fáze 2: Analýza potřeb systému
Tato fáze se zaměřuje na detailní analýzu business a technických požadavků, identifikaci a vyhodnocení rizik a jejich možného dopadu. Důležitou součástí je také bezpečnostní analýza a modelování hrozeb, které pomáhají identifikovat potenciální zranitelnosti a navrhnout vhodná bezpečnostní opatření.
Fáze 3: Návrh (design) systému
Ve fázi návrhu se vytváří architektura a design systému včetně technického popisu aplikace a infrastruktury. Zde se navrhují jak technická, tak netechnická bezpečnostní opatření a plánuje se bezpečnostní testování. Zároveň se provádí odhad pracnosti, který je důležitý pro plánování dalších fází projektu.
Fáze 4: Samotný vývoj
Během samotného vývoje se implementují jednotlivé funkce a komponenty aplikace. Je zásadní zajistit bezpečné vývojové prostředí, aby se minimalizovalo riziko úniku kódu nebo jeho kompromitace. Dále je třeba nastavit a integrovat testovací infrastrukturu, která umožní provádět efektivní testování během celého vývoje. Moderní přístupy jako CI/CD (Continuous Integration/Continuous Delivery) pomáhají automatizovat proces sestavování, testování a nasazování aplikace, což urychluje vývoj a zároveň zvyšuje jeho kvalitu. Statická analýza kódu (SAST) je dalším důležitým nástrojem pro identifikaci a opravu zranitelností v kódu. Unit testy, které ověřují funkčnost jednotlivých částí kódu, jsou také nedílnou součástí bezpečného vývoje.
Fáze 5: Integrace a testování
V této fázi se jednotlivé komponenty aplikace integrují a testují, aby se zajistila jejich správná funkčnost a kompatibilita. Kromě funkcionálního a integračního testování je důležité provádět i bezpečnostní testování, které zahrnuje jak statickou (SAST), tak dynamickou analýzu aplikace (DAST). Nezávislé testování zranitelností, jako je penetrační testování, poskytuje další vrstvu ochrany a pomáhá odhalit zranitelnosti, které mohly uniknout předchozím fázím testování.
Fáze 6: Implementace a údržba
Po úspěšném testování je aplikace připravena k nasazení do produkčního prostředí. Před samotným nasazením je vhodné provést pilotní nasazení v omezeném prostředí, aby se ověřila funkčnost a stabilita aplikace v reálných podmínkách. Dále je třeba proškolit uživatele a administrátory systému, aby byli schopni aplikaci efektivně využívat a spravovat. Po nasazení je nutné pravidelně revidovat logický přístup a bezpečnostní kontroly, aby se zajistilo, že aplikace zůstává bezpečná i v průběhu času. Patch management, tedy proces instalace aktualizací a oprav, je klíčový pro ochranu před nově objevenými zranitelnostmi. A v neposlední řadě slouží předávací technická dokumentace jako zdroj informací pro provozní tým a usnadňuje správu a údržbu aplikace.
Každá z těchto fází SDLC vyžaduje důkladné zvážení bezpečnostních aspektů a implementaci vhodných opatření. Pouze tak lze zajistit, že výsledná aplikace bude odolná vůči kybernetickým hrozbám a bude splňovat přísné regulatorní požadavky.
Bezpečnostní role a odpovědnosti: Klíč k úspěšné implementaci SSDL
Úspěšná implementace principů SSDL a zajištění bezpečného vývoje softwaru vyžaduje jasné definování rolí a odpovědností všech zúčastněných stran. Každý člen týmu, od projektového manažera přes vývojáře a testery až po bezpečnostní odborníky, hraje klíčovou roli v celkovém procesu.
Jasné rozdělení odpovědností a pravomocí pomocí RACI matice (Responsible, Accountable, Consulted, Informed) zajišťuje, že každý ví, co je jeho úkolem a na koho se může obrátit v případě potřeby. Projektový manažer např. zodpovídá za celkové řízení projektu a zajištění, že bezpečnostní aspekty jsou do projektu začleněny od samého začátku. Vývojáři jsou zodpovědní za psaní bezpečného kódu a implementaci bezpečnostních opatření. Testeři ověřují, že aplikace splňuje bezpečnostní požadavky a neobsahuje zranitelnosti. Bezpečnostní odborníci poskytují poradenství a podporu v oblasti bezpečnosti a provádějí nezávislé bezpečnostní audity.
Nástroje a techniky pro bezpečný vývoj: Od automatizace po lidský faktor
Moderní vývoj softwaru se neobejde bez využití široké škály nástrojů a technik, které pomáhají zajistit bezpečnost aplikací.
Statická analýza kódu (SAST) umožňuje automaticky analyzovat zdrojový kód a identifikovat potenciální zranitelnosti ještě před spuštěním aplikace. Dynamická analýza aplikací (DAST) testuje aplikaci za běhu a hledá zranitelnosti, které se projeví pouze při interakci s aplikací. Fuzzing je technika, která spočívá v odesílání náhodných nebo neplatných dat do aplikace s cílem způsobit její selhání a odhalit potenciální zranitelnosti. Bezpečnostní code review je proces, při kterém zkušení vývojáři nebo bezpečnostní odborníci manuálně kontrolují zdrojový kód a hledají v něm chyby a zranitelnosti.
Kromě těchto technických nástrojů je však důležité nezapomínat ani na lidský faktor. Bezpečnostní školení a zvyšování povědomí o bezpečnosti mezi vývojáři a ostatními členy týmu jsou klíčové pro prevenci chyb a zranitelností.
Případové studie: Učení se z chyb druhých – Propast mezi vývojem a provozem
Reálné kybernetické incidenty způsobené zranitelnostmi v aplikacích nám ukazují, jak důležitý je bezpečný vývoj. Analýza těchto incidentů nám umožňuje poučit se z chyb a implementovat opatření, která zabrání jejich opakování. Můžeme se podívat na příklad úniku dat z velké společnosti, který byl způsoben nedostatečnou validací vstupů. Tato chyba mohla být odhalena a opravena již ve fázi vývoje pomocí statické analýzy kódu (SAST) nebo bezpečnostního code review.
Případové studie však ukazují, že pouhé učení se z chyb nestačí. V mnoha společnostech, zejména těch větších, je vývoj často odtržen od provozu. To může být způsobeno např. využíváním dceřiných společností nebo externích dodavatelů pro vývoj softwaru. Tato organizační propast může znesnadnit předávání informací o zranitelnostech a chybách mezi vývojovým a provozním týmem. Vývojáři nemusejí mít dostatečnou zpětnou vazbu o tom, jak jsou jejich aplikace využívány v reálném prostředí a jaké problémy se vyskytují. To může vést k tomu, že se stejné chyby opakují i v nových projektech.
Je proto zásadní, aby společnosti překonaly tuto propast a zajistily efektivní komunikaci a spolupráci mezi vývojovým a provozním týmem. Překonání propasti mezi vývojem a provozem je klíčové pro zajištění, že se společnosti dokáží poučit ze svých chyb a neustále zlepšovat bezpečnost svých aplikací. Pouze tak lze zajistit, že aplikace budou odolné vůči stále se vyvíjejícím kybernetickým hrozbám a budou splňovat přísné regulatorní požadavky.
Budoucnost bezpečného vývoje: Neustálý vývoj a adaptace
Oblast bezpečného vývoje softwaru se neustále vyvíjí a je důležité, aby firmy držely krok s nejnovějšími trendy a technologiemi. Technologický pokrok, jako je např. rozmach umělé inteligence, cloud computingu a internetu věcí (IoT), přinese nové výzvy v oblasti bezpečnosti aplikací.
Stejně tak i nařízení DORA se bude v následujících letech pravděpodobně dále vyvíjet a přizpůsobovat se měnícímu se prostředí kybernetických hrozeb. Společnosti by měly sledovat vývoj DORA a být připraveny na případné změny a nové požadavky. Je důležité si uvědomit, že DORA představuje minimální standardy, a firmy by měly usilovat o to, aby jejich bezpečnostní opatření překračovala tyto standardy a byla připravena na budoucí výzvy.
Budoucnost bezpečného vývoje spočívá v neustálé adaptaci a inovaci. Společnosti musejí být připraveny na nové technologie a hrozby a investovat do bezpečného vývoje softwaru, aby zajistily odolnost svých aplikací a ochranu svých dat. Pouze komplexní přístup k bezpečnosti, který zahrnuje nejen testování, ale i podporu bezpečného vývoje v celém životním cyklu aplikace, umožní firmám úspěšně čelit kybernetickým hrozbám a prosperovat v digitálním světě.
Použité zdroje:
Cost of a data breach 2023 | IBM NIST SP 800-218, Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities, Murugiah Souppaya (NIST), Karen Scarfone (Scarfone Cybersecurity), Donna Dodson, National Institute of Standards and Technology, https://doi.org/10.6028/NIST.SP.800-218