הרשאת רשת מקומית

כל אפליקציה עם ההרשאה INTERNET יכולה לגשת למכשירים ברשת LAN. כך קל יותר לאפליקציות להתחבר למכשירים מקומיים, אבל יש לכך גם השלכות על הפרטיות, כמו יצירת טביעת אצבע של המשתמש ושימוש כשרתיף למיקום.

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

השפעה

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

אפליקציות יושפעו אם הן יגשו לרשת המקומית של המשתמש באמצעות:

  • שימוש ישיר או שימוש בספרייה בסוקטים גולמיים בכתובות רשת מקומיות (למשל, פרוטוקול mDNS או SSDP לזיהוי שירותים)
  • שימוש ב-classes ברמת המסגרת שמקבלות גישה לרשת המקומית (למשל NsdManager)

פרטי ההשפעה

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

פעולות רשת ברמה נמוכה באפליקציה נדרשת הרשאת גישה לרשת המקומית
יצירת חיבור TCP יוצא כן
אישור חיבור TCP נכנס כן
שליחת UDP unicast, ‏ multicast, ‏ broadcast כן
קבלת UDP unicast, ‏ multicast, ‏ broadcast נכנס כן

ההגבלות האלה מיושמות עמוק בתוך סטאק הרשתות, ולכן הן חלות על כל ממשקי ה-API של הרשתות. הרשימה הזו כוללת שקעים שנוצרו בפלטפורמה או בקוד המנוהל, ספריות רשת כמו Cronet ו-OkHttp וכל ממשקי ה-API שמוטמעים מעליהם. כדי לנסות לפתור שירותים ברשת המקומית (כלומר שירותים עם הסיומת ‎.local), נדרשת הרשאת רשת מקומית.

חריגים לכללים הקודמים:

  • אם שרת ה-DNS של המכשיר נמצא ברשת מקומית, תעבורת הנתונים אליו או ממנו (ביציאה 53) לא דורשת הרשאת גישה לרשת המקומית.
  • אפליקציות שמשתמשות ב-Output Switcher בתור הבורר שלהן בתוך האפליקציה לא יצטרכו הרשאות לרשת המקומית (הוראות נוספות יפורסמו במהדורה מאוחרת יותר).

הדרכה

כדי להביע הסכמה להגבלות ברשת המקומית:

  1. איך מבצעים אימייל למכשיר לגרסה של Android 16 Beta 3 ואילך
  2. התקנת האפליקציה לבדיקה
  3. החלפת מצב של הגדרת Appcompat באמצעות adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. הפעלה מחדש של המכשיר

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

כדי לשחזר את הגישה, צריך להעניק לאפליקציה הרשאה ל-NEARBY_WIFI_DEVICES.

  • מוודאים שהאפליקציה מצהירה על ההרשאה NEARBY_WIFI_DEVICES במניפסט שלה.
  • עוברים אל 'הגדרות' > 'אפליקציות' > [שם האפליקציה] > 'הרשאות' > 'מכשירים בקרבת מקום' > 'אישור'.

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

הרשאה בקשה יוצאת ב-LAN בקשה יוצאת/נכנסת לאינטרנט בקשה נכנסת לרשת LAN
הוענקה Microsoft Works Microsoft Works Microsoft Works
לא הוענקה גישה פספוסים Microsoft Works פספוסים

משתמשים בפקודה הבאה כדי להשבית את ההגדרה של Appcompat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

שגיאות

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

דוגמאות לשגיאות:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

באגים

שליחת באגים ומשוב לגבי:

  • אי-התאמות בגישה לרשת LAN (לדעתכם גישה מסוימת לא צריכה להיחשב כ'רשת מקומית')
  • באגים שבהם הגישה לרשת LAN אמורה להיות חסומה אבל היא לא חסומה
  • באגים שבהם הגישה לרשת LAN לא אמורה להיות חסומה, אבל היא חסומה

הגורמים הבאים לא אמורים להיות מושפעים מהשינוי הזה:

  • גישה לאינטרנט
  • רשת סלולרית