איך לבטל מכשיר VPN שאבד: מפתח, תעודה או חשבון
מכשיר שאבד הוא שלוש זהויות בבת אחת: מפתח עמית של WireGuard, תעודת לקוח וסשן חשבון. בטלו את זו שהשרת שלכם בודק.
המחשב הנייד שלכם נעלם, וה-VPN עדיין מציג אותו כלקוח. השאלה הדחופה אינה איך למחוק את הפרופיל במכונה שכבר אין לכם, אלא איזו זהות השרת עדיין מקבל. WireGuard בודק מפתח ציבורי, תצורת OpenVPN המבוססת על PKI בודקת תעודת לקוח, ו-VPN עם SSO בודק חשבון ואת אסימון הסשן שלו. שלושתם מבוטלים במקומות שונים ובמהירויות שונות, ותיקון של אחד תוך התעלמות מהאחרים הוא הדרך שבה מכשיר שאבד נשאר מחובר.
שלוש זהויות ומה כל אחת מהן שולטת בו
כל מנגנון עונה על שאלה אחרת. מפתח עמית עונה אם זו המכונה שרשמתם. תעודה עונה אם היא נחתמה על ידי ה-CA שלכם ולא בוטלה. חשבון עונה אם האדם הזה אימת את זהותו לאחרונה מספיק. פריסה שמערמת שניים מהם, למשל תעודה יחד עם התחברות לספרייה, סוגרת את הדלת רק כאשר לכל שכבה שהנפיקה משהו למכשיר נאמר להפסיק לקבל אותו.
המלכודת המעשית היא שהמכונה החסרה מחזיקה את החצי הפרטי של כל אישור, ולכן שום דבר שתעשו מקומית לא מגיע לשרת.
WireGuard: הסירו את העמית, כי אין רשימת ביטול
WireGuard אינו מחזיק רשימת חסימה. הממשק מקבל בדיוק את המפתחות הציבוריים שהוגדרו כעמיתים, ולכן ביטול הוא מחיקה: הריצו wg set wg0 peer <public-key> remove, הצורה המתועדת ב- wg(8), ואז מחקו את בלוק [Peer] המתאים מתוך wg0.conf. עשו את שניהם. הסרה בזמן ריצה בלבד מחזיקה עד האתחול או טעינת התצורה הבאה, ואז הקובץ מחזיר את המפתח.
סשנים קיימים לא זקוקים לטיימר כדי למות. הסרת העמית מפילה את לחיצת היד ואת חומר המפתח שלו, ולכן התעבורה נעצרת ברגע שנדרש שוב זוג מפתחות תקף. בדקו wg show wg0 latest-handshakes בשרת: הרשומה של המפתח שאבד אמורה להיעלם ולהישאר נעלמת, בעוד שאר העמיתים ממשיכים לדווח תקופות אחרונות.
אזהרה אחת חשובה יותר ממה שהיא נראית. אם המכשיר שאבד חלק מפתח עם מכשירים אחרים מפני שמישהו העתיק קובץ תצורה אחד, הסרת המפתח הזה מנתקת את כולם; זה עדיין הצעד הנכון, ואחר כך אתם מנפיקים מפתחות לכל מכשיר בנפרד במקום לשחזר את המשותף.
תעודות: רשימת ביטול נחשבת רק אם הדמון קורא אותה
גישה מבוססת תעודות מוסיפה שלב שאנשים מדלגים עליו. easyrsa revoke laptop-01 מסמן את התעודה כמבוטלת במסד הנתונים של ה-CA, אבל ה-VPN לא לומד דבר ממסד הנתונים הזה. לאחר מכן אתם מריצים easyrsa gen-crl כדי לכתוב את crl.pem, מעתיקים אותו לנתיב הנקוב באפשרות crl-verify של השרת, ומוודאים שהדמון הפעיל משתמש בקובץ החדש. ביטול בלי ליצור מחדש ולהפיץ את רשימת הביטול הוא חסר תועלת.
התזמון הוא החצי השני. רשימת ביטול נבדקת כשהלקוח מתחבר או מנהל משא ומתן מחדש, ולכן מנהרה מבוססת יכולה להמשיך להעביר עד אז. אם המכשיר חייב להיקטע מיד, סיימו את הסשן הזה במפורש דרך ממשק הניהול של OpenVPN במקום להמתין ללחיצת היד הבאה. טעינה מחדש או הפעלה מחדש של השירות, בהתאם לאופן שבו הפריסה טוענת את רשימת הביטול, היא חלק מהשינוי ולא תוספת אופציונלית.
כדאי לעשות את האימות ממכונה אחרת: הציגו את התעודה המבוטלת וצפו לכישלון לחיצת יד, בדרך כלל VERIFY ERROR: depth=0, error=certificate revoked. אם החיבור עדיין מצליח, הלקוח קורא רשימת ביטול אחרת מזו שעדכנתם.
חשבונות וסשנים: השבתה אינה אותו דבר כמו גירוש
התחברויות לספרייה או ב-SSO נבדקות בזמן האימות. השבתת החשבון חוסמת את ההתחברות הבאה, אבל אסימון הרענון והמנהרה המבוססת עשויים להמשיך לעבוד עד שהם יפוגו. בטלו את הסשנים והאסימונים של המשתמש הזה, או העלו גרסת סשן אם ספק הזהות תומך בכך. הסירו את המכשיר שאבד גם מרישום ה-MFA, שכן מאמת רשום הוא נתיב גישה בפני עצמו.
VPN מבוססי RADIUS יכולים לדחוף הודעת ניתוק או שינוי הרשאה כדי להפיל סשן פעיל, אבל לא כל שרת גישת רשת מכבד זאת. במקרה של ספק, סיימו את הסשן של המשתמש מצד השרת ואמתו ביומנים שהסשן הישן נסגר.
סדר הפעולות לשעה הקרובה
התחילו מהמלאי, לא מהלקוח: פרטו כל זהות הקשורה למכשיר, בין אם מפתח עמית, מספר סידורי של תעודה או חשבון. בטלו בכל מערכת מנפיקה לפי הסדר שבו נבנה החיבור, כלומר חשבון קודם, אחר כך תעודה, אחר כך עמית. אחר כך הוכיחו את הסירוב ממכונה שאתם שולטים בה.
שני המשכים קלים לשכיחה. ראשית, החליפו כל דבר אחר שהמכשיר החזיק, במיוחד מפתחות SSH, אישורי קונסולת ענן ומפתח WireGuard משותף מראש. שנית, בדקו שניהול התצורה, צילומי מצב או תמונות זהב לא יכולים להחזיר את הלקוח שהוסר בבנייה מחדש הבאה.
הפתרון העמיד הוא זהות אחת לכל מכשיר. כשכל מחשב נייד נושא מפתח עמית או תעודה משלו, אובדן עולה פקודת ביטול אחת והנפקה מחדש במקום בנייה מחדש של כל הצי.