Hoe om Elasticsearch op te stel om lekkasies te vermy

Die afgelope jaar was daar baie lekkasies uit databasisse Elasticsearch (hier, hier и hier). In baie gevalle is persoonlike data in die databasis gestoor. Hierdie lekkasies kon vermy gewees het as die administrateurs na die ontplooiing van die databasis die moeite gedoen het om 'n paar eenvoudige instellings na te gaan. Vandag sal ons oor hulle praat.

Kom ons maak dadelik 'n bespreking dat ons in ons praktyk Elasticsearch gebruik om logs te stoor en logs van inligtingsekuriteitnutsmiddels, OS en sagteware te ontleed in ons IaaS-platform, wat aan die vereistes van 152-FZ, Cloud-152 voldoen. 

Hoe om Elasticsearch op te stel om lekkasies te vermy

Ons kyk of die databasis "uitsteek" op die internet

In die meeste bekende gevalle van lekkasies (hier, hier) die aanvaller het eenvoudig en pretensieloos toegang tot die data verkry: die databasis is op die internet gepubliseer, en dit was moontlik om sonder verifikasie daaraan te koppel.  

Kom ons gaan eers oor publisering op die internet. Hoekom gebeur dit? Die feit is dat vir meer buigsame werking van Elasticsearch word aanbeveel skep 'n groep van drie bedieners. Om die databasisse met mekaar te laat kommunikeer, moet jy poorte oopmaak. Gevolglik beperk administrateurs op geen manier toegang tot die databasis nie, en jy kan vanaf enige plek aan die databasis koppel. Dit is maklik om te kyk of die databasis van buite toeganklik is. Voer net in die blaaier in http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

As jy kan inklim, hardloop dan om dit toe te maak.

Beskerm die verbinding met die databasis

Nou sal ons dit so maak dat dit onmoontlik is om sonder verifikasie aan die databasis te koppel.

Elasticsearch het 'n verifikasiemodule wat toegang tot die databasis beperk, maar dit is slegs beskikbaar in die betaalde X-Pack-inpropstel (1 maand gratis gebruik).

Die goeie nuus is dat Amazon in die herfs van 2019 sy ontwikkelings geopen het, wat oorvleuel met X-Pack. Die verifikasiefunksie wanneer u aan 'n databasis koppel, het beskikbaar geword onder 'n gratis lisensie vir weergawe Elasticsearch 7.3.2, en 'n nuwe vrystelling vir Elasticsearch 7.4.0 is reeds in die werke.

Hierdie inprop is maklik om te installeer. Gaan na die bedienerkonsole en koppel die bewaarplek:

RPM gebaseer:

curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo

yum update

yum install opendistro-security


DEB gebaseer:

wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -

Stel interaksie tussen bedieners op via SSL

Wanneer die inprop geïnstalleer word, verander die konfigurasie van die poort wat aan die databasis koppel. Dit maak SSL-enkripsie moontlik. Om die groepbedieners te laat voortgaan om met mekaar te werk, moet jy interaksie tussen hulle opstel deur SSL te gebruik.

Vertroue tussen gashere kan gevestig word met of sonder sy eie sertifikaatowerheid. Met die eerste metode is alles duidelik: jy hoef net CA-spesialiste te kontak. Kom ons gaan reguit na die tweede.

  1. Skep 'n veranderlike met die volle domeinnaam:

    export DOMAIN_CN="example.com"

  2. Skep 'n private sleutel:

    openssl genrsa -out root-ca-key.pem 4096

  3. Teken die wortelsertifikaat. Hou dit veilig: as dit verlore gaan of gekompromitteer word, sal die vertroue tussen alle gashere herkonfigureer moet word.

    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

  4. Skep 'n administrateursleutel:

    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

  5. Skep 'n versoek om die sertifikaat te onderteken:

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. Skep 'n administrateursertifikaat:

    openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem 
    -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem

  7. Skep sertifikate vir die Elasticsearch-nodus:

    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

  8. Skep 'n handtekeningversoek:

    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

  9. Ondertekening van die sertifikaat:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial 
    -sha256 -out node.pem

  10. Plaas die sertifikaat tussen Elasticsearch nodusse in die volgende gids:

    /etc/elasticsearch/


    ons benodig die lêers:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem

  11. Konfigureer /etc/elasticsearch/elasticsearch.yml – verander die naam van die lêers met sertifikate na dié wat deur ons gegenereer word:

    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

Verander wagwoorde vir interne gebruikers

  1. Deur die opdrag hieronder te gebruik, voer ons die wagwoordhash na die konsole uit:

    sh ${OD_SEC}/tools/hash.sh -p [пароль]

  2. Verander die hash in die lêer na die ontvang een:

    /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml

Die opstel van 'n firewall in die bedryfstelsel

  1. Laat die firewall toe om te begin:

    systemctl enable firewalld

  2. Kom ons stel dit bekend:

    systemctl start firewalld

  3. Laat verbinding met Elasticsearch toe:

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent

  4. Herlaai die firewall-reëls:

    firewall-cmd --reload

  5. Hier is die werkreëls:

    firewall-cmd --list-all

Pas al ons veranderinge toe op Elasticsearch

  1. Skep 'n veranderlike met die volledige pad na die gids met die inprop:

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"

  2. Kom ons voer 'n skrip uit wat wagwoorde sal opdateer en instellings nagaan:

    ${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

  3. Kyk of die veranderinge toegepas is:

    curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure

Dit is al, dit is die minimum instellings wat Elasticsearch teen ongemagtigde verbindings beskerm.

Bron: will.com

Voeg 'n opmerking