Det siste året har det vært mange lekkasjer fra databaser (, и ). I mange tilfeller ble personopplysninger lagret i databasen. Disse lekkasjene kunne vært unngått hvis administratorene etter å ha distribuert databasen hadde brydd seg med å sjekke noen enkle innstillinger. I dag skal vi snakke om dem.
La oss umiddelbart ta forbehold om at vi i vår praksis bruker Elasticsearch til å lagre logger og analysere logger over informasjonssikkerhetsverktøy, OS og programvare i vår IaaS-plattform, som oppfyller kravene i 152-FZ, Cloud-152.

Vi sjekker om databasen "stikker ut" til Internett
I de fleste kjente tilfeller av lekkasjer (, ) angriperen fikk tilgang til dataene enkelt og upretensiøst: databasen ble publisert på Internett, og det var mulig å koble til den uten autentisering.
La oss først ta for oss publisering på Internett. Hvorfor skjer dette? Faktum er at for mer fleksibel drift av Elasticsearch opprette en klynge med tre servere. For at databasene skal kommunisere med hverandre, må du åpne porter. Som et resultat begrenser ikke administratorer tilgangen til databasen på noen måte, og du kan koble til databasen fra hvor som helst. Det er enkelt å sjekke om databasen er tilgjengelig utenfra. Bare skriv inn i nettleseren http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v
Hvis du kan komme inn, så løp for å lukke den.
Beskytter tilkoblingen til databasen
Nå skal vi gjøre det slik at det er umulig å koble til databasen uten autentisering.
Elasticsearch har en autentiseringsmodul som begrenser tilgangen til databasen, men den er kun tilgjengelig i det betalte X-Pack-pluginsettet (1 måned gratis bruk).
Den gode nyheten er at høsten 2019 åpnet Amazon sine utviklinger, som overlapper med X-Pack. Autentiseringsfunksjonen ved tilkobling til en database har blitt tilgjengelig under en gratis lisens for versjon Elasticsearch 7.3.2, og en ny utgivelse for Elasticsearch 7.4.0 er allerede i arbeid.
Denne plugin er enkel å installere. Gå til serverkonsollen og koble til depotet:
RPM-basert:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB-basert:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -Sette opp interaksjon mellom servere via SSL
Når du installerer plugin, endres konfigurasjonen av porten som kobles til databasen. Den muliggjør SSL-kryptering. For at klyngeserverne skal fortsette å jobbe med hverandre, må du konfigurere interaksjon mellom dem ved hjelp av SSL.
Tillit mellom verter kan etableres med eller uten egen sertifiseringsinstans. Med den første metoden er alt klart: du trenger bare å kontakte CA-spesialister. La oss gå rett til den andre.
- Opprett en variabel med hele domenenavnet:
export DOMAIN_CN="example.com" - Opprett en privat nøkkel:
openssl genrsa -out root-ca-key.pem 4096 - Signer rotsertifikatet. Hold det trygt: hvis det går tapt eller kompromittert, må tilliten mellom alle verter rekonfigureres.
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 - Opprett en administratornøkkel:
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 - Opprett en forespørsel om å signere sertifikatet:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr - Opprett et administratorsertifikat:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem - Opprett sertifikater for 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 - Opprett en signaturforespørsel:
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 - Signering av sertifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Plasser sertifikatet mellom Elasticsearch-noder i følgende mappe:
/etc/elasticsearch/
vi trenger filene:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Konfigurerer /etc/elasticsearch/elasticsearch.yml – endre navnet på filene med sertifikater til de som er generert av oss:
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
Endring av passord for interne brukere
- Ved å bruke kommandoen nedenfor sender vi ut passordhashen til konsollen:
sh ${OD_SEC}/tools/hash.sh -p [пароль] - Endre hashen i filen til den mottatte:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Sette opp en brannmur i operativsystemet
- La brannmuren starte:
systemctl enable firewalld - La oss lansere det:
systemctl start firewalld - Tillat tilkobling til Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Last inn brannmurreglene på nytt:
firewall-cmd --reload - Her er arbeidsreglene:
firewall-cmd --list-all
Bruker alle endringene våre på Elasticsearch
- Lag en variabel med hele banen til mappen med plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - La oss kjøre et skript som vil oppdatere passord og sjekke innstillinger:
${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 - Sjekk om endringene er tatt i bruk:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Det er alt, dette er minimumsinnstillingene som beskytter Elasticsearch mot uautoriserte tilkoblinger.
Kilde: www.habr.com
