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

עצרו ושמרו את הראיות

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

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

מה יכול לחצות את הגבול

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

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

הוכחת מפתח אינה העלאת מפתח

TLS מודרני מפריד בין שני הרעיונות האלה בכוונה. RFC 8446 מתאר את הודעת CertificateVerify, שבה הלקוח חותם על אתגר עם המפתח הפרטי המתאים לתעודה שלו. החתימה מוכיחה בעלות בלי לשאת את המפתח, ולכן ניסיון שאומת בתעודה אינו בהכרח פגיעה במפתח.

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

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

שחזרו את הניסיון מן היומן

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

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

grep -n -i -E 'verify|authentication|certificate|error|timeout' client.log | tail -30

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

החליטו ואז פעלו

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

DecisionEvidence that puts you hereEvidence that rules it out
Change the password nowA password was submitted and a server reply arrivedThe log stops before any submission
Review active sessionsA one-time code was accepted by the wrong endpointThe code was never sent, or was rejected before use
Revoke and reissueThe file you selected contained key material, not just settingsThe upload was a profile with no embedded key
No further actionThe attempt ended before any authentication value was offeredYou later find an earlier attempt you had forgotten

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

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

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