V uplynulom roku došlo k mnohým únikom z databáz (, a ). Vo veľa prípadoch sa v databázach uchovávali osobné údaje. Týmto únikom by sa dalo predísť, keby po nasadení databáz administrátori venovali pozornosť niekoľkým jednoduchým nastaveniam. Dnes sa o nich porozprávame.
Hneď na úvod si ujasníme, že vo svojej praxi používame Elasticsearch na uchovávanie logov a analýzu protokolov ochranných prostriedkov, operačných systémov a softvéru na našej platforme IaaS, ktorá spĺňa požiadavky 152-FZ, Cloud-152.

Kontrolujeme, či databáza nie je prístupná na internete
Vo väčšine známych prípadov únikov (, ) sa útočník k údajom dostal jednoducho a bez námahy: databáza bola publikovaná na internete a bolo možné sa k nej pripojiť bez autentifikácie.
Najprv si objasníme publikovanie na internete. Prečo sa to deje? Ide o to, že na flexibilnejšiu prácu s Elasticsearch je potreba vytvoriť cluster zo troch serverov. Aby si databázy medzi sebou mohli komunikovať, je potrebné otvoriť porty. Výsledkom je, že administrátori nijako neobmedzujú prístup k databáze a k databázam sa dá pripojiť odkiaľkoľvek. Skontrolovať, či je k databáze prístup zvonku, je jednoduché. Stačí do prehliadača zadať http://[IP/názov Elasticsearch]:9200/_cat/nodes?v
Ak sa dá prihlásiť, tak rýchlo zatvorte prístup.
Chráňte pripojenie k databáze
Teraz to nastavíme tak, aby sa k databáze nedalo pripojiť bez autentifikácie.
Elasticsearch má autentifikačný modul, ktorý obmedzuje prístup k databáze, ale je len v platenom balíku pluginov X-Pack (1 mesiac bezplatného používania).
Dobrá správa je, že na jeseň 2019 Amazon uvoľnil svoje vývojové práce, ktoré sa prekrývajú s X-Pack. Funkcia autentifikácie pri pripojení k databáze sa stala dostupnou pod voľnou licenciou pre verziu Elasticsearch 7.3.2, a nový release pre Elasticsearch 7.4.0 už je v práci.
Inštalácia tohto pluginu je jednoduchá. Prejdeme na konzolu servera a pripojíme repozitár:
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 interakciu medzi servermi cez SSL
Pri inštalácii pluginu sa mení konfigurácia portu pripojenia k databáze. Na ňom sa aktivuje šifrovanie SSL. Aby servery klastra mohli naďalej spolupracovať, je potrebné nastaviť interakciu medzi nimi pomocou SSL.
Dôveru medzi hostiteľmi je možné ustanoviť pomocou vlastného certifikačného úradu alebo bez neho. Pri prvej možnosti je všetko jasné: stačí sa obrátiť na odborníkov na CA. Prejdime priamo k druhej.
- Vytvárame premennú s úplným menom domény:
export DOMAIN_CN="example.com" - Vytvárame súkromný kľúč:
openssl genrsa -out root-ca-key.pem 4096 - Podpisujeme koreňový certifikát. Ukladajte ho ako oko v hlave: pri jeho strate alebo kompromitácii bude potrebné prekonfigurovať dôveru medzi všetkými hostiteľmi.
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árame kľúč 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árame žiadosť o podpis 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árame 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árame certifikáty pre uzol 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árame žiadosť o podpis:
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 - Podpisujeme certifikát:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Rozdeľujeme certifikát medzi uzlami Elasticsearch do zložky:
/etc/elasticsearch/
budeme potrebovať súbory:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Nastavujeme /etc/elasticsearch/elasticsearch.yml – meníme názvy súborov s certifikátmi na vygenerované nami:
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
Meníme heslá interných používateľov
- Pomocou nižšie uvedeného príkazu vypíšeme hash hesla do konzoly:
sh ${OD_SEC}/tools/hash.sh -p [heslo] - Meníme hash v súbore na získaný:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Nastavujeme firewall v OS
- Povoľujeme spustenie firewalu:
systemctl enable firewalld - Spúšťame ho:
systemctl start firewalld - Povoľujeme pripojenie k Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Reštartujeme pravidlá firewalu:
firewall-cmd --reload - Zobrazujeme aktívne pravidlá:
firewall-cmd --list-all
Aplikujeme všetky naše zmeny do Elasticsearch
- Vytvárame premennú s kompletnou cestou k priečinku s pluginom:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - Spúšťame skript, ktorý aktualizuje heslá a skontroluje nastavenia:
${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, či sa zmeny uplatnili:
curl -XGET https://[IP/Meno Elasticsearch]:9200/_cat/nodes?v -u admin:[heslo] --insecure
To je všetko, to sú minimálne nastavenia, ktoré chránia Elasticsearch pred neoprávneným pripojením.
Zdroj: habr.com
