Selama setahun terakhir, ada banyak kebocoran dari database Elasticsearch (di sini , di sana - sini ). Dalam banyak kasus, data pribadi disimpan dalam database. Kebocoran ini dapat dihindari jika, setelah menggunakan basis data, administrator kesulitan untuk memeriksa beberapa pengaturan sederhana. Hari ini kita akan membicarakannya.Kami akan segera membuat reservasi bahwa dalam praktik kami, kami menggunakan Elasticsearch untuk menyimpan log dan menganalisis log alat perlindungan informasi, OS, dan perangkat lunak dalam platform IaaS kami yang memenuhi persyaratan 152-, Cloud-152. 
Periksa apakah database "menempel"
Dalam kebanyakan kasus kebocoran yang diketahui (di sini , di sini ), penyerang memperoleh akses ke data secara sederhana dan sederhana: database diterbitkan di Internet, dan dimungkinkan untuk terhubung dengannya tanpa otentikasi. Pertama, kami akan berurusan dengan penerbitan di Internet. Kenapa begitu? Faktanya adalah bahwa untuk operasi Elasticsearch yang lebih fleksibel, disarankan untuk membuat sekelompok tiga server. Agar database dapat saling berkomunikasi, Anda perlu membuka porta. Akibatnya, administrator tidak membatasi akses ke database, dan Anda dapat terhubung ke database dari mana saja. Memeriksa apakah ada akses eksternal ke basis data itu mudah. Cukup masukkan http: // [IP / Nama Riset Elastik]: 9200 / _cat / node? Di browser ? VJika Anda berhasil masuk, maka jalankan untuk menutup.Kami melindungi koneksi ke database
Sekarang kita akan membuatnya tidak mungkin terhubung ke database tanpa otentikasi.Elasticsearch memiliki modul autentikasi yang membatasi akses ke database, tetapi hanya dalam set plugin X-Pack berbayar (1 bulan penggunaan gratis).Berita baiknya adalah bahwa pada musim gugur 2019, Amazon membuka landasannya yang bersinggungan dengan X-Pack. Fungsi otentikasi ketika menghubungkan ke database telah tersedia di bawah lisensi gratis untuk versi Elasticsearch 7.3.2., Dan rilis baru untuk Elasticsearch 7.4.0 sudah beroperasi.Menginstal plugin ini mudah. Kami masuk ke konsol server dan menghubungkan repositori:Berbasis RPM:curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
Berbasis DEB:wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Kami mengonfigurasi interaksi antara server melalui SSL
Saat memasang plugin, konfigurasi port koneksi database berubah. Ini termasuk enkripsi SSL. Agar server cluster dapat terus bekerja satu sama lain, Anda harus mengonfigurasi interaksi di antara mereka menggunakan SSL.Kepercayaan antara host dapat dibangun dengan atau tanpa otoritas sertifikasi Anda sendiri. Dengan metode pertama, semuanya jelas: Anda hanya perlu menghubungi seorang spesialis di CA. Kami segera melanjutkan ke yang kedua.- Buat variabel dengan nama domain yang sepenuhnya memenuhi syarat:
export DOMAIN_CN="example.com"
- Buat kunci pribadi:
openssl genrsa -out root-ca-key.pem 4096
- Kami menandatangani sertifikat root. Simpan sebagai apel mata Anda: jika hilang atau dikompromikan, kepercayaan antara semua host perlu dikonfigurasi ulang.
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
- Buat kunci admin:
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
- Buat permintaan untuk menandatangani sertifikat:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " \
-key admin-key.pem -out admin.csr
- Buat sertifikat administrator:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem \
-CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Buat sertifikat untuk simpul 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
- Buat permintaan tanda tangan:
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
- Kami menandatangani sertifikat:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial \
-sha256 -out node.pem
- Kami menguraikan sertifikat antara node Elasticsearch ke dalam folder:
/etc/elasticsearch/
kami membutuhkan file:
node-01-key.pem
node-01.pem
admin-key.pem
admin.pem
root-ca.pem
- Siapkan /etc/elasticsearch/elasticsearch.yml - ubah nama file sertifikat menjadi yang dibuat oleh kami:
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
Kami mengubah kata sandi pengguna internal
- Menggunakan perintah di bawah ini, kami menampilkan hash kata sandi di konsol:
sh ${OD_SEC}/tools/hash.sh -p []
- Ubah hash dalam file menjadi yang diterima:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Konfigurasikan firewall di OS
- Izinkan peluncuran firewall:
systemctl enable firewalld
- Menjalankannya:
systemctl start firewalld
- Kami mengizinkan koneksi ke Elasticsearch:
firewall-cmd --set-default-zone work
firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Mulai ulang aturan firewall:
firewall-cmd --reload
- Kami menurunkan aturan kerja:
firewall-cmd --list-all
Terapkan semua perubahan kami ke Elasticsearch
- Buat variabel dengan path lengkap ke folder dengan plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Jalankan skrip yang akan memperbarui kata sandi dan memeriksa pengaturan:
${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
- Periksa apakah perubahan diterapkan:
curl -XGET https://[IP/ Elasticsearch]:9200/_cat/nodes?v -u admin:[] --insecure
Itu saja, ini adalah pengaturan minimum yang memblokir Elasticsearch dari koneksi yang tidak sah.