OpenConnect csd-wrapper: בדקו את הסקריפט לפני ההתחברות
התייחסו אל --csd-wrapper כגבול להרצת קוד: בדקו את הסקריפט, בחרו משתמש csd ייעודי וודאו מה השער באמת רואה.
הוספת --csd-wrapper לפרופיל מוסרת סקריפט מקומי לדמון שמריץ אותו בזמן ההתחברות, ולכן ההחלטה שלפניכם היא סקירת קוד, לא מתג העדפה. האפשרות קיימת כדי שאפשר יהיה להחליף את רכיב בדיקת המארח של השער, והיא מקבלת נתיב לסקריפט שאתם מספקים. כל מה שלהלן מניח שבעל הפריסה כבר אמר איזו בדיקת מצב נדרשת; אם החלק הזה עוד פתוח, סגרו אותו קודם. במדריך ארבעה שלבים: לאתר את השלב שנכשל, לקרוא את הסקריפט, לבחור את הזהות שתחתיה הוא רץ, ולהוכיח את התוצאה.
שלב 1: אתרו את השלב שנכשל
ההודעה האחרונה של הלקוח עוסקת בדרך כלל בקוקי, שהוא סוף השרשרת ולא תחילתה. התחברות HTTPS, בדיקת תעודת שרת, חילופי אימות ורכיב מצב עומדים כולם לפני ההודעה הזו.
רשמו את הגרסה ואת כתובת ההתחברות שבשימוש, ואז חזרו על הניסיון כשהפלט המפורט נשמר בטרמינל שלכם בלבד. קראו את השגיאה הראשונה שאינה ניסיון חוזר, ולא את השורה האחרונה של התמלול. אם היומן נעצר לפני ששמו של רכיב הערכה כלשהו מופיע, העטיפה עדיין אינה הבעיה שלכם. הוספתה בנקודה זו רק מרחיבה את המשטח שתצטרכו להגן עליו בהמשך.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullהשאירו את התמלול מקומי, מפני שקוקיז ותשובות אימות הם חומר גישה. עקבה שהודבקה לשיחה היא דליפת פרטי גישה גם כששלב ההערכה נראה תמים. שתפו את טקסט השגיאה ואת הנקודה בזרימה שבה הופיעה, ולעולם לא את המטען.
שלב 2: קראו את הסקריפט לפני שהוא נכנס לפרופיל
עטיפה היא רק אמינה כמו הגרסה שסקרתם, ולכן קבעו את אותה גרסה ושמרו את ה-hash שלה לצד הערת האישור. שתי הפקודות שלהלן נותנות טביעת אצבע ובדיקת תחביר זולה לפני שתקראו שורה אחת. הן נותנות גם לאדם הבא הפניה קבועה, וזה חשוב כשהקובץ חי מחוץ לניהול החבילות. אף אחת מהפקודות אינה אומרת מה הסקריפט עושה, ולכן הריצו אותן והמשיכו לקרוא.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shקראו את כל הקובץ עם ארבע שאלות בראש: האם הוא מבצע קריאות HTTP יוצאות, האם הוא קורא קובצי פרטי גישה או משתני סביבה, האם הוא כותב מחוץ לספרייה זמנית, והאם ענף כלשהו מדווח על מצב עובר בלי למדוד דבר. התבנית האחרונה היא עקיפת מדיניות עם שורת יומן מחוברת. עטיפות מועתקות נוטות להבריח אותה מאחורי בדיקה שנראית סבירה. אם הסקריפט מחליט שהמכשיר תקין לפני שהוא מסתכל על המכשיר, עצרו שם.
בדקו גם מטענים ארוזים, מפני שכותרת קריאה אינה מוכיחה דבר על שאר הקובץ. הורדת סקריפט משרשור פורום אינה הופכת אותו לאמין רק מפני ששמו מהדהד רכיב בדיקת מארח אמיתי. רשמו מי התקין אותו, מאין הוא בא ואיך הוא יתעדכן.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shשלב 3: בחרו את הזהות שתחתיה העטיפה רצה
--csd-user מוריד הרשאות בזמן שתוכנית CSD, TNCC או HIP רצה. החשבון הזה הוא חלק מסידור ההרצה המקומי, לא שם המשתמש שנשלח לשער.
תנו לעטיפה חשבון ייעודי בלי מעטפת אינטראקטיבית, בלי הרשאות sudo ובלי חברות בקבוצות שהיא אינה צריכה. העניקו הרשאת קריאה לסקריפט ולקבצים המסוימים שהוא בודק, ואז בדקו את ההורדה לפני שתיגעו בפרופיל ה-VPN. מציאת הבעיה כאן זולה יותר ממציאתה בתוך הלקוח.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shהורדת הרשאות מגבילה את הנזק שסקריפט גרוע יכול לגרום. היא אינה סוקרת את הקוד, אינה הופכת את הדוח לאמיתי ואינה קובעת שמנהל השער מקבל את המימוש הזה כעמידה במדיניות המכשירים.
שלב 4: שמרו על השינוי כהפיך
גבו את הפרופיל לפני העריכה, והחזיקו את העטיפה תחת בקרת גרסאות כדי שחזרה לאחור תשחזר hash ידוע במקום לחפש עותק. רשמו את נתיב הסקריפט, ה-hash, משתמש ההרצה והמאשר במקום אחד.
כדי לחזור לאחור, הסירו את האפשרות, הפעילו מחדש את הלקוח וודאו שהשגיאה המקורית חוזרת. אם השער עוד דוחה את ההתחברות אחרי החזרה לאחור, משהו אחר השתנה גם כן, ומציאת ההבדל הזה קודמת לניסיון חוזר עם העטיפה. שמרו את העותק הקודם לאורך כל חלון השינוי, אשר עבור רוב הצוותים פירושו עד שחלף חלון התחזוקה הבא.
אחרי פריסה מוצלחת, בדקו שני דברים ולא אחד: המנהרה עולה, ומכשיר שאמור להיכשל בבדיקת המצב עדיין נדחה. חיבור שעובד לכולם אינו הוכחה שההערכה שרדה את השינוי שלכם.
קיצורי דרך שיוצרים בעיה שנייה
אל תיתנו לעוזר לדווח על מצב תואם בלי להריץ את הבדיקות הנדרשות, ואל תעקפו את זהות הפלטפורמה כדי להתאים למערכת הפעלה אחרת. הצהרה על פלטפורמה אחרת אינה הוכחה שהמכשיר האמיתי עומד במדיניות. היא משאירה אתכם עם לקוח שמשקר בכל התחברות עתידית.
השבתת אימות השרת, הפעלה חוזרת של קוקי ישן וערימת סקריפטים שלא נסקרו מחליפות כולן כשל גלוי בכזו שאינו גלוי. אם הלקוח המותקן אינו יכול להשלים את הזרימה הנתמכת, בקשו חלופה מאושרת במקום לכופף את זו שיש לכם.
המדריך של OpenConnect מתעד את --csd-wrapper ואת --csd-user בנפרד, וזה הרמז שחשוב: הסקריפט והזהות הם שתי החלטות. סקרו אותם בנפרד ורשמו את שניהם. ואז הנחיית ההתחברות מפסיקה להיות חידה שאתם פותרים בהדבקת קוד.