Az Elasticsearch konfigurálása a szivárgások elkerülése érdekében

Az elmúlt évben sok kiszivárogtatás történt adatbázisokból Elasticsearch (itt, itt и itt). Sok esetben személyes adatokat tároltak az adatbázisban. Ezek a szivárgások elkerülhetők lettek volna, ha az adatbázis telepítése után a rendszergazdák néhány egyszerű beállítást ellenőriznek. Ma róluk fogunk beszélni.

Azonnal tegyünk egy fenntartást, hogy gyakorlatunkban az Elasticsearch segítségével tároljuk a naplókat és elemezzük az információbiztonsági eszközök, operációs rendszerek és szoftverek naplóit az IaaS platformon, amely megfelel a 152-FZ, Cloud-152 követelményeinek. 

Az Elasticsearch konfigurálása a szivárgások elkerülése érdekében

Ellenőrizzük, hogy az adatbázis „kiragad-e” az Internetre

A legtöbb ismert szivárgási esetben (itt, itt) a támadó egyszerűen és igénytelenül jutott hozzá az adatokhoz: az adatbázist közzétették az interneten, és hitelesítés nélkül lehetett csatlakozni hozzá.  

Először is foglalkozzunk az internetes publikációval. Miért történik ez? A helyzet az, hogy az Elasticsearch rugalmasabb működéséhez ajánlott hozzon létre egy három kiszolgálóból álló klasztert. Ahhoz, hogy az adatbázisok kommunikálni tudjanak egymással, meg kell nyitni a portokat. Ennek eredményeként az adminisztrátorok semmilyen módon nem korlátozzák az adatbázishoz való hozzáférést, és bárhonnan csatlakozhat az adatbázishoz. Könnyen ellenőrizhető, hogy az adatbázis elérhető-e kívülről. Csak írja be a böngészőbe http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Ha be tudsz jutni, akkor fuss bezárni.

Az adatbázishoz való csatlakozás védelme

Most azt tesszük, hogy hitelesítés nélkül ne lehessen csatlakozni az adatbázishoz.

Az Elasticsearch rendelkezik egy hitelesítési modullal, amely korlátozza az adatbázishoz való hozzáférést, de ez csak a fizetős X-Pack bővítménykészletben érhető el (1 hónap ingyenes használat).

A jó hír az, hogy 2019 őszén az Amazon megnyitotta fejlesztéseit, amelyek átfedik az X-Pack-et. Az adatbázishoz való csatlakozáskor elérhető hitelesítési funkció az Elasticsearch 7.3.2-es verziójához ingyenes licenc alatt vált elérhetővé, az Elasticsearch 7.4.0-s verzióhoz pedig már készül az új kiadás.

Ez a bővítmény könnyen telepíthető. Lépjen a kiszolgálókonzolra, és csatlakoztassa a tárolót:

RPM alapú:

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

yum update

yum install opendistro-security


DEB alapú:

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

A szerverek közötti interakció beállítása SSL-en keresztül

A bővítmény telepítésekor megváltozik az adatbázishoz csatlakozó port konfigurációja. Lehetővé teszi az SSL titkosítást. Ahhoz, hogy a fürtkiszolgálók továbbra is együttműködjenek egymással, be kell állítania a köztük lévő interakciót SSL használatával.

A gazdagépek közötti bizalom saját tanúsító hatósággal vagy anélkül is létrehozható. Az első módszerrel minden világos: csak fel kell vennie a kapcsolatot a CA-szakemberekkel. Menjünk egyenesen a másodikra.

  1. Hozzon létre egy változót a teljes domain névvel:

    export DOMAIN_CN="example.com"

  2. Hozzon létre egy privát kulcsot:

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

  3. Írja alá a gyökértanúsítványt. Tartsa biztonságban: ha elveszik vagy feltörik, az összes gazdagép közötti bizalmat újra kell konfigurálni.

    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. Hozzon létre egy rendszergazdai kulcsot:

    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. Hozzon létre egy kérelmet a tanúsítvány aláírására:

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

  6. Hozzon létre egy rendszergazdai tanúsítványt:

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

  7. Hozzon létre tanúsítványokat az Elasticsearch csomóponthoz:

    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. Hozzon létre egy aláírási kérelmet:

    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. A tanúsítvány aláírása:

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

  10. Helyezze a tanúsítványt az Elasticsearch csomópontok közé a következő mappába:

    /etc/elasticsearch/


    szükségünk van a fájlokra:

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

  11. Konfigurálás /etc/elasticsearch/elasticsearch.yml – módosítsa a tanúsítványokat tartalmazó fájlok nevét az általunk generáltra:

    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

Jelszavak módosítása belső felhasználók számára

  1. Az alábbi paranccsal a jelszókivonatot adjuk ki a konzolra:

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

  2. Módosítsa a fájl hash-ét a fogadottra:

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

Tűzfal beállítása az operációs rendszerben

  1. Engedélyezze a tűzfal elindítását:

    systemctl enable firewalld

  2. Indítsuk el:

    systemctl start firewalld

  3. Csatlakozás engedélyezése az Elasticsearchhoz:

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

  4. Töltsd újra a tűzfalszabályokat:

    firewall-cmd --reload

  5. Íme a munka szabályai:

    firewall-cmd --list-all

Minden változtatásunkat alkalmazzuk az Elasticsearch-re

  1. Hozzon létre egy változót a mappa teljes elérési útjával a bővítménnyel:

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

  2. Futtassunk egy szkriptet, amely frissíti a jelszavakat és ellenőrzi a beállításokat:

    ${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. Ellenőrizze, hogy alkalmazták-e a változtatásokat:

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

Ez minden, ezek a minimális beállítások, amelyek megvédik az Elasticsearch-ot a jogosulatlan kapcsolatoktól.

Forrás: will.com

Hozzászólás