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

התחילו מההנחיה, לא משם הקובץ

קראו את התצורה הפעילה ומצאו איזו הנחיה מצביעה על החומר המדובר. אפשרויות ה-TLS של OpenVPN משתמשות ב-ca לחומר תעודה מהימן, ב-cert לתעודת העמית המקומי וב-key למפתח הפרטי שמשויך לה.

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

אם הפרופיל הוא חבילת PKCS#12, חלצו אותה במקום מבוקר כדי לראות מה באמת יש בה. חבילה אחת יכולה לשאת תעודה, את השרשרת שלה ומפתח פרטי, כלומר דליפה של החבילה היא דליפה של שלושתם.

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

תעודת CA מיועדת לשיתוף

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

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

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

מפתח עמית וסוד tls-auth אינם

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

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

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

תקנו את התפקיד שדלף, לא תפקיד שכן

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

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

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

שפטו את התעבורה הקודמת לפי התנאים שלה

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

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

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

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