إصدار OpenSSH 8.2 مع دعم رموز المصادقة الثنائية FIDO/U2F

بعد أربعة أشهر من التطوير المقدمة الإفراج عن OpenSSH 8.2، تطبيق مفتوح للعميل والخادم للعمل عبر بروتوكولي SSH 2.0 وSFTP.

كان التحسين الرئيسي في إصدار OpenSSH 8.2 هو القدرة على استخدام المصادقة الثنائية باستخدام الأجهزة التي تدعم البروتوكول U2F، التي طورها التحالف FIDO. يسمح U2F بإنشاء رموز الأجهزة منخفضة التكلفة للتحقق من التواجد الفعلي للمستخدم، والتفاعل معها عبر USB أو Bluetooth أو NFC. يتم الترويج لمثل هذه الأجهزة كوسيلة للمصادقة الثنائية على مواقع الويب، وهي مدعومة بالفعل من قبل المتصفحات الرئيسية ويتم إنتاجها من قبل العديد من الشركات المصنعة، بما في ذلك Yubico وFeitian وThetis وKensington.

للتفاعل مع الأجهزة التي تؤكد وجود المستخدم، تمت إضافة أنواع مفاتيح جديدة "ecdsa-sk" و"ed25519-sk" إلى OpenSSH، والتي تستخدم خوارزميات التوقيع الرقمي ECDSA وEd25519، جنبًا إلى جنب مع تجزئة SHA-256. يتم وضع إجراءات التفاعل مع الرموز المميزة في مكتبة وسيطة، والتي يتم تحميلها بطريقة مشابهة للمكتبة لدعم PKCS#11 وتكون عبارة عن غلاف أعلى المكتبة libfido2، والذي يوفر أدوات للتواصل مع الرموز المميزة عبر USB (يتم دعم بروتوكولات FIDO U2F/CTAP 1 وFIDO 2.0/CTAP 2). المكتبة الوسيطة libsk-libfido2 التي أعدها مطورو OpenSSH يتم تضمين في قلب libfido2، كذلك اختبأ سائق لبرنامج OpenBSD.

للمصادقة وإنشاء مفتاح، يجب عليك تحديد معلمة "SecurityKeyProvider" في الإعدادات أو تعيين متغير البيئة SSH_SK_PROVIDER، مع الإشارة إلى المسار إلى المكتبة الخارجية libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2. لذا). من الممكن إنشاء opensh مع دعم مدمج لمكتبة الطبقات (--with-security-key-builtin)، وفي هذه الحالة تحتاج إلى تعيين المعلمة "SecurityKeyProvider=internal".
بعد ذلك، تحتاج إلى تشغيل "ssh-keygen -t ecdsa-sk" أو، إذا تم إنشاء المفاتيح وتكوينها بالفعل، فاتصل بالخادم باستخدام "ssh". عند تشغيل ssh-keygen، سيتم حفظ زوج المفاتيح الذي تم إنشاؤه في "~/.ssh/id_ecdsa_sk" ويمكن استخدامه بشكل مشابه للمفاتيح الأخرى.

يجب نسخ المفتاح العام (id_ecdsa_sk.pub) إلى الخادم في ملف Author_keys. من جانب الخادم، يتم التحقق من التوقيع الرقمي فقط، ويتم التفاعل مع الرموز المميزة من جانب العميل (لا تحتاج إلى تثبيت libsk-libfido2 على الخادم، ولكن يجب أن يدعم الخادم نوع المفتاح "ecdsa-sk"). . المفتاح الخاص الذي تم إنشاؤه (id_ecdsa_sk) هو في الأساس مقبض مفتاح، ويشكل مفتاحًا حقيقيًا فقط مع التسلسل السري المخزن على جانب الرمز المميز U2F. إذا وقع مفتاح id_ecdsa_sk في أيدي أحد المهاجمين، فسيحتاج أيضًا لتمرير المصادقة إلى الوصول إلى رمز الجهاز، والذي بدونه يصبح المفتاح الخاص المخزن في ملف id_ecdsa_sk عديم الفائدة.

بالإضافة إلى ذلك، بشكل افتراضي، عند إجراء أي عمليات باستخدام المفاتيح (سواء أثناء الإنشاء أو أثناء المصادقة)، يلزم التأكيد المحلي للوجود الفعلي للمستخدم، على سبيل المثال، يُقترح لمس المستشعر الموجود على الرمز المميز، مما يجعل من الصعب تنفيذ هجمات عن بعد على الأنظمة ذات الرمز المميز المتصل. كخط دفاع آخر، يمكن أيضًا تحديد كلمة مرور أثناء مرحلة بدء تشغيل ssh-keygen للوصول إلى ملف المفتاح.

أعلن الإصدار الجديد من OpenSSH أيضًا عن الإيقاف القادم للخوارزميات التي تستخدم تجزئة SHA-1 بسبب ترقية فعالية هجمات الاصطدام ببادئة معينة (تقدر تكلفة اختيار الاصطدام بحوالي 45 ألف دولار). في أحد الإصدارات القادمة، يخططون لتعطيل القدرة على استخدام خوارزمية التوقيع الرقمي للمفتاح العام “ssh-rsa” افتراضيًا، والتي تم ذكرها في RFC الأصلي لبروتوكول SSH وما زالت منتشرة على نطاق واسع في الممارسة العملية (لاختبار الاستخدام من ssh-rsa في أنظمتك، يمكنك محاولة الاتصال عبر ssh باستخدام الخيار "-oHostKeyAlgorithms=-ssh-rsa").

لتسهيل الانتقال إلى خوارزميات جديدة في OpenSSH، سيتم تمكين إعداد UpdateHostKeys في إصدار مستقبلي افتراضيًا، مما سيؤدي تلقائيًا إلى ترحيل العملاء إلى خوارزميات أكثر موثوقية. تتضمن الخوارزميات الموصى بها للترحيل rsa-sha2-256/512 استنادًا إلى RFC8332 RSA SHA-2 (مدعوم منذ OpenSSH 7.2 ويتم استخدامه افتراضيًا)، وssh-ed25519 (مدعوم منذ OpenSSH 6.5)، وecdsa-sha2-nistp256/384/521 المستند إلى على RFC5656 ECDSA (مدعوم منذ OpenSSH 5.7).

في OpenSSH 8.2، لا تزال القدرة على الاتصال باستخدام "ssh-rsa" متاحة، ولكن تمت إزالة هذه الخوارزمية من قائمة CASignatureAlgorithms، التي تحدد الخوارزميات المسموح بها للتوقيع الرقمي على الشهادات الجديدة. وبالمثل، تمت إزالة خوارزمية diffie-hellman-group14-sha1 من خوارزميات تبادل المفاتيح الافتراضية المدعومة. تجدر الإشارة إلى أن استخدام SHA-1 في الشهادات يرتبط بمخاطر إضافية، حيث أن المهاجم لديه وقت غير محدود للبحث عن تصادم لشهادة موجودة، في حين أن وقت الهجوم على مفاتيح المضيف محدود بمهلة الاتصال (LoginGraceTime) ).

يتم الآن تشغيل ssh-keygen بشكل افتراضي على خوارزمية rsa-sha2-512، المدعومة منذ OpenSSH 7.2، والتي قد تؤدي إلى مشكلات توافق عند محاولة معالجة الشهادات الموقعة في OpenSSH 8.2 على الأنظمة التي تعمل بإصدارات OpenSSH الأقدم (للتغلب على المشكلة عندما عند إنشاء توقيع، يمكنك تحديد "ssh-keygen -t ssh-rsa" بشكل صريح أو استخدام خوارزميات ecdsa-sha2-nistp256/384/521 المدعومة منذ OpenSSH 5.7).

تغييرات أخرى:

  • تمت إضافة توجيه التضمين إلى sshd_config، والذي يسمح لك بتضمين محتويات الملفات الأخرى في الموضع الحالي لملف التكوين (يمكن استخدام أقنعة الكرة الأرضية عند تحديد اسم الملف)؛
  • تمت إضافة خيار "عدم الحاجة إلى اللمس" إلى ssh-keygen، مما يعطل الحاجة إلى تأكيد الوصول فعليًا إلى الرمز المميز عند إنشاء المفتاح؛
  • تمت إضافة توجيه PubkeyAuthOptions إلى sshd_config، والذي يجمع بين الخيارات المتنوعة المتعلقة بمصادقة المفتاح العام. حاليًا، يتم دعم علامة "عدم الحاجة إلى اللمس" فقط لتخطي عمليات التحقق من التواجد الفعلي لمصادقة الرمز المميز. وقياسًا على ذلك، تمت إضافة خيار "عدم الحاجة إلى اللمس" إلى ملف "المفاتيح المعتمدة"؛
  • تمت إضافة خيار "-O write-attestation=/path" إلى ssh-keygen للسماح بكتابة شهادات تصديق FIDO إضافية عند إنشاء المفاتيح. لا يستخدم OpenSSH هذه الشهادات بعد، ولكن يمكن استخدامها لاحقًا للتحقق من وضع المفتاح في متجر أجهزة موثوق به؛
  • في إعدادات ssh وsshd، أصبح من الممكن الآن ضبط وضع أولوية حركة المرور عبر توجيه IPQoS لو دسكب (سلوك أقل جهدًا لكل قفزة)؛
  • في ssh، عند تعيين القيمة "AddKeysToAgent=yes"، إذا كان المفتاح لا يحتوي على حقل تعليق، فستتم إضافته إلى ssh-agent للإشارة إلى المسار إلى المفتاح كتعليق. في
    يستخدم ssh-keygen وssh-agent الآن أيضًا تسميات PKCS#11 واسم الموضوع X.509 بدلاً من مسار المكتبة كتعليقات في المفتاح؛

  • تمت إضافة القدرة على تصدير PEM لمفاتيح DSA وECDSA إلى ssh-keygen؛
  • تمت إضافة ملف جديد قابل للتنفيذ، ssh-sk-helper، يُستخدم لعزل مكتبة الوصول إلى الرمز المميز FIDO/U2F؛
  • تمت إضافة خيار البناء "--with-zlib" إلى ssh وsshd للتجميع مع دعم مكتبة zlib؛
  • وفقًا لمتطلبات RFC4253، يتم توفير تحذير بشأن حظر الوصول بسبب تجاوز حدود MaxStartups في الشعار المعروض أثناء الاتصال. لتبسيط عملية التشخيص، يعرض الآن رأس عملية sshd، المرئي عند استخدام الأداة المساعدة ps، عدد الاتصالات التي تمت مصادقتها حاليًا وحالة حد MaxStartups؛
  • في ssh وssh-agent، عند استدعاء برنامج لعرض دعوة على الشاشة، محددة عبر $SSH_ASKPASS، يتم الآن إرسال علامة بنوع الدعوة بالإضافة إلى ذلك: "تأكيد" - مربع حوار التأكيد (نعم/لا)، "لا شيء" " - رسالة إعلامية، "فارغة" - طلب كلمة المرور؛
  • تمت إضافة عملية توقيعات رقمية جديدة "find-principals" إلى ssh-keygen للبحث في ملف الموقعين المسموح لهم للمستخدم المرتبط بتوقيع رقمي محدد؛
  • تحسين الدعم لعزل عملية sshd على Linux باستخدام آلية seccomp: تعطيل مكالمات نظام IPC، والسماح بـ Clock_gettime64() وclock_nanosleep_time64 وclock_nanosleep().

المصدر: opennet.ru

إضافة تعليق