חיבור OpenVPN נכשל, מישהו מוצא תיקון של שורה אחת שמוסיף SECLEVEL=0, והמנהרה עולה. מה שהשתנה לא היה התעודה ולא חבילת הצפנה; סף קבלה ברמת הספרייה זז, וכל מה שהתהליך עושה לאחר מכן יורש את הגבול החדש. כדאי להבין זאת לפני שאותה שורה תועתק לכל פרופיל בסביבה.

קבעו איזו ספרייה ואיזו מדיניות בתוקף

SECLEVEL הוא מושג של OpenSSL, ולכן השאלה הראשונה היא אם הבנייה שלכם משתמשת ב-OpenSSL בכלל. ניתן לקשר את OpenVPN ליותר מספריית הצפנה אחת, והגדרה שחלה על אחת מהן חסרת משמעות לגבי האחרות. שאלו את הקובץ הבינארי במה הוא נבנה, ואז שאלו את הספרייה איזו גרסה ותצורה היא טענה:

openvpn --version | head -3
openssl version -a

קראו את פלט הגרסה בעיון, כי הפצות משנות ברירות מחדל. חלקן מספקות תצורת מערכת שמעלה את הרמה המינימלית מעל ברירת המחדל של upstream, ולכן אותו פרופיל מתנהג אחרת בשתי מכונות עם חבילות OpenVPN זהות. המדיניות האפקטיבית היא זו שהתהליך הרץ טען, לא זו שבמדריך של upstream.

אחר כך הפרידו בין שתי השכבות שאנשים מבלבלים ביניהן. ל-OpenVPN יש בקרות TLS משלו, ובהן הגדרת פרופיל תעודה ורשימות הצפנה מפורשות, והן יושבות מעל כל מה שהספרייה אוכפת. הורדת רמת הספרייה לא משנה אילו הצפנות התצורה שלכם מפרטת, וצמצום רשימת OpenVPN לא מעלה את הסף של הספרייה. הידיעה איזו שכבה דחתה אתכם היא מה שמונע מהתיקון להישאר ניחוש.

הפרידו בין שלושת הדברים שיכולים להידחות

המועמד הראשון הוא חומר זהות: תעודה שהמפתח שלה קטן מדי או שאלגוריתם החתימה שלה כבר אינו מתקבל במדיניות. השני הוא פרמטר החלפת מפתחות, כגון קבוצה שהמדיניות רואה כחלשה מדי. השלישי הוא חבילת הצפנה שהמדיניות שוללת. שלושתם יכולים לגרום לכשל לחיצת יד, ורק טקסט השגיאה ושלב המשא ומתן מבדילים ביניהם.

אף אחד מהשלושה אינו הצפנת ערוץ הנתונים. OpenVPN מנהל משא ומתן על הצפנת המנהרה בנפרד מלחיצת היד של TLS, ולכן חיבור שמצליח לאחר שינוי ברמת האבטחה לא אומר דבר על איזו הצפנה מגנה על הנתונים שלכם. אם השאלה שאתם באמת שואלים נוגעת לסודיות הנתונים, אתם מסתכלים על הכפתור הלא נכון לגמרי.

הורדת הרמה מרחיבה את הקבלה של כל שלושת הקלטים בבת אחת. זה החלק שאנשים מפספסים: התיקון שמקבל תעודה ישנה מקבל גם קבוצה חלשה וחבילה שאולי לא התכוונתם להתיר. שגיאה אחת גרמה לשינוי, והשינוי רחב מהשגיאה. האסימטריה הזו היא הסיבה לכך שחריגה מוגבלת עדיפה על ברירת מחדל לכל הסביבה.

שנו את הקלט, לא את הסף

שמרו את השגיאה המדויקת לפני שאתם נוגעים בתצורה, כולל השלב שדיווח עליה והאובייקט שהוא נקב בשמו. בעיית תעודה נפתרת בהחלפת התעודה במשהו שהמדיניות הנוכחית מקבלת, כלומר בדרך כלל הנפקה מחדש מהרשות במקום התקנה מחדש של אותו קובץ.

אם הקלט שנדחה שייך לעמית שאינכם שולטים בו, השיחה היא עם הבעלים של אותו עמית על חומר חלופי נתמך. הורדת הסף שלכם כדי לאפשר מערכת שאיש אינו מתחזק מעבירה את העלות מהם לכל מי שמתחבר אחריהם.

היכן שהשרת אוכף את המדיניות, בדקו אם הגדרה ברמת OpenVPN היא הסיבה האמיתית לפני שאתם מאשימים את הספרייה. פרופיל תעודה שדורש דרגה מחמירה מזו שהתעודה הפרוסה יכולה לספק ייכשל לא משנה מה רמת האבטחה, והסרת הפרופיל היא שינוי צר יותר מאשר השבתת הבדיקות של הספרייה.

אם חייבים להוריד, הגבילו ותעדו

לפעמים חריגת תאימות מאושרת היא התשובה הנכונה, במיוחד עבור עמית ותיק עם תוכנית פרישה מתוארכת. הגבילו אותה לשירות שזקוק לה ולא למארח כולו: קובץ תצורה לפי שירות או תצורת OpenSSL ייעודית הם רדיוס פגיעה קטן יותר מאשר ייצוא בפרופיל הגלובלי.

רשמו ארבעה דברים עם החריגה: ההגדרה המדויקת, הבעלים שאישר אותה, הלקוחות שהיא משפיעה עליהם והתנאי שבו היא תוסר. חריגה בלי תנאי פרישה היא החלשה קבועה עם הצדקה זמנית מחוברת.

החזרה לאחור צריכה להיות שלב אחד שכבר בדקתם. שמרו את התצורה הקודמת, החילו את השינוי, ודאו שהשירות עולה, ודעו בדיוק איזה קובץ לשחזר אם החיבור הבא יתנהג אחרת מהצפוי.

אמתו זהות והגנה לאחר מכן

חיבור מוצלח מוכיח רק שהתנאים המתוקנים קיבלו אותו. ודאו שבדיקת שם המארח והעמית עדיין עושה את עבודתה, שהתעודה בשימוש היא זו שהתכוונתם לפרוס, ושערוץ הנתונים שנקבע תואם למדיניות שאתם חושבים שיש לכם.

openssl x509 -in /etc/openvpn/client.crt -noout -subject -dates -text | grep -E 'Signature Algorithm|Public-Key'
openvpn --show-tls | head -20

התייחסות רמות האבטחה של OpenSSL מבהירה שהמסגרת מחילה מגבלות על מפתחות, חתימות, קבוצות וחבילות יחד, ושדרגה אפס מתירה כל מה שה-callback בודק. זה ההיקף של מה ששיניתם, וזה המשפט לצטט כשמישהו שואל אם התיקון היה צר.

המסירה ששורדת ביקורת אומרת איזו מדיניות דחתה איזה קלט, מה שונה ומה נותר מתקבל כתוצאה. „זה עובד עם SECLEVEL=0“ הוא תצפית על חיבור אחד, לא הערכת אבטחה של הפריסה.

מאמרים קשורים