اتصال SSH أكثر أمانًا مع DNSSEC


يعرف كل من يستخدم SSH أنه في المرة الأولى التي يتصل فيها بالخادم ، تظهر رسالة تؤكد بصمة المفتاح. علاوة على ذلك ، يتم تخزين المفتاح على جانب العميل ، ولا يتم عرض هذه الرسالة مرة أخرى حتى يتم تغيير المفتاح المحفوظ. ولكن ما هو المعنى العملي لهذا الإجراء؟

في الواقع ، لا أحد تقريبًا يتحقق من بصمة مفتاح SSH الخاص بالخادم دون التفكير حقًا في إمكانية هجمات MiTM. مع ظهور سجل DNS SSHFP ، يمكن تخزين بصمة مفتاح الخادم في DNS ومصادقتها باستخدام DNSSEC. في هذه الحالة ، لا تحتاج حتى إلى تأكيد المفتاح عند الاتصال الأول. ستوضح لك هذه المقالة كيفية تكوين سجل SSHFP لخادم SSH.

خادم الاختبار


أولاً ، نحتاج إلى خادم ، في لوحة RuVDS ، توجد تفاصيل وصول SSH مباشرة على بطاقة الخادم. نحفظ عنوان IP وكلمة المرور للاتصال.



يمكنك أيضًا تكوين جدار الحماية مباشرة من لوحة التحكم للسماح بوصول SSH فقط لعنوان IP الخاص بك.

لتهيئة SSHFP ، يجب توجيه النطاق إلى عنوان IP الخاص بالخادم ؛ سنقوم بتكوين سجلات DNS لهذا المجال.

كيف تعمل المفاتيح في SSH


في الأمثلة ، سننظر فقط في حزمة OpenSSH ، لأن هذا هو الخيار الأكثر شيوعًا.

عند تثبيت خادم جديد ، يتم إنشاء مفاتيح SSH عشوائية ، وعادة ما يحدث هذا على الفور عند تثبيت حزمة OpenSSH أو أثناء التمهيد الأول إذا تم استخدام صور النظام الجاهزة.

توجد الملفات الرئيسية هنا:

$ ls -la /etc/ssh/ssh_host_*_key*

/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub

توجد في هذه القائمة عدة مفاتيح من أنواع مختلفة في وقت واحد: dsa ، rsa ، ecdsa ، ed25519. يتم ذلك من أجل التوافق مع عملاء SSH المختلفين. في مرحلة الاتصال ، يوافق العميل والخادم على الخوارزمية الأساسية التي سيتم استخدامها. قد يطلب العميل من الخادم استخدام خوارزمية مختلفة إذا لم تكن الخوارزمية المقترحة مدعومة. يرسل الخادم الجزء العام من مفتاحه إلى العميل ويطلب من المستخدم التحقق من بصمة إصبعه يدويًا.


يرسل الخادم بصمة المفتاح العام إلى العميل في وقت الاتصال.

إذا كان هذا هو الاتصال الأول ، فسيتم عرض رسالة للعميل مع طلب التحقق من بصمة الإصبع يدويًا:

The authenticity of host 'example.com (123.45.67.89)' can't be established.
ECDSA key fingerprint is SHA256:7Q4nIqjuo/lSXWFkt9RaJYVHrT6LUAc6KWrdQ4/DDeA.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

في هذه المرحلة ، ننقر جميعًا عادةً على "نعم" بدون تردد ويتم حفظ بصمة المفتاح في ملف ~/.ssh/known_hosts. الآن ، إذا تغير المفتاح على الخادم ، فسيظهر للعميل رسالة حول هجوم MiTM محتمل. من المفترض أنه للمرة الأولى ، قام العميل بإجراء فحص رئيسي بمفرده وتأكد من أصالته.

هذا النهج محفوف بالمخاطر تمامًا ، لأنه إذا تمكن المهاجم من اغتنام لحظة الاتصال الأول ، فيمكنه تمرير مفتاحه واعتراض الاتصال. في حالة c HTTPS ، لدينا طرف ثالث يؤكد مفتاح الخادم بشهادة. إذا تم استخدام نفس النهج المتبع في SSH على الويب ، فسوف نتعرض للتعذيب باستمرار من خلال رسائل التحقق الرئيسية وكانت هجمات MiTM في كل مكان ، لأنه لن يقوم أحد بالتحقق من المفاتيح ، ولكن ببساطة سيوافق دائمًا.

نقوم بتخزين طباعة مفتاح في DNS. ما هي إدخالات SSHFP


كيف تكتشف أن مفتاح SSH الذي اقترحه الخادم حقيقي حقًا وليس هذا هجوم MiTM؟ في الواقع ، من أجل إدخال الخادم والتحقق من المفتاح ، يجب عليك أولاً إدخال كلمة المرور. ولكن بعد ذلك سيتمكن المهاجم من اختراق الخادم على الفور واستبدال جميع البيانات الموجودة عليه ، لدرجة أننا لن نلاحظ المصيد. لذلك ، نحتاج إلى طريقة للتحقق من صحة المفتاح قبل الاتصال الحقيقي.

لفترة طويلة ، كانت الطريقة الوحيدة للتحقق من مفتاح SSH الخاص بالخادم قبل الاتصال هي استخدام قناة مختلفة ، على سبيل المثال ، اطلب من مسؤول الخادم توفير بصمة مفتاح الخادم. هذا غير مريح ، لذلك من الأسهل تجاهل المشكلة والاتفاق دائمًا دون تردد.


يسمح SSHFP بمصادقة مفتاح الخادم قبل الاتصال عبر SSHFP DNS

- نوع سجلات DNS لتخزين مفاتيح SSH. يتم وضع بصمة مفتاح SSH في خادم DNS مثل سجل TXT وتوقيعه باستخدام مفتاح DNSSEC. أي أنه في المرة الأولى التي تتصل فيها بالخادم باستخدام اسم المضيف ، سيكون العميل قادرًا على معرفة بصمة مفتاح الخادم من خلال DNS مقدمًا ، وإذا كان يتطابق مع الخادم المقترح ، فقم بالاتصال بدون تحذير .

تكوين DNSSEC


لاستخدام SSHFP ، تحتاج إلى اسم مجال تم تكوين DNSSEC عليه. هناك العديد من خدمات DNS العامة التي تقدم لوحة تحكم DNS على الفور مع وظيفة DNSSEC. الخدمة الأكثر شعبية هي CloudFlare. النظر في التكوين باستخدام مثاله. بالنسبة إلى الخطوات التالية ، يجب تفويض النطاق إلى خادم Cloudflare NS.

الخطوة 1 - إنشاء مفتاح


انتقل إلى لوحة DNS -> تمكين DNSSEC.

في هذه المرحلة ، سيتم إنشاء مفاتيح لتسجيل منطقة المجال الخاص بك. ستظهر لك المفاتيح العامة. ستحتاج إلى إضافتها على جانب مسجل النطاق.

الخطوة 2 - إضافة مفاتيح عامة إلى المسجل


بعد ذلك ، تحتاج إلى إنشاء سجلات DS تحتوي على المفتاح العام من مسجل النطاق.
اعتمادًا على المسجل الخاص بك ، قد تبدو واجهة إضافة المفاتيح DNSSEC مختلفة. من المهم عدم الخلط بين القيم ، حيث يمكن تسميتها بشكل مختلف وتختلف عن الأسماء الموضحة في CloudFlare.

يوضح المثال أدناه كيفية ارتباط القيم الموضحة في لوحة CloudFlare بالقيم الموجودة في لوحة تحكم المجال الخاصة بمسجل Uniregistry.



الخطوة 3 - التحقق من سجلات DS المضافة


بعد إضافة سجلات DS على جانب المسجل ، يمكنك التحقق من صحة الإعدادات. على الجانب CloudFlare ، سيتم تنشيط توقيع سجلات DNS فقط عندما يتم تمرير التحقق من صحة إضافة سجلات DS على جانب المسجل.


في انتظار إضافة سجلات DS

بعد بضع دقائق أو ساعات ، إذا تمت إضافة السجلات بشكل صحيح ، سترى مثل هذه الرسالة. وهذا يعني أن استجابات DNS موقعة الآن باستخدام DNSSEC.



الخطوة 4 - التحقق من تشغيل DNSSEC


يمكنك الآن اختبار تشغيل DNSSEC على نطاقنا باستخدام الخدمات عبر الإنترنت مثل dnssec-analyzer.verisignlabs.com . يجب أن تكون جميع علامات الاختيار خضراء.


نتيجة التحقق من DNSSEC

إضافة إدخالات SSHFP


سنقوم بإنشاء سجلات SSHFP على الخادم. في مثالنا ، نقوم بإدارة خادم بعنوان myserver.com . بالنسبة لاسم النطاق هذا ، قمنا بتهيئة DNSSEC مسبقًا.

على الخادم ، نفّذ الأمر:

#   SSHFP   SSH-
sudo ssh-keygen -r myserver.com

myserver.com IN SSHFP 1 1 057ecce168ace29d5a0099e3b63df2850e4c8e20
myserver.com IN SSHFP 1 2 52cd6099a304b9b8f57f2cd914e96a1b7477eb2f88c98c602
myserver.com IN SSHFP 2 1 42d677482e4450ee515d3aac94d96302a99bd4ec
myserver.com IN SSHFP 2 2 edda5fa445dc0da570c772a6df0d4012037e1a102840d29c4
...

سيتم إنشاء بصمات الأصابع لجميع المفاتيح من المجلد / etc / ssh / . يمكنك إنشاء بصمات الأصابع بشكل انتقائي لمفاتيح محددة عن طريق تحديد مسار الملف.

الآن يجب إضافة جميع هذه السجلات في لوحة DNS ، في حالتنا Cloudflare.


إضافة سجل SSHFP إلى لوحة Cloudflare

لذلك ، تحتاج إلى إضافة جميع المفاتيح التي تم الحصول عليها في الخطوة السابقة. يمكنك الآن التحقق من إضافة المفاتيح:

dig SSHFP myserver.com

في الجواب يجب أن ترى كل المفاتيح المضافة. قد يستغرق توقيع الإدخالات الجديدة بعض الوقت ، لذلك قد لا تظهر المفاتيح في الاستجابة على الفور. هذا لا يستغرق عادة أكثر من 10-15 دقيقة.

اتصل بالخادم


لكي يتحقق عميل SSH من صحة المفاتيح من خلال DNS ، يلزمك إضافة تمكين هذا في الإعدادات. يوجد تكوين العميل في المجلد الرئيسي للمستخدم. أضف سطر واحد هناك.

#  
vi ~/.ssh/config

VerifyHostKeyDNS yes

الآن يمكنك الاتصال بالخادم. من أجل نقاء التجربة ، يمكنك إزالة الخط ببصمة الإصبع من ~ / .ssh / known_hosts . للتوضيح ، يمكنك إضافة الخيار -v

#   
ssh -v root@myserver.com


# DNS  ,  SSHFP 
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
.....
DNS lookup error: data does not exist

# DNS  ,   
#    DNSSEC
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
....
debug1: found 8 insecure fingerprints in DNS
debug1: matching host key fingerprint found in DNS


# DNS  ,    DNSSEC
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
....
debug1: found 8 secure fingerprints in DNS
debug1: matching host key fingerprint found in DNS
debug1: ssh_rsa_verify: signature correct

إذا تم تكوين كل شيء بشكل صحيح ، ففي المرة الأولى التي تتصل فيها بالخادم ، لن يُطلب منك التحقق يدويًا من بصمة المفتاح. يتطلب ذلك أيضًا محلل DNS للنظام لدعم التحقق من صحة DNSSEC.

من المهم أن تتذكر أن SSHFP لن يعمل إلا عند الاتصال بخادم عن طريق اسم النطاق ولن يعمل عند الاتصال بواسطة IP أو مجال آخر ليس لديه سجلات SSHFP.


All Articles