אפשר לגשת למכשירים ברשת מקומית (LAN) מכל אפליקציה שיש לה הרשאה INTERNET.
כך קל לאפליקציות להתחבר למכשירים מקומיים, אבל יש לכך גם השלכות על הפרטיות, כמו יצירת טביעת אצבע של המשתמש ושימוש כפרוקסי למיקום.
מטרת הפרויקט Local Network Protections (הגנות על הרשת המקומית) היא להגן על פרטיות המשתמש באמצעות הגבלת הגישה לרשת המקומית מאחורי הרשאת זמן ריצה חדשה.
השפעה
במהלך Android 16, ההרשאה הזו היא תכונה אופציונלית, כלומר היא תשפיע רק על האפליקציות שהביעו הסכמה לשימוש בה. מטרת ההסכמה היא לעזור למפתחי אפליקציות להבין אילו חלקים באפליקציה שלהם תלויים בגישה לרשת המקומית שניתנת באופן מרומז, כדי שיוכלו להתכונן להגנה על ההרשאות שלהם בגרסת Android עתידית.
האפליקציות יושפעו אם הן ניגשות לרשת המקומית של המשתמש באמצעות:
- שימוש ישיר או שימוש בספרייה בשקעים גולמיים בכתובות של רשת מקומית, לדוגמה,
Multicast DNS (mDNS)אוSimple Service Discovery Protocol (SSDP). - שימוש במחלקות ברמת המסגרת שיש להן גישה לרשת המקומית, לדוגמה,
NsdManager.
פרטים על ההשפעה
כדי להעביר תנועה לכתובת ברשת מקומית וממנה, צריך הרשאת גישה לרשת המקומית. בטבלה הבאה מפורטים כמה מקרים נפוצים:
| פעולת רשת ברמה נמוכה באפליקציה | נדרשת הרשאת גישה לרשת המקומית |
|---|---|
| יצירת חיבור TCP יוצא | כן |
| אישור של חיבור TCP נכנס | כן |
| שליחת שידור יחיד, שידור לקבוצה או שידור לכולם באמצעות UDP | כן |
| קבלת שידור יחיד, שידור מרובה או שידור לכל ברשת ב-UDP | כן |
ההגבלות האלה מוטמעות עמוק במערך של רכיבי הרשת, ולכן הן חלות על כל ממשקי ה-API של הרשת. הסנכרון כולל שקעים שנוצרו בפלטפורמה או בקוד מנוהל, ספריות רשת כמו Cronet ו-OkHttp, וכל ממשקי API שהוטמעו מעל אלה. כדי לפתור בעיות בשירותים ברשת המקומית עם הסיומת .local, צריך הרשאה לרשת המקומית.
חריגים לכללים הקודמים:
- אם שרת ה-DNS של המכשיר נמצא ברשת מקומית, לא נדרשת הרשאת גישה לרשת המקומית כדי להעביר תנועה אל השרת או ממנו (ביציאה 53).
- לאפליקציות שמשתמשות בבורר הפלט ככלי לבחירה בתוך האפליקציה לא נדרשות הרשאות גישה לרשת המקומית (הנחיות נוספות יפורסמו בגרסה מאוחרת יותר).
הדרכה
כדי להפעיל את ההגבלות על הגישה לרשת המקומית:
- צריבת ROM (flash) במכשיר לגרסת build עם Android 16 Beta 3 ואילך
- התקנת האפליקציה שרוצים לבדוק
החלפת מצב ההגדרה של Appcompat באמצעות adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>הפעלת המכשיר מחדש
עכשיו הגישה של האפליקציה לרשת המקומית מוגבלת, וכל ניסיון לגשת לרשת המקומית יוביל לשגיאות בשקע.
אם אתם משתמשים בממשקי API שמבצעים פעולות ברשת מקומית מחוץ לתהליך של האפליקציה שלכם – למשל, NsdManager – הם לא מושפעים במהלך ההצטרפות.
כדי לשחזר את הגישה, צריך לתת לאפליקציה הרשאה ל-NEARBY_WIFI_DEVICES.
- מוודאים שהאפליקציה מצהירה על ההרשאה
NEARBY_WIFI_DEVICESבקובץmanifestשלה. - עוברים אל הגדרות > אפליקציות > [שם האפליקציה] > הרשאות > מכשירים בקרבת מקום > אישור.
עכשיו הגישה של האפליקציה לרשת המקומית אמורה לחזור, וכל התרחישים אמורים לפעול כמו לפני שהאפליקציה נכללה בהגדרה. כך תושפע תנועת הנתונים ברשת של האפליקציה.
| הרשאה | בקשה יוצאת ב-LAN | בקשה יוצאת/נכנסת לאינטרנט | בקשה נכנסת ב-LAN |
|---|---|---|---|
| הוענקה | Microsoft Works | Microsoft Works | Microsoft Works |
| לא הוענקה גישה | פספוסים | Microsoft Works | פספוסים |
כדי להשבית את ההגדרה Appcompat, מריצים את הפקודה הבאה:
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
שגיאות
אם בקשת גישה לרשת המקומית נכשלת בגלל הרשאה חסרה:
- בדרך כלל, חיבורי TCP יגרמו לשגיאת זמן קצוב לתפוגה.
- שגיאות UDP ודחיות כלליות של הרשאות בדרך כלל יגרמו לקוד השגיאה EPERM
באגים
שליחת דיווח על באגים ומשוב לגבי:
- אי התאמות בגישה לרשת המקומית (אתם חושבים שגישה מסוימת לא צריכה להיחשב כגישה לרשת המקומית)
- באגים שבהם הגישה לרשת LAN אמורה להיות חסומה אבל היא לא חסומה
- באגים שבהם הגישה לרשת המקומית נחסמת למרות שהיא לא אמורה להיחסם
השינוי הזה לא ישפיע על:
- גישה לאינטרנט
- רשת סלולרית