ב-Android 16 QPR2 נוסף מאקרו של SELinux כדי להקשיח את מנהלי ההתקנים של ליבת המערכת. המאקרו הזה חוסם IOCTL מוגבלים בסביבת הייצור, כמו IOCTL שהוצאו משימוש או IOCTL לפיתוח של מנהלי התקנים של ליבת המערכת. היא גם מגבילה את פקודות ה-IOCTL לניתוח פרופילים של מנהלי התקנים לאפליקציות שניתנות להרצה בשורת הפקודה או לניפוי באגים. אפשר להשתמש במאקרו הזה כדי לשפר את האבטחה של המכשיר.
הטמעה
כדי להקשיח את המכשיר באמצעות סינון מדויק של קריאות מערכת, קוראים למאקרו set_xperm_filter במדיניות האבטחה של המכשיר, לדוגמה:
# 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 עד Pixel 9). חברת Arm סיפקה סיווג רשמי של פקודות ה-IOCTL שלה ב-
Documentation/ioctl-categories.rst של הגרסה r54p2 שלה.
הרשימה הזו תמשיך להתעדכן בגרסאות עתידיות של מנהלי ההתקנים.
בדיקה
כדי לוודא את התנהגות מנהל ההתקן של ליבת מערכת ההפעלה:
בודקים שהדרייבר לא חוסם פקודות IOCTL לגיטימיות של אפליקציות, וגם
מוודאים שאפליקציות לא מהימנות לא יכולות להריץ מכשור ו-IOCTL מוגבלים.