Mik azok a titkos kódok, és hogyan kezelhetők a Java-ban?

Befejeződött

A titkos kódok olyan karaktersorozatok, amelyeket nem szabad megosztani a külvilággal: lehetnek adatbázisjelszavak, titkos titkosítási kulcsok, személyes hozzáférési jogkivonatok stb. A fokozott biztonság érdekében sokan úgy vélik, hogy minden, ami segíthet a támadónak, titkosnak tekinthető: például az éles adatbázis URL-címe titkosnak tekinthető. Az adatbázisnak nem szabad nyilvánosan elérhetőnek lennie. Ennek az az oka, hogy az ilyen típusú információk természetüknél függően érzékenyek, és minél kevesebb információ érhető el a kódban, annál jobb.

Mi az a Teljes felügyelet és a nulla titkos kód?

A Teljes felügyelet fogalma az, hogy senki sem lehet vakon megbízható, és senki sem férhet hozzá a vállalati erőforrásokhoz anélkül, hogy ellenőrizték és engedélyezték volna.

Ez a fogalom a webalkalmazásokra is vonatkozik: nem szabad titkos kódokat tárolniuk a kódjukban vagy a végleges bináris fájljaikban. Ezt hívjuk zéró titkoknak.

A titkos kulcsokat külső rendszernek kell kezelnie, szigorú hozzáférési szabályokkal és ellenőrzéssel, a támadási kockázat csökkentése érdekében.

Ne tegyen titkos kulcsokat a Git-adattárakba

Még ha a Git-adattár privát is, a forráskódba való bármilyen titkos kód elhelyezése helytelen gyakorlat:

  • Bárki, aki hozzáfér az adattárhoz, tudni fogja a bizalmas adatait
  • Bárki, aki hozzáfér az alkalmazás bináris fájljához, kinyerheti belőle a titkos kulcsokat

Ha egy titkos kulcsot egy Git-adattárban tárolnak, a támadók mindig megtalálhatják az adattár előzményeit, ahol hosszú idő elteltével elfelejthetők.

Még ha praktikusnak is tűnik, soha ne tároljon titkos kulcsokat a forráskódtárban. A probléma elkerülése érdekében használhat olyan automatikus eszközöket, amelyek rendszeresen ellenőrzik az adattárat, és figyelmeztetéseket küldenek, ha véletlenül tárolt jelszót vagy adatbázis URL-címet találnak.

Környezeti változók használata

A titkos kódok kezelésére a legegyszerűbb megoldás a környezeti változók használata. Számos előnnyel rendelkeznek:

  • Könnyen használhatóak
  • Minden rendszeren működnek (még a helyszíni rendszerekben is)
  • Mindenki ismeri őket, és megérti, hogyan működnek

Azonban nem elég biztonságosak: a rendszer összes folyamata képes olvasni őket, és a Java-rendszereken a Java Management Extensions (JMX) használatával könnyen elérhetővé válnak.

Ennek eredményeképpen a környezeti változók gyakran első lépésként jelennek meg a Teljes felügyelet felé: biztonságosabbak, mint a titkos kódok közvetlenül a forráskódba való tárolása, de nem rendelkeznek felügyeleti képességekkel, és könnyen elérhetők a támadók számára.

Kubernetes-titkos kódok használata

A Kubernetesnek van egy fogalma secrets, ami egy másik jó megoldás. Ezek a titkos kódok fájlként tölthetők be az alkalmazás fájlrendszerére: a Java-programok ezt a fájlt indításkor elolvashatják, hogy hozzáférhessenek ezekhez a titkos kódokhoz. Az olyan eszközök, mint a Spring Frameworks, még standard támogatást is nyújtanak ehhez a mechanizmushoz, így könnyen és hatékonyan használhatják ezeket a titkos kulcsokat.

Ez a mechanizmus biztonságosabb, mint a környezeti változók, mivel ezeket a fájlokat csak az azt igénylő folyamat tudja olvasni. A gazdag Kubernetes-ökoszisztémának is hasznát vehetik, és különböző felügyeleti eszközökkel kezelhetők, beleértve a felhőszolgáltató által biztosított eszközöket is.

Bár a Kubernetes-titkos kulcsok jó megoldást jelentenek a Kubernetes számára, a Kubernetes-infrastruktúra kezeléséhez használt eszközöktől függően ezek a Kubernetes-szolgáltatásokra is korlátozódnak, és nem rendelkeznek fejlett felügyeleti képességekkel.

Titkos kódtár használata

A Titkos kulcsok tárolója, például a Hashicorp Vault vagy az Azure Key Vault, a titkos kódok kezelésére szolgáló speciális szoftver. Gazdag felügyeleti rendszert kínál a felhasználók engedélyezéséhez, a biztonsági kulcsok elforgatásához és annak ellenőrzéséhez, hogy melyik alkalmazás férhet hozzá a titkos kulcsokhoz.

Külső API-t is biztosítanak, így bármilyen rendszeren használhatók. Az Azure Key Vaultot például minden Azure-szolgáltatásban használhatja, beleértve a virtuális gépeket, Azure-alkalmazás szolgáltatásokat, az Azure Kubernetes Servicest vagy az Azure Spring Appst.

A titkos kódok kezelésére a Titkos kulcsok tároló a legbiztonságosabb megoldás, de egy dedikált eszköz használatát igénylik.