לאחר ארבעה חודשים של פיתוח שחרור , מימוש לקוח ושרת פתוח לעבודה באמצעות פרוטוקולי SSH 2.0 ו-SFTP.
שיפור מרכזי במהדורת OpenSSH 8.2 היה היכולת להשתמש באימות דו-גורמי באמצעות מכשירים התומכים בפרוטוקול , שפותח על ידי הברית . U2F מאפשר יצירת אסימוני חומרה בעלות נמוכה כדי לאמת את הנוכחות הפיזית של המשתמש, תוך אינטראקציה איתם באמצעות USB, Bluetooth או NFC. מכשירים כאלה מקודמים כאמצעי לאימות דו-גורמי באתרי אינטרנט, כבר נתמכים על ידי הדפדפנים הגדולים ומיוצרים על ידי יצרנים שונים, כולל Yubico, Feitian, Thetis וקנסינגטון.
כדי ליצור אינטראקציה עם מכשירים המאשרים את נוכחות המשתמש, נוספו ל-OpenSSH סוגי מפתחות חדשים "ecdsa-sk" ו-"ed25519-sk, המשתמשים באלגוריתמי החתימה הדיגיטלית של ECDSA ו-Ed25519, בשילוב עם ה-hash SHA-256. נהלים לאינטראקציה עם אסימונים ממוקמים בספריית ביניים, הנטענת באופן דומה לספרייה לתמיכה ב-PKCS#11 ומהווה עטיפה על גבי הספרייה , המספק כלים לתקשורת עם אסימונים דרך USB (נתמכים פרוטוקולי FIDO U2F/CTAP 1 ו-FIDO 2.0/CTAP 2). ספריית ביניים libsk-libfido2 שהוכנה על ידי מפתחי OpenSSH לתוך הליבה libfido2, כמו גם עבור OpenBSD.
כדי לאמת וליצור מפתח, עליך לציין את הפרמטר "SecurityKeyProvider" בהגדרות או להגדיר את משתנה הסביבה SSH_SK_PROVIDER, המציין את הנתיב לספרייה החיצונית libsk-libfido2.so (ייצוא SSH_SK_PROVIDER=/path/to/libsk-libfido2. כך). אפשר לבנות openssh עם תמיכה מובנית בספריית השכבות (--with-security-key-builtin), במקרה זה צריך להגדיר את הפרמטר "SecurityKeyProvider=internal".
לאחר מכן עליך להפעיל את "ssh-keygen -t ecdsa-sk" או, אם המפתחות כבר נוצרו והוגדרו, להתחבר לשרת באמצעות "ssh". כאשר אתה מפעיל את ssh-keygen, צמד המפתחות שנוצר יישמר ב-"~/.ssh/id_ecdsa_sk" וניתן להשתמש בו בדומה למפתחות אחרים.
יש להעתיק את המפתח הציבורי (id_ecdsa_sk.pub) לשרת בקובץ authorized_keys. בצד השרת, רק החתימה הדיגיטלית מאומתת, ואינטראקציה עם אסימונים מתבצעת בצד הלקוח (אין צורך להתקין libsk-libfido2 בשרת, אך השרת חייב לתמוך בסוג המפתח "ecdsa-sk") . המפתח הפרטי שנוצר (id_ecdsa_sk) הוא בעצם ידית מפתח, ויוצר מפתח אמיתי רק בשילוב עם הרצף הסודי המאוחסן בצד האסימון של U2F. אם מפתח id_ecdsa_sk נופל לידיו של תוקף, כדי לעבור אימות הוא יצטרך לקבל גישה גם לאסימון החומרה, שבלעדיו המפתח הפרטי המאוחסן בקובץ id_ecdsa_sk חסר תועלת.
בנוסף, כברירת מחדל, בעת ביצוע פעולות כלשהן עם מקשים (הן במהלך היצירה והן במהלך האימות), נדרש אישור מקומי לנוכחות הפיזית של המשתמש, למשל, מוצע לגעת בחיישן על האסימון, מה שמקשה על לבצע התקפות מרחוק על מערכות עם אסימון מחובר. כקו הגנה נוסף, ניתן לציין סיסמה גם בשלב האתחול של ssh-keygen כדי לגשת לקובץ המפתח.
הגרסה החדשה של OpenSSH גם הכריזה על הוצאה משימוש בקרוב של אלגוריתמים המשתמשים ב-hash 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 based על RFC521 ECDSA (נתמך מאז OpenSSH 5656).
ב-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).
שינויים נוספים:
- הוראת Include נוספה ל-sshd_config, המאפשרת לך לכלול את התוכן של קבצים אחרים במיקום הנוכחי של קובץ התצורה (ניתן להשתמש במסכות גלוב בעת ציון שם הקובץ);
- אפשרות ה-"no-touch-required" נוספה ל-ssh-keygen, אשר משביתה את הצורך לאשר פיזית גישה לאסימון בעת יצירת המפתח;
- הוראת PubkeyAuthOptions נוספה ל-sshd_config, המשלבת אפשרויות שונות הקשורות לאימות מפתח ציבורי. נכון לעכשיו, רק הדגל "ללא מגע נדרש" נתמך כדי לדלג על בדיקות נוכחות פיזיות לאימות אסימון. באנלוגיה, האפשרות "ללא מגע-נדרש" נוספה לקובץ authorized_keys;
- נוספה אפשרות "-O write-attestation=/path" ל-ssh-keygen כדי לאפשר כתיבת אישורי FIDO נוספים בעת יצירת מפתחות. OpenSSH עדיין לא משתמש בתעודות אלה, אך ניתן להשתמש בהן מאוחר יותר כדי לוודא שהמפתח ממוקם בחנות חומרה מהימנה;
- בהגדרות ssh ו-sshd, כעת ניתן להגדיר את מצב תעדוף התעבורה באמצעות הוראת IPQoS (התנהגות נמוכה יותר של מאמץ פר-הופ);
- ב-ssh, בעת הגדרת הערך "AddKeysToAgent=yes", אם המפתח אינו מכיל שדה הערה, הוא יתווסף ל-ssh-agent המציין את הנתיב למפתח כהערה. IN
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
