אותות של מודל אבטחה של אפס אמון

ב-Android יש מגוון אותות למכשיר שבאמצעותם אדמינים יכולים לקבוע את מצב האבטחה של המכשיר. במודל אבטחה של אפס אמון, האותות האלה משמשים כדי להעריך אם צריך לתת למכשיר גישה למידע הארגוני.

תכונה תיאור מכשירים בניהול מלא פרופיל עבודה במכשירים בבעלות החברה פרופיל עבודה במכשירים בבעלות אישית (BYOD) מכשירים לא מנוהלים
Play Integrity API ברוקר נאמנות יכול לאחזר את האותות הבאים:
  • תקינות המכשיר
  • תקינות האפליקציה
  • פרטי הרישיון ב-Play
  • פרטי הסביבה, כולל קביעת ההגדרה החדשה של Play Protect
  • כן כן כן כן
    מצב חומרה מאובטח / אימות עם מפְתח מתווך Trust יכול לאמת שפרטי הכניסה ל-PKI נוצרו ואוחסנו בחומרה מאובטחת. כן כן כן כן
    אימות (attestation) של מאפייני מכשיר כחלק מהאימות עם המפתח, אפשר לכלול את מאפייני המכשיר כחלק מרשומת האימות כן כן כן כן
    רמת תיקון האבטחה של המכשיר ברוקר מהימנות יכול לאמת את רמת תיקון האבטחה של מערכת ההפעלה כן כן כן כן
    האם במכשיר יש OTA בהמתנה הכלי לניהול מהימנות יכול לבדוק אם יש עדכון זמין למערכת ההפעלה של המכשיר כן כן כן לא רלוונטי
    רמת תיקון האבטחה הראשית ברוקר Trust יכול לקרוא את רמת תיקון האבטחה של הרכבת הראשית שמותקנת כן כן כן כן
    מזהה ספציפי להרשמה ברוקר Trust יכול לגשת למזהה מכשיר ייחודי וספציפי לאותו ארגון. המזהה הזה עדיין לא תקף מיצירה מחדש של פרופיל עבודה ומאיפוס להגדרות המקוריות של המכשיר כן כן כן לא רלוונטי
    מצב ניהול (וניהול האפליקציה) הברוקר יכול להשתמש בהגדרה הזו כדי לקבוע אם מכשיר מנוהל כן כן כן לא רלוונטי
    הצפנת דיסק מתווך מהימנות יכול לבדוק אם המכשיר מוצפן (אם נדרשת תמיכה ב-Android 8) כן כן כן כן
    גרסת מערכת ההפעלה הברוקר יכול לבדוק את גרסת מערכת ההפעלה של המכשיר ולאשר שהיא חורגת מגרסה מסוימת כן כן כן כן
    מצב הרשת (מצב הרשת ומצב ה-Wi-Fi) ברוקר Trust יכול לקבל מידע על מצב הרשת הפעילה (סלולרית ו-Wi-Fi) כן כן כן כן
    גישה למצב ה-Wi-Fi (Android 11 ומטה, Android 12 ואילך תומכים גם בהתקשרות חזרה וגם בגישה לפי דרישה) מתווך מהימנות יכול לקבל מידע על רשת ה-Wi-Fi הפעילה כן כן כן כן
    הגדרות לשרת proxy מתווך אמון יכול לקבל מידע על הגדרות ברירת המחדל הנוכחיות של שרת ה-proxy ל-HTTP. כן כן כן כן
    בדיקת איכות של נעילת מסך הברוקר יכול לוודא שמוגדרת במכשיר נעילת מסך באיכות מסוימת לפני שהוא נותן גישה כן כן כן כן
    האפשרויות למפתחים מופעלות ברוקר מהימנות יכול לזהות שלמכשיר יש שכבת התקפה רחבה יותר כשאפשרויות למפתחים מופעלות כן כן כן כן
    האם DNS ב-TLS מופעל ברוקר Trust יכול להשתמש בכך כדי לוודא שהמצב 'שרת DNS פרטי' מופעל כן כן כן כן
    SafetyNet גלישה בטוחה מתווך מהימנות יכול לקבוע אם כתובת URL מסוימת סווגה על ידי Google כאיום ידוע. כן כן כן כן
    התקנה של מדיה חיצונית אפשר לקבל הודעה לסוחר מהימנות כשמתבצעת טעינה של אחסון חיצוני כן כן כן כן
    UsageStatsManager ברוקר Trust יכול לחקור דפוסי שימוש של אפליקציות ספציפיות כן כן כן כן1
    רישום אבטחה ברוקר Trust יכול למנף את הנתונים האלה כחלק ממנוע ההקשר שלו כדי להבטיח תאימות וליצור טביעת אצבע שמבוססת על התנהגות כן כן2 כן2 לא רלוונטי
    רישום רשת ביומן ברוקר Trust יכול למנף את הנתונים האלה כחלק ממנוע ההקשר שלו כדי להבטיח תאימות וליצור טביעת אצבע שמבוססת על התנהגות כן כן2 כן2 לא רלוונטי
    NetworkStatsManager ברוקר Trust יכול להריץ שאילתות על השימוש ברשת של האפליקציה בפרק זמן נתון כן כן כן2 כן1
    הרשאות גישה לחבילה (פירוט כל האפליקציות במכשיר) מתווך מהימנות יכול לבדוק אילו אפליקציות מותקנות במכשיר כן כן3 כן3 כן
    קריאת מצב הטלפון ברוקר Trust יכול לקבל מידע על הרשת הסלולרית, הסטטוס של השיחות השוטפות ורשימה של PhoneAccount שרשומות במכשיר כן כן כן כן
    הפעם האחרונה שבה המכשיר הופעל מחדש מתווך מהימנות יכול לקבל זמן פעולה תקינה של המערכת כן כן כן כן
    יצירת חשבונות ברוקר מהימנות יכול להשתמש באפשרות הזו כדי לגשת לרשימת החשבונות בשירות החשבונות. כן כן3 כן3 כן1
    מעקב אחר שינויים משמעותיים ברמת הסוללה ברוקר מהימנות יכול לעקוב אחר שינויים משמעותיים ברמת הסוללה כן כן כן כן
    מיקום (מהימן, לא גס וכו') לסוכן מהימנות יש גישה למיקום הפיזי של המכשיר כן כן כן1 כן1

    1 בהסכמת המשתמש

    2 פרופיל עבודה בלבד

    3 הגישה מוגבלת לפרטי פרופיל העבודה

    ברוקר Trust יכול לגשת ל-PackageInfo של המודול com.google.android.modulemetadata ולאחזר ממנו את versionName:

    private fun mainlineVersion(context: Context): String? {
        val moduleProvider = "com.google.android.modulemetadata"
    
        return try {
                val pm = context.packageManager
                val packageInfo = pm.getPackageInfo(moduleProvider, 0)
                packageInfo.versionName
            } catch (e: PackageManager.NameNotFoundException) {
                null
            }
    }
    

    אפשר לנתח את המחרוזת שהוחזרה לאובייקט Date באמצעות המחלקה SimpleDateFormat:

    private val VERSION_NAME_DATE_PATTERNS = Arrays.asList(
          "yyyy-MM-dd",
          "yyyy-MM"
    )
    
    private fun parseDateFromVersionName(text: String): Date? {
        for (pattern in VERSION_NAME_DATE_PATTERNS) {
            try {
                val simpleDateFormat = SimpleDateFormat(
                    pattern,
                    Locale.getDefault()
                )
                simpleDateFormat.timeZone = TimeZone.getDefault()
                return simpleDateFormat.parse(text)
            } catch (e: ParseException) {
                // ignore and try next pattern
            }
        }
        return null
    }
    

    חשוב לזכור שב-Android מגרסה 11 ואילך צריך להוסיף הצהרת שאילתה בקובץ AndroidManifest.xml כדי לעמוד בהרשאות הגישה של חבילות של Android:

    <manifest package="com.example.game">
        <queries>
            <package android:name="com.google.android.modulemetadata" />
        </queries>
        ...
    </manifest>
    

    הכלי לניהול מהימנות יכול להשתמש בשיטות האלה כדי לבדוק אם המכשיר נמצא במצב ניהול ואיזה מצב ניהול פעיל.

    חיפוש של ניהול מכשירים

    אפשר להשתמש בפונקציה getActiveAdmins() כדי לבדוק אם מכשיר מנוהל. אם השיטה הזו מחזירה null, המכשיר לא מנוהל.

    חיפוש מכשיר מנוהל באופן מלא

    באמצעות isDeviceOwnerApp() אפשר לבדוק אם המכשיר מנוהל באופן מלא.

    איך מחפשים את פרופיל העבודה במכשיר בבעלות החברה

    אפשר להשתמש ב-isOrganizationOwnedDeviceWithManagedProfile() כדי לבדוק אם המכשיר משתמש במצב של ניהול פרופיל עבודה למכשירים בבעלות החברה.

    חיפוש של פרופיל עבודה במכשיר בבעלות אישית

    משתמשים בפונקציה isProfileOwnerApp() כדי לבדוק אם למכשיר יש פרופיל עבודה ומוודאים ש-isOrganizationOwnedDeviceWithManagedProfile() מחזיר false.