Co jsou tajné kódy a jak je zpracovat v Javě
Tajné kódy jsou řetězce znaků, které by se neměly sdílet s vnějším světem: můžou to být hesla databáze, privátní šifrovací klíče, tokeny patového přístupu atd. Kvůli lepšímu zabezpečení se mnoho lidí také domnívá, že cokoli, co by útočníkovi mohlo pomoct, by mělo být považováno za tajný kód: například adresu URL vaší produkční databáze by bylo možné považovat za tajný kód. Vaše databáze by neměla být veřejně přístupná. Důvodem je, že tento druh informací je citlivý povahu a tím méně informací je v kódu k dispozici, tím lépe.
Co je nulová důvěra (Zero Trust) a nulové tajné kódy?
Koncept nulová důvěra (Zero Trust) spočívá v tom, že nikdo by neměl být nevidomě důvěryhodný a neměl mít přístup k prostředkům společnosti bez ověření a autorizace.
Tento koncept platí i pro webové aplikace: neměli by mít tajné kódy uložené ve svém kódu ani v konečných binárních souborech. Říkáme tomu nula tajných kódů.
Tajné kódy by měly být spravovány externím systémem s přísnými pravidly přístupu a ověřováním, aby se snížilo riziko útoku.
Neukládat tajné kódy do úložišť Git
I když je vaše úložiště Git soukromé, vložení jakéhokoli tajného kódu do zdrojového kódu je špatným postupem:
- Každý, kdo má přístup k vašemu úložišti, bude znát vaše citlivá data.
- Každý, kdo má přístup k binárnímu souboru vaší aplikace, z něj může extrahovat tajné kódy.
Jakmile je tajný klíč uložený v úložišti Git, útočníci ho vždycky najdou tak, že se podívá do historie úložiště, kde ho můžete po dlouhé době zapomenout.
I když se to zdá praktické, neměli byste nikdy ukládat žádné tajné kódy do úložiště zdrojového kódu. Chcete-li se tomuto problému vyhnout, můžete použít automatické nástroje, které pravidelně kontrolují úložiště a odesílají upozornění, pokud najdou heslo nebo adresu URL databáze uloženou omylem.
Použití proměnných prostředí
Nejjednodušším řešením pro správu tajných kódů je použití proměnných prostředí. Mají několik výhod:
- Snadno se používají
- Pracují na všech systémech (i v místních systémech).
- Každý je zná a rozumí tomu, jak fungují.
Nejsou ale dostatečně zabezpečené: všechny procesy ve vašem systému je mohou číst a snadno se zveřejňují pomocí rozšíření Java Management Extensions (JMX) v systému Java.
V důsledku toho se proměnné prostředí často považují za první krok k nulová důvěra (Zero Trust): jsou bezpečnější než ukládání tajných kódů přímo do zdrojového kódu, ale nemají možnosti správy a jsou pro útočníky snadno přístupné.
Používání tajných kódů Kubernetes
Kubernetes má pojem secrets
, což je další dobré řešení. Tyto tajné kódy lze načíst jako soubor v systému souborů aplikace: program Java pak může tento soubor číst při spuštění, aby k těmto tajným kódům přistupoval. Nástroje jako Spring Framework mají pro tento mechanismus dokonce standardní podporu, což jim umožňuje používat tyto tajné kódy snadným a efektivním způsobem.
Tento mechanismus je bezpečnější než proměnné prostředí, protože tyto soubory mohou být čteny pouze procesem, který je vyžaduje. Využívají také bohatý ekosystém Kubernetes a dají se spravovat různými nástroji pro správu, včetně nástrojů poskytovaných vaším poskytovatelem cloudu.
I když jsou tajné kódy Kubernetes vhodným řešením pro Kubernetes, jsou také omezené na Kubernetes a v závislosti na nástrojích používaných ke správě infrastruktury Kubernetes chybí pokročilé možnosti správy.
Použití úložiště tajných kódů
Úložiště tajných kódů, jako je Hashicorp Vault nebo Azure Key Vault, je specializovaný software pro správu tajných kódů. Nabízí bohatý systém pro správu, který autorizuje uživatele, obměňuje klíče zabezpečení a ověřuje, ke které aplikaci má přístup ke kterému tajnému kódu.
Poskytují také externí rozhraní API, aby je bylo možné použít v jakémkoli systému. Službu Azure Key Vault můžete například použít ve všech službách Azure, včetně služeb Virtual Machines, Aplikace Azure Services, Azure Kubernetes Services nebo Azure Spring Apps.
Úložiště tajných kódů je nejbezpečnější řešení pro správu tajných kódů, ale vyžaduje použití vyhrazeného nástroje.