كيفية تكوين Elasticsearch لتجنب التسريبات

خلال العام الماضي، كانت هناك العديد من التسريبات من قواعد البيانات Elasticsearch (هنا, هنا и هنا). وفي كثير من الحالات، تم تخزين البيانات الشخصية في قاعدة البيانات. كان من الممكن تجنب هذه التسريبات لو أن المسؤولين، بعد نشر قاعدة البيانات، اهتموا بالتحقق من بعض الإعدادات البسيطة. اليوم سنتحدث عنهم.

دعونا نحجز على الفور أننا نستخدم Elasticsearch في ممارستنا لتخزين السجلات وتحليل سجلات أدوات أمن المعلومات ونظام التشغيل والبرامج في منصة IaaS الخاصة بنا، والتي تتوافق مع متطلبات 152-FZ وCloud-152. 

كيفية تكوين Elasticsearch لتجنب التسريبات

نتحقق مما إذا كانت قاعدة البيانات "ملتصقة" بالإنترنت

في معظم حالات التسرب المعروفة (هنا, هنا) تمكن المهاجم من الوصول إلى البيانات ببساطة وبساطة: تم نشر قاعدة البيانات على الإنترنت، وكان من الممكن الاتصال بها دون مصادقة.  

أولاً، دعونا نتعامل مع النشر على الإنترنت. لماذا يحدث هذا؟ الحقيقة هي أنه من أجل التشغيل الأكثر مرونة لـ Elasticsearch موصى به إنشاء مجموعة من ثلاثة خوادم. لكي تتواصل قواعد البيانات مع بعضها البعض، تحتاج إلى فتح المنافذ. ونتيجة لذلك، لا يقوم المسؤولون بتقييد الوصول إلى قاعدة البيانات بأي شكل من الأشكال، ويمكنك الاتصال بقاعدة البيانات من أي مكان. من السهل التحقق مما إذا كان يمكن الوصول إلى قاعدة البيانات من الخارج. فقط أدخل في المتصفح http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

إذا تمكنت من الدخول، فاركض لإغلاقه.

حماية الاتصال بقاعدة البيانات

الآن سنفعل ذلك بحيث يكون من المستحيل الاتصال بقاعدة البيانات دون مصادقة.

يحتوي Elasticsearch على وحدة مصادقة تحد من الوصول إلى قاعدة البيانات، ولكنها متاحة فقط في مجموعة المكونات الإضافية X-Pack المدفوعة (استخدام مجاني لمدة شهر واحد).

والخبر السار هو أنه في خريف عام 2019، افتتحت أمازون تطوراتها التي تتداخل مع 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.

يمكن إنشاء الثقة بين المضيفين مع أو بدون المرجع المصدق الخاص به. مع الطريقة الأولى، كل شيء واضح: ما عليك سوى الاتصال بمتخصصي CA. دعنا ننتقل مباشرة إلى الثانية.

  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

إضافة تعليق