רישום הרשאות מיוחדות

אפליקציות 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 :

  1. בניית תמונת מערכת:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. הפעל את privapp_permissions.py סקריפט כדי ליצור privapp-permissions.xml קובץ רשימות כל חתימה | הרשאות חסוי נדרש להיות allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    זה תוכן XML הדפסים כלי שיכול לשמש גם בתור קובץ יחיד, או מפוצל למספר קבצים ב /etc/permissions נתיב הספרייה. אם המכשיר כבר כולל allowlists ב /etc/permissions הספריות, הכלי יחיד מדפיס את ההבדלים (כגון חתימה החסרה | הרשאות חסויות אתה צריך להוסיף allowlist). זה שימושי גם למטרות ביקורת: כאשר נוספה גרסה חדשה של האפליקציה, הכלי מזהה את ההרשאות הנוספות הדרושות.
  3. העתק את הקבצים שנוצרו הקטע המתאים /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 .