סינון של קריאות מערכת ל-GPU

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

הטמעה

כדי להקשיח את המכשיר באמצעות סינון מדויק של קריאות מערכת, צריך להפעיל את מאקרו set_xperm_filter במדיניות SE של המכשיר, למשל:

# set_xperm_filter(target_context, allowed_target, unpriv_ioctls, restricted_ioctls, instrumentation_ioctls)
# Allow targets to harden their IOCTL interfaces by specifying
# unprivileged, blocked, and instrumentation-specific IOCTLs for appdomain.
#
# Parameters:
#   target_context: The target context to apply the filter to.
#   allowed_target: Additional `appdomain` target to exempt from hardened policy.
#     Allows for an allowlist of services, or gating by a target SDK.
#   unpriv_ioctls: IOCTLs to allow across appdomain.
#   restricted_ioctls: IOCTLs to deny across appdomain.
#   instrumentation_ioctls: IOCTLs intended to be used in development.
#     IOCTLs will be allowed from `shell` or `debuggable` applications.

define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')
set_xperm_filter(
  gpu_device,
  untrusted_app_sdk_gate,
  unpriv_ioctls,
  restricted_ioctls,
  instrumentation_ioctls)

הגדרת המאקרו של set_xperm_filter נמצאת ב-system/sepolicy/public/te_macros.

המאקרו מאפשר unpriv_ioctls, חוסם restricted_ioctls ומגביל את instrumentation_ioctls לתהליך shell או לאפליקציות debuggable. המסנן חל על אפליקציות שמתחילות מtarget_sdk שצוין.

התכונה הזו הוטמעה במכשירי Pixel עם מעבד גרפי מסוג Mali (מכשירי Pixel 6-9). חברת Arm סיפקה סיווג רשמי של פקודות ה-IOCTL שלה בגרסה r54p2 שלה, במסמך Documentation/ioctl-categories.rst. הרשימה הזו תמשיך להתעדכן בגרסאות עתידיות של מנהלי ההתקנים.

בדיקה

כדי לוודא את ההתנהגות של מנהל ההתקן של ליבת המערכת:

  • בודקים שהדרייבר לא חוסם פקודות IOCTL לגיטימיות של אפליקציות, וגם

  • מוודאים שאפליקציות לא מהימנות לא יכולות להפעיל מכשור ו-IOCTL מוגבלים.