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

מה חלון ההסכמה מוסר בפועל

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

היקף הממשק הזה מפורש. המסלולים קובעים אילו יעדים נלכדים, ו-addAllowedApplication או addDisallowedApplication קובעים אילו אפליקציות מזינות אותו. VPN לפי אפליקציה שמפרט שתי אפליקציות אינו רואה את שאר המכשיר.

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

היכן נעצרת תצוגת המנות

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

המטא-נתונים סביב הטקסט המוצפן הם סיפור אחר, וכאן מתפרקות רוב הטענות הבטוחות. כתובת ה-IP של היעד, הפורט, גדלי המנות והתזמון כולם גלויים, ובנוסף שם השרת ב-TLS ClientHello, שבדרך כלל נשלח בגלוי גם תחת TLS 1.3. Encrypted Client Hello משנה זאת, אבל הוא אינו אוניברסלי. DNS פשוט מדליף שמות באותה קלות כשהשאילתות יוצאות ללא הצפנה.

פרוטוקולים ישנים או מוגדרים שגוי מוסרים יותר. HTTP פשוט, IMAP בלי TLS ומספר פרוטוקולי משחקים ו-IoT חושפים את המטען שלהם לכל מי שמחזיק במתאר ה-tun.

ההרשאות שלעולם לא מגיעות איתו

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

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

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

מסנן מקומי או שער מרוחק

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

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

שני המקרים הם עדיין עמדת מנות. ההבדל הוא מי עוד עומד ביציאה.

בדקו מה אישרתם

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

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

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

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