26.3.2024

Bezpečnosť - Konfigurácia TLS (za 15 minút)

Malware. Scam. Spear phishing. Lámanie hesiel hrubou silou.

V časoch čím ďalej tým častejších, rafinovanejších a intenzívnejších kybernetických útokov – včítane útokov na riadiace systémy – je nutné zvyšovať úroveň bezpečnosti týchto systémov. Dnes si ukážeme, ako v aplikačnom serveri D2000 nastaviť kryptovanie všetkej sieťovej komunikácie medzi D2000 Serverom a všetkými sieťovými klientmi – či je to užívateľské rozhranie (HI), konfiguračné nástroje (CNF, GR) alebo vzdialené systémové procesy (Kom, Archiv, DbManager, Event atď).

Prvou dobrou správou je, že kryptovanie zabezpečuje bezpečnostný protokol TLS (Transport Layer Security), konkrétne implementácia OpenSSL. Rovnaký protokol sa používa na zabezpečenie kryptovanej komunikácie HTTPS, pomocou ktorej pracujete v prehliadači s Vašim bankovým účtom. D2000 verzie 21 a 22 používajú najnovšiu verziu tohto protokolu TLS 1.3.

Druhou dobrou správou je, že aktivácia TLS je možná bez reštartu aplikácie. Potrebné parametre sú uložené v registry (prípadne na Linuxe v konfiguračnom súbore aplikácie) a D2000 Kernel si ich načíta pri každom pripájaní klienta.

Takže – ako na to? V zásade podľa návodu v našej dokumentácii.

Na zabezpečenie komunikácie potrebujeme vygenerovať kryptovací kľúč a certifikát a nakonfigurovať D2000 Kernel, aby ho používal. Certifikát nasledovne potrebujeme distribuovať klientom a povedať im, aby ho používali.

Vytváranie súkromného kľúča a certifikátu pre D2000 Kernel

Nasledovné operácie by ste mali vykonávať na dôveryhodnom počítači – napríklad na Vašom pracovnom stroji. Nie je nutné robiť ich na serveri, kde je spustený D2000 aplikačný server.

Na vytvorenie páru privátneho/verejného kľúča typu RSA s dĺžkou 4096 bitov a uloženie do súboru server.pem použijeme príkaz

openssl genrsa -out server.pem 4096

Utilita openssl je na Linuxových systémoch dostupná štandardne. Na platforme Windows som si nainštaloval Win32/Win64 OpenSSL.

Obrázok 1 - Generovanie privátneho/verejného kľúča

K privátnemu kľúču by mal mať prístup iba D2000 Kernel (a jeho prezradenie by spôsobilo kompromitáciu bezpečnosti komunikácie).

Následne je nutné vygenerovať takzvaný CSR súbor (Certificate Signing Request) – to je požiadavka na podpísanie verejného kľúča autoritou. Použijeme príkaz

openssl req -new -key server.pem -out server.csr

Je nutné zadať viacero údajov – kód krajiny, mesto, názov organizácie a jednotky, takzvané Common Name (v prípade HTTPS komunikácie musí byť zhodné s názvom servera, v našom prípade to nie je nutné) a e-mailovú adresu.

Obrázok 2- Generovanie požiadavky na podpis certifikátu

Pokiaľ bude certifikát podpisovať nejaká oficiálna autorita, prípadne dedikovaný pracovník firmy zodpovedný za použitie certifikátov, je možné, že na jednotlivé údaje budú kladené aj ďalšie, prísnejšie požiadavky.

Vygenerovaný súbor server.csr je treba buď poslať autorite na podpísanie, alebo si ho môžete podpísať sami. Pri podpisovaní sa parametrom -days určuje platnosť certifikátu (v dňoch). Pred uplynutím platnosti bude treba certifikát znovu podpísať, prípadne vygenerovať nový kľúč a certifikát!

Podpísanie a teda vytvorenie certifikátu, ktorý je nedôveryhodný (ale to nevadí, D2000 klienti ho akceptujú) je možné príkazom:

openssl x509 -req -days 3650 -in server.csr -signkey server.pem -out server.crt

Vznikne súbor server.crt, čo je podpísaný certifikát. V uvedenom prípade som nastavil platnosť certifikátu na 3650 dní, čiže takmer 10 rokov.

Nasadzovanie súkromného kľúča a certifikátu na D2000 Kernel

Vygenerovaný súkromný kľúč (server.pem) a certifikát (server.crt) je nutné nakopírovať na počítač, kde je spustený D2000 Kernel. Kam? Napríklad do adresára aplikácie. V ňom sa už nachádza adresár config, môžete v ňom vytvoriť podadresár tls a nakopirovať oba súbory tam.

Poznámka o bezpečnosti – súkromný kľúč server.pem by sa nemal dostať do nepovolaných rúk. Preto odporúčame nastaviť na tento súbor prístup iba pre užívateľa SYSTEM (prípadne pre iného, pod ktorým je spustený D2000 Kernel). Na platforme Linux sa štandardne používa užívateľ d2000.

V redundantných systémoch máte dve možnosti. Buď na všetky servery použijete rovnaký kľúč/certifikát, alebo generujete dva páry (alebo viac pre redundancie s viacerými servermi). Odporúčame prvú možnosť – je menej prácna :)

Následne je nutné v registroch vytvoriť kľúče TLS_KeyFile a TLS_CertFile vo vetve

HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\<instalacia>\cfg_<aplikacia>\TLS_Server

a zapísať do nich umiestnenie súkromného kľúča a certifikátu.

Obrázok 3 - Úpravy v registroch na strane D2000 Kernela pre aplikáciu COV_PB

Posledný kľúč v tej istej vetve je TLS_RequiredLevel. Tento kľúč by mal už existovať a mať prednastavenú hodnotu None. Táto znamená, že D2000 Kernel nevyžaduje kryptovanie komunikácie a akceptuje aj klientov, ktorí sa pripájajú bez TLS kryptovania. Ak zmeníme hodnotu na TLSNoPeerAuth, budú pripojení iba klienti s TLS kryptovaním. Aby sme tak mohli urobiť, nutné je predtým nakonfigurovať klientov – inak sa nebudú vedieť pripojiť.

Konfigurácia D2000 klientov

Najskôr potrebujeme na klientov nakopírovať serverovský certifikát (prípadne certifikáty, ak sme pre redundantné systémy generovali súkromný kľúč/certifikát pre každý server zvlášť).

Kopírovanie je možné realizovať ručne. My štandardne na aktualizáciu klientských inštalácií používame D2Update utility. V praxi to funguje tak, že klienti pri spúšťaní binárok (napr. HI) aktivujú aktualizačný mechanizmus, ktorý sa pripojí na aktualizačný server (pôvodne cez FTP, ale už nejaký čas je podporovaný a preferovaný bezpečnejší SFTP protokol). Z aktualizačného servera sú stiahnuté dostupné aktualizácie a následne sa u klienta spustí samotný program, napr. HI.

Výsledok by mal byť rovnaký – niekde na disku bude certifikát servera. Odporúčame, aby bol umiestnený v aplikačnom adresári.

Následne, podobne ako na serveri, je nutné pomocou registry položiek (tentokrát vo vetve TLS_Client) nastaviť kľúč TLS_TrustedCerts na názov súboru s certifikátom (včítane cesty). Na obrázku nižšie si môžete všimnúť, že je dovolené použiť symbolické premenné Windows prostredia (Environment variables) ako napr. %AppData%. Pokiaľ používate v redundancii pre každý server vlastný certifikát, tak v tomto kľúči môžete zadať aj viacero názvov súborov oddelených bodkočiarkou.

Kľúč TLS_RequiredLevel je nutné zmeniť z hodnoty None hodnotu TLSPeerAuth. Táto znamená, že D2000 klient bude komunikovať iba s D2000 Serverom, ktorého certifikát je zhodný s certifikátom nakonfigurovaným v kľúči TLS_TrustedCerts. Pre zaujímavosť – ak nastavíte hodnotu TLSNoPeerAuth, tak klient bude vyžadovať kryptované spojenie, ale je mu jedno, aký certifikát server používa. Táto konfigurácia je ale potenciálne zneužiteľná na tzv. man-in-the-middle attack (a je dôvodom, prečo verejne dostupné servery používajú certifikáty podpísané uznávanými autoritami, aby tak dokázali, že svoju identitu).

Obrázok 4 - Úpravy v registroch na strane klientov

Posledným nastavením na strane D2000 klienta je pridanie parametra /C<aplikacia> pre štartované procesy. Je to možné buď úpravami spúšťaných odkazov (liniek) alebo nastavením kľúča DefaultApplication vo vetve inštalácie (v našom príklade Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\D2EXE_COV_PB) na hodnotu <aplikacia> (v našom príklade COV_PB). Tento parameter umožní D2000 klientom načítať konfiguráciu TLS zabezpečenia z registrov špecifických pre spúšťanú aplikáciu a to ešte pred pripojením sa klienta na D2000 Server.

Pri použití D2Update utility máme možnosť pri aktualizácii klienta spustiť aj skript, ktorý môže obsahovať napr. aj nastavenie kľúčov registry. Pre zaujímavosť prikladáme aj tento – je to jednoduchý 3-riadkový skript nastavujúci popisované registry kľúče. Posledný kľúč má v hodnote zdvojené percentá (toto je nutné, aby sa symbolická premenná neinterpretovala pri spustení skriptu).

Obrázok 5 - Skript na nastavenie hodnôt registrov klientov

Overenie funkčnosti

Od nastavenia parametra TLS_RequiredLevel na strane D2000 Kernela na hodnotu TLSNoPeerAuth už nebude D2000 Kernel ochotný prijímať klientov bez TLS kryptovania. Pri pripájaní klientov s kryptovaním budú v logu D2000 Kernela riadky typu:

BACKEND - RegistrateProces request from MyComp.HIP V22.00.074 s380 [TCP/IP 172.16.0.2:59921][TLSv1.3]. ClientName: MyComp.HIP

V logu vidieť použité kryptovanie (TLSv1.3).

Na strane klientov bude v logu hláška o pripojení sa s použitím kryptovania na overený server (TLSv1.3 VERIFIED).

CLIENT - Connection established to D2000 Kernel V22.00.074 s380 [TCP/IP 192.168.130.97:3119][TLSv1.3 VERIFIED].

Výmena kľúča a certifikátu

Výmena súkromného kľúča/certifikátu môže súvisieť s nastavením bezpečnostnej politiky firmy a je nutné ju uskutočniť skôr, ako certifikát expiruje.

Vymeniť kľúč a certifikát treba najskôr spraviť na strane D2000 Kernela a následne certifikát rozdistribuovať klientom. Existujúce spojenia budú stále používať starý certifikát, nové už budú pracovať s novým.

Záver

Nastavenie TLS kryptovania komunikácie medzi D2000 Serverom a klientami je relatívne nenáročná a zároveň užitočná operácia zvyšujúca bezpečnosť, ktorá poteší nielen administrátorov, ale aj audítorov, ktorí sa aplikáciou budú zaoberať. Príjemnou vlastnosťou aplikačného servera reálneho času Ipesoft D2000 je možnosť rekonfigurácie a prípadne výmeny kľúča a certifikátu počas behu servera, bez nutnosti reštartu.

7.10.2022, Ing. Peter Humaj, www.ipesoft.com

Iné blogy