V uplynulém roce došlo k mnoha únikům z databází (, a ). V mnoha případech obsahovaly databáze osobní údaje. Těmto únikům by se dalo předejít, kdyby po nasazení databáze administrátoři zkontrolovali několik jednoduchých nastavení. Dnes se na ně podíváme.
Hned na úvod si ujasníme, že v naší praxi používáme Elasticsearch pro ukládání logů a analýzu protokolů informačních ochranných prostředků, operačních systémů a software na naší IaaS platformě, která splňuje požadavky 152-FZ, Cloud-152.

Kontrolujeme, zda databáze není 'exposed' na internetu
Ve většině známých případů úniků (, ) útočník získal přístup k datům jednoduchým a primitivním způsobem: databáze byla zveřejněna na internetu a bylo možné se k ní připojit bez autentizace.
Nejprve si objasníme, jak to s publikováním na internetu funguje. Proč k tomu dochází? Je to proto, že pro flexibilnější práci s Elasticsearch vytváříme cluster ze tří serverů. Aby si databáze mohly mezi sebou vyměňovat informace, je nutné otevřít porty. Nakonec administrátoři nijak neomezují přístup k databázi, takže se k DB dá připojit odkudkoli. Zkontrolovat, zda k databázi existuje externí přístup, je jednoduché. Stačí v prohlížeči zadat http://[IP/Název Elasticsearch]:9200/_cat/nodes?v
Pokud se podaří dostat dovnitř, jde rychle zavřít.
Chceme chránit připojení k DB
Nyní uděláme tak, aby se k databázi nedalo připojit bez autentizace.
Elasticsearch má autentizační modul, který omezuje přístup k databázi, ale je pouze v placené sadě pluginů X-Pack (1 měsíc zdarma).
Dobrou zprávou je, že na podzim 2019 Amazon otevřel své dovednosti, které překrývají s X-Pack. Funkce autentizace při připojení k databázi se stala dostupnou pod svobodnou licencí pro verzi Elasticsearch 7.3.2 a již je na cestě nový vydání pro Elasticsearch 7.4.0.
Instalace tohoto pluginu je jednoduchá. Přihlaste se do konzole serveru a připojte repozitář:
RPM Based:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB Based:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -Nastavujeme interakci mezi servery přes SSL
Při instalaci pluginu se mění konfigurace portu pro připojení k databázi. Na něm se aktivuje šifrování SSL. Aby servery v clusteru mohly i nadále spolupracovat, je nutné nastavit mezi nimi interakci pomocí SSL.
Důvěru mezi hostiteli lze navázat buď prostřednictvím vlastního certifikačního úřadu, nebo bez něj. U prvního způsobu je vše jasné: stačí se obrátit na specialisty z CA. Přeskočme tedy rovnou na druhý.
- Vytváříme proměnnou s plným názvem domény:
export DOMAIN_CN="example.com" - Vytváříme soukromý klíč:
openssl genrsa -out root-ca-key.pem 4096 - Podepisujeme kořenový certifikát. Uchovávejte ho jako oko v hlavě: při jeho ztrátě nebo kompromitaci bude nutné znovu nastavit důvěru mezi všemi hostiteli.
openssl req -new -x509 -sha256 -subj "\/C=RU\/ST=Moscow\/O=Moscow, Inc.\/CN=${DOMAIN_CN}" -key root-ca-key.pem -out root-ca.pem - Vytváříme klíč administrátora:
openssl genrsa -out admin-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem - Vytváříme žádost o podepsání certifikátu:
openssl req -new -subj "\/C=RU\/ST=Moscow\/O=Moscow Inc.\/CN=${DOMAIN_CN}\/CN=admin " -key admin-key.pem -out admin.csr - Vytváříme certifikát administrátora:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem - Vytváříme certifikáty pro uzel Elasticsearch:
export NODENAME="node-01" openssl genrsa -out ${NODENAME}-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in ${NODENAME}-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out ${NODENAME}-key.pem - Vytváříme žádost o podepsání:
openssl req -new -subj "\/C=RU\/ST=Moscow\/O=Moscow Inc.\/CN=${NODENAME}.${DOMAIN_CN}" -addext"subjectAltName=DNS:${NODENAME}.${DOMAIN_CN},DNS:www.${NODENAME}.${DOMAIN_CN}" -key ${NODENAME}-key.pem -out ${NODENAME}.csr - Podepisujeme certifikát:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Rozkládáme certifikát mezi uzly Elasticsearch do složky:
/etc/elasticsearch/
budeme potřebovat soubory:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Nastavujeme /etc/elasticsearch/elasticsearch.yml – měníme názvy souborů s certifikáty na námi vygenerované:
opendistro_security.ssl.transport.pemcert_filepath: node-01.pem opendistro_security.ssl.transport.pemkey_filepath: node-01-key.pem opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem opendistro_security.ssl.transport.enforce_hostname_verification: false opendistro_security.ssl.http.enabled: true opendistro_security.ssl.http.pemcert_filepath: node-01.pem opendistro_security.ssl.http.pemkey_filepath: node-01-key.pem opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem opendistro_security.allow_unsafe_democertificates: false opendistro_security.allow_default_init_securityindex: true opendistro_security.authcz.admin_dn: − CN=admin,CN=example.com,O=Moscow Inc.,ST=Moscow,C=RU opendistro_security.nodes_dn: − CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU
Měníme hesla interních uživatelů
- Pomocí níže uvedeného příkazu vypíšeme hash hesla do konzole:
sh ${OD_SEC}/tools/hash.sh -p [heslo] - Měníme hash v souboru na získaný:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Nastavujeme firewall v OS
- Umožňujeme spuštění firewallu:
systemctl enable firewalld - Spouštíme ho:
systemctl start firewalld - Umožňujeme připojení k Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Znovu načítáme pravidla firewallu:
firewall-cmd --reload - Zobrazujeme aktuální pravidla:
firewall-cmd --list-all
Aplikujeme všechny naše změny na Elasticsearch
- Vytváříme proměnnou s úplnou cestou k adresáři s pluginem:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - Spouštíme skript, který aktualizuje hesla a zkontroluje nastavení:
${OD_SEC}/tools/securityadmin.sh -cd ${OD_SEC}/securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem -cert /etc/elasticsearch/admin.pem -key /etc/elasticsearch/admin-key.pem - Kontrolujeme, zda se změny projevily:
curl -XGET https://[IP/Název Elasticsearch]:9200/_cat/nodes?v -u admin:[heslo] --insecure
To jsou minimální nastavení, která zabezpečují Elasticsearch před neoprávněným připojením.
Zdroj: habr.com
