รายการอนุญาตสิทธิ์พิเศษ

ปพลิเคชันที่มีสิทธิพิเศษปพลิเคชันระบบที่ตั้งอยู่ใน priv-app ไดเรกทอรีที่หนึ่งในพาร์ทิชันระบบภาพ พาร์ติชั่นที่ใช้สำหรับรุ่น Android คือ

  • Android 8.1 และลดลง - /system
  • Android และสูงกว่า 9 - /system, /product, /vendor

ตลอดหน้านี้ /etc/permissions/priv-app มีมติให้ partition /etc/permissions/priv-app

ในอดีตผู้ผลิตอุปกรณ์มีการควบคุมน้อยกว่าซึ่งลายเซ็น | สิทธิ์ได้รับการยกเว้นจะได้รับอนุญาตในการปพลิเคชันที่มีสิทธิพิเศษ เริ่มต้นใน Android 8.0, ผู้ผลิตอย่างชัดเจนต้องให้สิทธิ์การได้รับสิทธิพิเศษในไฟล์ XML การกำหนดค่าระบบใน /etc/permissions ไดเรกทอรี สำหรับ Android 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

ไม่มีกฎเกณฑ์ที่เข้มงวดในการจัดระเบียบเนื้อหา พัฒนาระบบอุปกรณ์สามารถตรวจสอบโครงสร้างเนื้อหาตราบใดที่ปพลิเคชันทั้งหมดออกจาก /system/priv-app จะ allowlisted ตัวอย่างเช่น Google มีรายการที่อนุญาตเพียงรายการเดียวสำหรับแอปที่มีสิทธิพิเศษทั้งหมดที่พัฒนาโดย Google และแนะนำองค์กรต่อไปนี้

  • สิทธิ์สำหรับปพลิเคชันที่มีอยู่แล้วใน (AOSP) ต้นไม้ Android เปิดโครงการมามีการระบุไว้ใน /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 เพื่อใช้แท็ก "deny-permission" แทนแท็ก "permission" ตัวอย่าง:

<!-- 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