Der har været mange databaselækager i løbet af det seneste år. (, и ). I mange tilfælde indeholdt databasen personoplysninger. Disse lækager kunne have været undgået, hvis administratorerne havde gjort sig ulejligheden med at kontrollere et par enkle indstillinger efter implementering af databasen. Vi vil tale om dem i dag.
Lad os straks slå fast, at vi i vores praksis bruger Elasticsearch til at gemme logs og analysere logs af informationssikkerhedsværktøjer, operativsystemer og software i vores IaaS-platform, hvilket overholder kravene i Federal Law 152, Cloud-152.

Vi tjekker, om databasen "stikker ud" på internettet
I de fleste kendte lækagetilfælde (, ) angriberen fik enkelt og nemt adgang til dataene: databasen var offentliggjort på internettet, og der kunne oprettes forbindelse til den uden godkendelse.
Lad os først se på publicering på internettet. Hvorfor sker dette? Sagen er, at Elasticsearch for mere fleksibelt arbejde Opret en klynge af tre servere. For at databaserne kan kommunikere med hinanden, skal porte åbnes. Som følge heraf begrænser administratorer ikke adgangen til databasen på nogen måde, og du kan oprette forbindelse til databasen hvor som helst fra. Det er nemt at kontrollere, om der er adgang til databasen udefra. Bare indtast i browseren. http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v
Hvis du kommer ind, skal du løbe og lukke den.
Beskyttelse af forbindelsen til databasen
Lad os nu gøre det umuligt at oprette forbindelse til databasen uden godkendelse.
Elasticsearch har et godkendelsesmodul, der begrænser adgangen til databasen, men det findes kun i det betalte X-Pack plugin-sæt (1 måneds gratis brug).
Den gode nyhed er, at Amazon i efteråret 2019 åbnede op for sine udviklinger, der overlapper med X-Pack. Godkendelsesfunktionen ved forbindelse til databasen blev tilgængelig under en gratis licens til Elasticsearch 7.3.2, og en ny udgivelse til Elasticsearch 7.4.0 er allerede under udvikling.
Dette plugin er nemt at installere. Gå til serverkonsollen og forbind repository'et:
RPM-baseret:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB-baseret:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -Opsætning af interaktion mellem servere via SSL
Når du installerer plugin'et, ændres konfigurationen af databaseforbindelsesporten. SSL-kryptering er aktiveret på den. For at klyngeserverne kan fortsætte med at arbejde sammen, skal du konfigurere interaktionen mellem dem ved hjælp af SSL.
Tillid mellem værter kan etableres med eller uden dit eget certificeringscenter. Den første metode er ligetil: du skal blot kontakte CA-specialister. Lad os gå videre til den anden.
- Opret en variabel med det fulde domænenavn:
export DOMAIN_CN="example.com" - Opret en privat nøgle:
openssl genrsa -out root-ca-key.pem 4096 - Underskriv rodcertifikatet. Behold det som din øjesten: Hvis det går tabt eller kompromitteres, skal tilliden mellem alle værter omkonfigureres.
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 - Opret en administratornøgle:
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 - Opret en anmodning om at underskrive certifikatet:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr - Opret et administratorcertifikat:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem - Opret certifikater til Elasticsearch-noden:
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 - Opret en underskriftsanmodning:
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 - Vi underskriver certifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Vi placerer certifikatet mellem Elasticsearch-noderne i mappen:
/etc/elasticsearch/
Vi skal bruge følgende filer:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Sætte op /etc/elasticsearch/elasticsearch.yml – vi ændrer navnet på filerne med certifikater til dem, vi genererer:
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
Ændring af adgangskoder for interne brugere
- Ved hjælp af kommandoen nedenfor sender vi adgangskoden hash til konsollen:
sh ${OD_SEC}/tools/hash.sh -p [пароль] - Vi ændrer hashen i filen til den modtagne:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Opsætning af en firewall i operativsystemet
- Tillad firewallen at køre:
systemctl enable firewalld - Lad os lancere det:
systemctl start firewalld - Tillad forbindelse til Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Genindlæs firewallreglerne:
firewall-cmd --reload - Vi udleder arbejdsreglerne:
firewall-cmd --list-all
Anvend alle vores ændringer på Elasticsearch
- Opret en variabel med den fulde sti til mappen med plugin'et:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - Vi kører et script, der opdaterer adgangskoder og kontrollerer indstillinger:
${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 - Lad os kontrollere, om ændringerne er blevet anvendt:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Det var det, dette er minimumsindstillingerne, der lukker Elasticsearch fra uautoriserede forbindelser.
Kilde: www.habr.com
