אותה זהות IKEv2 בשני iPhone? הם מתחברים לסירוגין
פרופיל אחד שהועתק לשני מכשירים נותן לשער peer אחד במקום שניים. עקבו אחר טבלת ה-peer שמתמלאת ומתרוקנת, ואז הנפיקו ערך לכל מכשיר.
שני טלפונים, פרופיל אחד ודפוס שנראה על-טבעי עד שמישהו מסתכל על השער. מכשיר אחד מחזיק במנהרה, השני מתחבר, והראשון מאבד אותה בתוך שניות. הראשון מתחבר מחדש והשני נופל. חוסך סוללה, נדידת Wi-Fi ו-NAT של הספק מקבלים את האשמה, בעוד הסיבה האמיתית יושבת בשדה טקסט שהועתק יחד עם כל השאר. IKEv2 מזהה peer לפי שם, ושני הטלפונים מציגים את אותו השם.
הזהות היא המפתח שתחתיו השרת שומר אותך
בתוך חילופי IKEv2 כל צד מצהיר מי הוא: היוזם שולח מזהה מקומי, המשיב עונה בשלו, והמשיב גם בודק את הזהות שהיוזם הצהיר עליה מול המדיניות. השער שומר את מצבו לפי זהות ולא לפי מכשיר, כי מכשיר אינו דבר שהוא יכול לראות. לכן שני טלפונים עם מזהה אחד מגיעים כ-peer אחד, והחילוף השני חייב לדרוס את הראשון. הבעיה מופיעה רק כששניהם בשימוש, ולכן בדיקה עם טלפון אחד אף פעם לא משחזרת אותה.
שום דבר מזה אינו באג בלקוח. הלקוח שלח בדיוק את מה שהפרופיל אמר לו לשלוח.
איך נראית ההתנגשות מהשער
הסתכלו ברשימת ה-peer כששני הטלפונים ערים ובשימוש. התנגשות מציגה רשומה אחת שכתובתה משתנה כשהטלפונים מתחלפים, ומונה ההפעלות הפעילות אף פעם לא מגיע לשתיים. ניתוק לפי דרישה נראה אחרת, ולהבחין ביניהם דורש תצפית אחת ולא תיאוריה.
| Observation | Shared identity | Idle teardown |
|---|---|---|
| Peer entries while both are awake | One, with a changing address | One per phone, or none |
| What triggers the drop | The other device connecting | Time without traffic |
| What restores it | The other device disconnecting | Any app needing the tunnel |
רשמו את שני האירועים עם חותמות זמן בזמן שזה קורה. נפילה שמתלכדת עם ההתחברות של המכשיר האחר מצביעה על המזהה, ונפילה שמגיעה מרווח סרק אחד אחרי החבילה האחרונה מצביעה על טיימר.
מאיפה מגיעים הכפילויות
ייצוא תצורה עובדת אחת ועריכת כתובת השרת בלבד מייצרים קובץ שני שזהות הקובץ הראשון עדיין בתוכו. זהו המסלול הרגיל לתקלה הזו, והוא קורה בדרך כלל כשמכניסים קבוצה קטנה בחיפזון.
שמות השדות מקלים לפספס את זה. המזהה המרוחק נותן שם לשער שהטלפון מצפה לו, והעתקתו נכונה. המזהה המקומי נותן שם למכשיר הזה מול השער, והעתקת הערך הזה היא כל הבעיה.
הנפיקו ערך לכל מכשיר
השתמשו במשהו ייחודי למכשיר ויציב לאורך כל חייו, כמו מזהה המכשיר מהמלאי או ערך שמערכת הניהול שלכם מייצרת לכל רישום. תווית מחלקה, שם חשבון שירות משותף או כתובת האימייל של המשתמש מתנגשים כולם ברגע שלאדם הזה יש מכשיר שני.
צרו את המטען לכל מכשיר במקום להפיץ קובץ אחד. תעדו איזה ערך שייך לאיזה מכשיר, כדי שהחלפה לא תשחזר את הפרופיל הישן ותשלח את הטלפון החדש ישר בחזרה לאותה התנגשות.
בדקו גם את צד השרת. שער שממפה את הזהות לכתובת מנהרה קבועה עדיין יכול להתנגש כששני מזהים שונים מקבלים את אותה הקצאה, אז ודאו שיש מקום במאגר ושההקצאות אינן מוצמדות לכל משתמש.
אמתו כששני הטלפונים ערים
חברו את הראשון, הגיעו למשאב פרטי, ואז חברו את השני והשאירו את שניהם במצב סרק למשך דקה. שני החיבורים אמורים להימשך ורשימת ה-peer אמורה להראות שתי זהויות. לאחר מכן נעלו ופתחו כל טלפון כדי לוודא שמקרה הסרק עדיין מתנהג כראוי.
אם חיבור בודד עדיין נופל פעם ביום בלי ששום דבר אחר מתחבר, הזהות כבר אינה החשודה. עברו לטיימרים של סרק ולמגבלות חיבורים בשרת במקום לערוך את הפרופיל שוב.