אפליקציות Privileged הן אפליקציות מערכת ממוקמות priv-app
ספרייה על אחת מחיצות תמונת המערכת. המחיצות המשמשות למהדורות אנדרואיד הן
- Android 8.1 ומטה -
/system
- אנדרואיד 9 ומעלה -
/system, /product, /vendor
לאורך הדף הזה, /etc/permissions/priv-app
מחליטה partition /etc/permissions/priv-app
.
מבחינה הסטורית, יצרני התקנים היו מעט שליטה על אילו חתימה | הרשאות הרשאות יכולות שתינתננה לאפליקציות חסויות. החל ב 8.0 אנדרואיד, יצרני חייב במפורש להעניק הרשאות מיוחסות קבצי XML בתצורת מערכת /etc/permissions
הספרייה. החל מאנדרואיד 9 על המיישמים להעניק או לשלול במפורש את כל ההרשאות המיוחסות או שהמכשיר לא יאתחל.
privapp-permissions.xml
הקובץ יכול רק להעניק או לשלול הרשאות עבור יישומים חסויים באותה המחיצה. לדוגמה, אם אפליקציה על /product
המחיצה מבקשת הרשאות חסויות, הבקשה יכולה להיות רק שהוענקה או הכחישה ידי privapp-permissions.xml
קובץ זה גם על /product
.
הוספת רשימות הרשאה
רשות allowlists עבור אפליקציות שיכולות להיות רשום XML יחיד או קבצי XML מרובות ממוקם frameworks/base/etc/permissions
ספרייה כדלקמן:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
אין כלל קפדני לארגון תוכן. המיישמים Device יכול לקבוע מבנה תוכן כל עוד את כל האפליקציות /system/priv-app
הם allowlisted. לדוגמה, ל- Google יש רשימת אישורים אחת לכל האפליקציות המיוחסות שפותחו על ידי Google, וממליצה על הארגון הבא:
- הרשאות עבור יישומי שכבר כלולים בעץ פרויקט הקוד הפתוח אנדרואיד (AOSP) מפורטים
/etc/permissions/privapp-permissions-platform.xml
. - הרשאות עבור יישומי Google מפורטים
/etc/permissions/privapp-permissions-google.xml
. - לאפליקציות אחרות, קבצי השימוש בלשון:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
יצירת רשימות הרשאות
כדי ליצור allowlist אוטומטי עבור כל היישומים הזמינים תמונת מערכת, השתמש בכלי קו AOSP הפיקוד development/tools/privapp_permissions/privapp_permissions.py
. כדי ליצור גרסה ראשונית של מכשיר ספציפי privapp-permissions.xml
:
- בניית תמונת מערכת:
. build/envsetup.sh
lunch PRODUCT_NAME
make -j
- הפעל את
privapp_permissions.py
סקריפט כדי ליצורprivapp-permissions.xml
קובץ רשימות כל חתימה | הרשאות חסוי נדרש להיות allowlisted:development/tools/privapp_permissions/privapp_permissions.py
זה תוכן XML הדפסים כלי שיכול לשמש גם בתור קובץ יחיד, או מפוצל למספר קבצים ב/etc/permissions
נתיב הספרייה. אם המכשיר כבר כולל allowlists ב/etc/permissions
הספריות, הכלי יחיד מדפיס את ההבדלים (כגון חתימה החסרה | הרשאות חסויות אתה צריך להוסיף allowlist). זה שימושי גם למטרות ביקורת: כאשר נוספה גרסה חדשה של האפליקציה, הכלי מזהה את ההרשאות הנוספות הדרושות. - העתק את הקבצים שנוצרו הקטע המתאים
/etc/permissions
ספרייה, שבו המערכת קוראת את הקבצים במהלך האתחול.
התאמה אישית של רשימות הרשאות
AOSP כולל יישום של רשימות אישור שניתן להתאים אישית לפי הצורך. הרשאות עבור יישומים נכללו AOSP כבר allowlisted ב /etc/permissions/privapp-permissions-platform.xml
.
כברירת מחדל, privapp_permissions.py
סקריפט מייצר תפוקה באופן אוטומטי המקנה לכל רשות המבוקש על ידי יישום חסוי. אם יש הרשאות שצריך לשלול אותן, ערוך את ה- XML כדי להשתמש בתג "שלילת הרשאה" במקום בתג "הרשאה". דוגמא:
<!-- This XML file declares which signature|privileged permissions to grant to privileged apps that come with the platform --> <permissions> <privapp-permissions package="com.android.backupconfirm"> <permission name="android.permission.BACKUP"/> <permission name="android.permission.CRYPT_KEEPER"/> </privapp-permissions> <privapp-permissions package="com.android.cellbroadcastreceiver"> <!-- Don't allow the application to interact across users --> <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/> </privapp-permissions> ...
מציאת הרשאות חסרות
כדי למצוא הרשאות חסרות בעת העלאת מכשיר חדש, הפעל מצב יומן מעבר:
ro.control_privapp_permissions=log
הפרות מדווחות בקובץ היומן, אך עדיין ניתנות הרשאות ללא זכויות יוצרים. זה שומר את המכשיר במצב עבודה תוך מתן רשימת ההפרות. זהו פורמט הודעת השגיאה:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
יש לטפל בכל ההפרות על ידי הוספת ההרשאות החסרות לרשימות ההיתרים המתאימות.
- על מערכת ההפעלה Android 8.0 ומטה, היישומים המושפעים אינו העניקו את ההרשאות החסרות גם אם הם נמצאים
priv-app
הנתיב. - על מערכת ההפעלה Android 9 ו, הפרות גבוהות (של הרשאות חסויות) אומר שהמכשיר אינו אתחול. אתה חייב במפורש ולהרשות או להכחיש את כל ההרשאות חסוי
אכיפת רשימות הרשאות
לאחר allowlists נמצא במקום, לאפשר אכיפת ריצה על ידי הגדרת המאפיין לבנות ro.control_privapp_permissions=enforce
.