Πώς να ρυθμίσετε το Elasticsearch για να αποφύγετε διαρροές

Τον τελευταίο χρόνο, υπήρξαν πολλές διαρροές από βάσεις δεδομένων Ελαστική αναζήτηση (εδώ, εδώ и εδώ). Σε πολλές περιπτώσεις, τα προσωπικά δεδομένα αποθηκεύτηκαν στη βάση δεδομένων. Αυτές οι διαρροές θα μπορούσαν να είχαν αποφευχθεί εάν, μετά την ανάπτυξη της βάσης δεδομένων, οι διαχειριστές είχαν κάνει τον κόπο να ελέγξουν μερικές απλές ρυθμίσεις. Σήμερα θα μιλήσουμε για αυτούς.

Ας κάνουμε αμέσως κράτηση ότι στην πρακτική μας χρησιμοποιούμε το Elasticsearch για την αποθήκευση αρχείων καταγραφής και την ανάλυση αρχείων καταγραφής εργαλείων ασφάλειας πληροφοριών, λειτουργικού συστήματος και λογισμικού στην πλατφόρμα μας IaaS, η οποία συμμορφώνεται με τις απαιτήσεις του 152-FZ, Cloud-152. 

Πώς να ρυθμίσετε το Elasticsearch για να αποφύγετε διαρροές

Ελέγχουμε αν η βάση δεδομένων «κολλάει» στο Διαδίκτυο

Στις περισσότερες γνωστές περιπτώσεις διαρροών (εδώ, εδώ) ο εισβολέας απέκτησε πρόσβαση στα δεδομένα απλά και ανεπιτήδευτα: η βάση δεδομένων δημοσιεύτηκε στο Διαδίκτυο και ήταν δυνατή η σύνδεση σε αυτήν χωρίς έλεγχο ταυτότητας.  

Αρχικά, ας ασχοληθούμε με τη δημοσίευση στο Διαδίκτυο. Γιατί συμβαίνει αυτό; Γεγονός είναι ότι για πιο ευέλικτη λειτουργία του Elasticsearch συνιστάται δημιουργήστε ένα σύμπλεγμα τριών διακομιστών. Για να επικοινωνούν οι βάσεις δεδομένων μεταξύ τους, πρέπει να ανοίξετε θύρες. Ως αποτέλεσμα, οι διαχειριστές δεν περιορίζουν την πρόσβαση στη βάση δεδομένων με κανέναν τρόπο και μπορείτε να συνδεθείτε στη βάση δεδομένων από οπουδήποτε. Είναι εύκολο να ελέγξετε εάν η βάση δεδομένων είναι προσβάσιμη από έξω. Απλώς εισάγετε στο πρόγραμμα περιήγησης http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Αν μπορείτε να μπείτε, τότε τρέξτε να το κλείσετε.

Προστασία της σύνδεσης με τη βάση δεδομένων

Τώρα θα το κάνουμε έτσι ώστε να είναι αδύνατη η σύνδεση στη βάση δεδομένων χωρίς έλεγχο ταυτότητας.

Το Elasticsearch διαθέτει μια μονάδα ελέγχου ταυτότητας που περιορίζει την πρόσβαση στη βάση δεδομένων, αλλά είναι διαθέσιμη μόνο στο σετ πρόσθετων X-Pack επί πληρωμή (δωρεάν χρήση 1 μήνα).

Τα καλά νέα είναι ότι το φθινόπωρο του 2019, η Amazon άνοιξε τις εξελίξεις της, οι οποίες επικαλύπτονται με το X-Pack. Η λειτουργία ελέγχου ταυτότητας κατά τη σύνδεση σε μια βάση δεδομένων έχει γίνει διαθέσιμη με δωρεάν άδεια για την έκδοση Elasticsearch 7.3.2 και μια νέα έκδοση για το Elasticsearch 7.4.0 είναι ήδη στα σκαριά.

Αυτό το πρόσθετο είναι εύκολο στην εγκατάσταση. Μεταβείτε στην κονσόλα διακομιστή και συνδέστε το αποθετήριο:

Βάσει στροφών ανά λεπτό:

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

yum update

yum install opendistro-security


Βάσει DEB:

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

Ρύθμιση αλληλεπίδρασης μεταξύ διακομιστών μέσω SSL

Κατά την εγκατάσταση του πρόσθετου, αλλάζει η διαμόρφωση της θύρας που συνδέεται με τη βάση δεδομένων. Επιτρέπει την κρυπτογράφηση SSL. Προκειμένου οι διακομιστές συμπλέγματος να συνεχίσουν να συνεργάζονται μεταξύ τους, πρέπει να διαμορφώσετε την αλληλεπίδραση μεταξύ τους χρησιμοποιώντας SSL.

Η εμπιστοσύνη μεταξύ των κεντρικών υπολογιστών μπορεί να δημιουργηθεί με ή χωρίς τη δική της αρχή έκδοσης πιστοποιητικών. Με την πρώτη μέθοδο, όλα είναι ξεκάθαρα: απλά πρέπει να επικοινωνήσετε με τους ειδικούς της ΑΠ. Ας περάσουμε κατευθείαν στο δεύτερο.

  1. Δημιουργήστε μια μεταβλητή με το πλήρες όνομα τομέα:

    export DOMAIN_CN="example.com"

  2. Δημιουργήστε ένα ιδιωτικό κλειδί:

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

  3. Υπογράψτε το πιστοποιητικό ρίζας. Διατηρήστε το ασφαλές: εάν χαθεί ή παραβιαστεί, η εμπιστοσύνη μεταξύ όλων των κεντρικών υπολογιστών θα πρέπει να διαμορφωθεί εκ νέου.

    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. Δημιουργήστε ένα κλειδί διαχειριστή:

    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. Δημιουργήστε ένα αίτημα για υπογραφή του πιστοποιητικού:

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

  6. Δημιουργήστε ένα πιστοποιητικό διαχειριστή:

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

  7. Δημιουργήστε πιστοποιητικά για τον κόμβο 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

  8. Δημιουργήστε ένα αίτημα υπογραφής:

    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. Υπογραφή πιστοποιητικού:

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

  10. Τοποθετήστε το πιστοποιητικό μεταξύ κόμβων Elasticsearch στον ακόλουθο φάκελο:

    /etc/elasticsearch/


    χρειαζόμαστε τα αρχεία:

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

  11. Εγκαθιστώ /etc/elasticsearch/elasticsearch.yml – αλλάξτε το όνομα των αρχείων με πιστοποιητικά σε αυτά που δημιουργούνται από εμάς:

    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

Αλλαγή κωδικών πρόσβασης για εσωτερικούς χρήστες

  1. Χρησιμοποιώντας την παρακάτω εντολή, εξάγουμε τον κατακερματισμό του κωδικού πρόσβασης στην κονσόλα:

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

  2. Αλλάξτε τον κατακερματισμό στο αρχείο στο ληφθέν:

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

Ρύθμιση τείχους προστασίας στο λειτουργικό σύστημα

  1. Αφήστε το τείχος προστασίας να ξεκινήσει:

    systemctl enable firewalld

  2. Ας το λανσάρουμε:

    systemctl start firewalld

  3. Να επιτρέπεται η σύνδεση στο Elasticsearch:

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

  4. Φορτώστε ξανά τους κανόνες του τείχους προστασίας:

    firewall-cmd --reload

  5. Εδώ είναι οι κανόνες εργασίας:

    firewall-cmd --list-all

Εφαρμογή όλων των αλλαγών μας στο Elasticsearch

  1. Δημιουργήστε μια μεταβλητή με την πλήρη διαδρομή προς το φάκελο με την προσθήκη:

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

  2. Ας εκτελέσουμε ένα σενάριο που θα ενημερώνει τους κωδικούς πρόσβασης και θα ελέγχει τις ρυθμίσεις:

    ${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. Ελέγξτε αν έχουν εφαρμοστεί οι αλλαγές:

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

Αυτό είναι όλο, αυτές είναι οι ελάχιστες ρυθμίσεις που προστατεύουν το Elasticsearch από μη εξουσιοδοτημένες συνδέσεις.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο