Jak na zranitelnosti v aplikacích? Tyhle nástroje je vyřeší za vás
Ačkoli bezpečnost projektu a jeho závislostí by měla být při vývoji prioritou, počet zranitelností v aplikacích a cílených útoků na ně každoročně přibývá. Naštěstí existují nástroje jako Snyk, které vám je pomohou odhalit.
Ve chvíli, kdy píšete jakýkoliv netriviální projekt, je téměř jisté, že využijete kód třetí strany. Načítáte si do projektu externí závislost, která vám vyřeší část logiky, případně poskytne další funkcionalitu. Obzvlášť v posledních letech se tento trend dekompozice a outsourcování stále zrychluje – zejména kvůli rostoucí popularitě a kvantitě open source software. Například v typickém Javascript projektu jsou přímých závislostí desítky – po započítání tranzitivních závislostí může jít i o nižší stovky.
Minimalizujte rizika pro uživatele
Jakkoliv užitečné a místy i nezbytné využívání kódu třetích stran je, přináší s sebou i jistá bezpečnostní rizika. Jedním z posledních medializovaných případů je například balíček `1337qq-js` který měl odesílat citlivé uživatelské soubory. Na balíček upozornil bezpečnostní tým Microsoftu a z npm už balíček nenainstalujete. Tohle je za poslední roky však jen jeden z menších “útoků”, které se také často zaměřují na krádež údajů ke kryptopeněženkám.
Pokud pomineme cílené a často velmi specifické útoky, problémem je i kód napsaný v dobré víře, který však může způsobit problémy při specifickém uživatelském vstupu, případně do vašeho projektu zanést jiné problematické chování. Podle jedné z analýz zůstává až 59 % procent open source zranitelností bez opravy. U zbývajících 41 % je pak medián času implementace opravy 265 dní.
Snyk: za málo peněz hodně muziky
V takovém prostředí je pak samozřejmě nejlepší být o každé zranitelnosti informován co nejdříve a ideálně automaticky. Jedním z nejjednodušších způsobů ochrany v případě Javascript projektů je příkaz npm audit, který proskenuje závislosti vašeho projektu a porovná jejich verze se seznamem známých zranitelností. U některých, kde je oprava triviální, pak nabízí i automatické vyřešení pomocí příkazu “npm audit fix”.
Dalším z nástrojů, které lze využít je pak Snyk, se kterým máme v Ackee dobré zkušenosti a který je pro open source projekty zcela zdarma. Jedná se o online a CLI nástroj, který hledá zranitelnosti nejen v Javascript kódu, ale i kódu v Typescriptu, PHP, Javě, C#, Pythonu a mnoha dalších jazycích. Při analýze Snyk využívá nejen veřejné databáze zranitelností jednotlivých platforem, ale má i vlastní výzkumný tým, který zranitelnosti v balíčcích hledá. Zároveň si na jejich blogu můžete přečíst například o tom jak při používání npm zůstat v bezpečí.
Jakožto developer-centric platforma nabízí Snyk kromě CLI a online prostředí také integrace do repozitářových služeb a CI/CD nástrojů. Kromě analýzy zranitelností kódu pak zvládá i odhalit zranitelnosti přímo v Docker kontejneru, na úrovni OS. K dispozici je také veřejná databáze zranitelností, kde si můžete dohledat např. balíček, o kterém jsem psal na začátku.
Bezpečnost na prvním místě
Bezpečnost projektu a jeho závislostí je samozřejmě téma mnohem komplexnější, než lze popsat v jednom článku. Oba zde představené nástroje – ”npm audit” i Snyk – jsou však velice jednoduché a jejich použití nezabere mnoho času. Pro začátek se tedy jedná o ideální prostředek, pokud chcete “za málo peněz, hodně muziky”, a tím pádem i o jakési “nutné minimum”.
V Ackee používáme “npm audit” u všech projektů, na kterých aktuálně pracujeme. Pokud je v projektu nalezena jakákoliv závažnější zranitelnost, build selže a takováto verze se vůbec nenasadí. Projekt pak zůstane běžet ve starší verzi a pro nasazení nové musí někdo z vývojářů bezpečnostní riziko vyřešit – například aktualizací závislosti. U nových open source balíčků pak využíváme i Snyk, například u projektu cosmas.
O Snyku
Snyk se zabývá vývojem bezpečnostních řešení pro vývojáře pracující s otevřeným zdrojovým kódem. Řeší tak problémy, které vývojářům způsobují zranitelnosti v open source, která pramení právě z opakovaného využívání již existujících kódů, veřejných repozitářů a dalších open source zdrojů. Týmy pracující v prostředích založených na principech DevOps tak dokáží snáze odhalovat zranitelnosti.