Az utolsó évben sok adatlopás történt az adatbázisokból (, és ). Sok esetben az adatbázisokban személyes adatok voltak. Ezek az adatlopások elkerülhetőek lettek volna, ha az adatbázis telepítése után az adminisztrátorok figyeltek volna néhány egyszerű beállításra. Ma ezekről fogunk beszélni.
Előre bocsátjuk, hogy gyakorlatunkban az Elasticsearch-t a naplók tárolására és az információvédelmi eszközök, az operációs rendszerek és a szoftverek naplóinak elemzésére használjuk az IaaS-platformunkon, amely megfelel a 152-ФЗ előírásainak, Cloud-152.

Ellenőrizzük, hogy „nincs-e kint” az adatbázis az interneten
A legtöbb ismert adatlopási esetben (, ) a támadó egyszerűen hozzáfért az adatokhoz: az adatbázis publikálva volt az interneten, és hitelesítés nélkül csatlakozható volt.
Először nézzük meg az internetes publikálást. Miért történik ez? Azért, mert az Elasticsearch rugalmasabb működése érdekében három szerverből álló klasztereket létrehozni. Ahhoz, hogy az adatbázisok kommunikálni tudjanak egymással, portokat kell megnyitni. Így az adminisztrátorok nem korlátozzák a hozzáférést az adatbázishoz, és az adatbázisokhoz bárhonnan csatlakozni lehet. Könnyen ellenőrizhetjük, hogy van-e hozzáférés az adatbázishoz kívülről. Egyszerűen csak beírjuk a böngészőbe http://[IP/Elasticsearch név]:9200/_cat/nodes?v
Ha sikerül belépni, akkor gyorsan zárjuk le.
Védjük az adatbázishoz való kapcsolódást
Most olyan beállítást csinálunk, hogy az adatbázishoz ne lehessen csatlakozni hitelesítés nélkül.
Az Elasticsearch rendelkezik egy hitelesítési modullal, amely korlátozza az adatbázishoz való hozzáférést, de ez csak a X-Pack fizetős bővítménycsomagban található (1 hónap ingyenes használat).
A jó hír az, hogy 2019 őszén az Amazon megnyitotta az X-Pack-kel kapcsolatos fejlesztéseit. A hitelesítési funkció elérhetővé vált szabad licenc alatt az Elasticsearch 7.3.2 verzióhoz, és már folyamatban van az új kiadás az Elasticsearch 7.4.0-hoz.
Ez a bővítmény egyszerűen telepíthető. Belépünk a szerver konzoljába, és csatlakoztatjuk 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 -Az SSL-en keresztüli szerverek közötti kapcsolatot állítjuk be
A bővítmény telepítésekor megváltozik az adatbázis kapcsolati portjának konfigurációja. Ezen aktiválódik az SSL titkosítás. Annak érdekében, hogy a klaszter szerverei továbbra is tudjanak együtt működni, be kell állítani a köztük lévő interakciót SSL segítségével.
A hostok közötti bizalmat létrehozhatjuk saját tanúsítványkibocsátó központ (CA) használatával, vagy anélkül. Az első módszer egyértelmű: csak szakértőkhöz kell fordulni a CA ügyében. Térjünk át egyből a másodikra.
- Hozzuk létre a teljes domain névhez tartozó változót:
export DOMAIN_CN="example.com" - Hozzuk létre a privát kulcsot:
openssl genrsa -out root-ca-key.pem 4096 - Írjuk alá a gyökér tanúsítványt. Őrizzük meg, mint a szemben a szemet: ha elveszik vagy kompromittálódik, a bizalmat az összes hoszt között újra be kell állítani.
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 - Hozzuk létre az adminisztrátor 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 - Hozzunk létre egy tanúsítvány aláírási kérést:
openssl req -new -subj "\/C=RU\/ST=Moscow\/O=Moscow Inc.\/CN=${DOMAIN_CN}\/CN=admin " -key admin-key.pem -out admin.csr - Hozzuk létre az adminisztrátor 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 - Hozzunk létre tanúsítványokat az Elasticsearch csomópont számára:
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 - Hozzunk 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 - Írjuk alá a tanúsítványt:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Helyezzük el a tanúsítványokat az Elasticsearch csomópontok között a következő mappába:
/etc/elasticsearch/
Szükségünk lesz a következő fájlokra:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Beállítjuk /etc/elasticsearch/elasticsearch.yml – átnevezzük a tanúsítványokkal kapcsolatos fájlokat az általunk generált nevekre:
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
Belső felhasználók jelszavait cseréljük
- Az alábbi parancs segítségével kiírjuk a jelszó hash-ét a konzolra:
sh ${OD_SEC}/tools/hash.sh -p [jelszó] - Kicseréljük a hash-t a fájlban a kapott értékre:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Tűzfal beállítása az operációs rendszerben
- Engedélyezzük a tűzfal indítását:
systemctl enable firewalld - Elindítjuk:
systemctl start firewalld - Elérhetőség engedélyezése az Elasticsearch-hez:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Újraindítjuk a tűzfalszabályokat:
firewall-cmd --reload - Megjelenítjük a működő szabályokat:
firewall-cmd --list-all
Alkalmazzuk az összes módosítást az Elasticsearch-ra
- Létrehozunk egy változót a plugin mappájának teljes elérési útjával:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - Futtatjuk a scriptet, 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 - Ellenőrizzük, hogy a módosítások életbe léptek-e:
curl -XGET https://[IP/Elasticsearch név]:9200/_cat/nodes?v -u admin:[jelszó] --insecure
Ezek a minimális beállítások, amelyek megakadályozzák az Elasticsearch nem engedélyezett csatlakozását.
Forrás: habr.com
