الأمان

تصف الميزات الواردة في هذا الدليل إمكانيات إدارة الأمان التي يمكنك استخدامها تنفيذها في تطبيق وحدة التحكّم بسياسة الجهاز (DPC). هذا المستند يتضمن عيّنات تعليمات برمجية ويمكنك أيضًا استخدام تطبيق Test DPC مصدر رمز نموذجي لميزات المؤسسة في Android.

يمكن تشغيل تطبيق وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي على الأجهزة الشخصية أو في مالك الجهاز. على الأجهزة المُدارة بالكامل. يشير هذا الجدول إلى الميزات المتوفرة. عند تشغيل وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي أو وضع مالك الجهاز:

الميزة مالك الملف الشخصي مالك الجهاز
إيقاف الوصول إلى التطبيقات
حظر التطبيقات من مصادر غير معروفة
حظر الحسابات في Google Play
تفعيل ميزة "توفير الحماية بعد إعادة الضبط على الإعدادات الأصلية للمؤسسات"
مراقبة سجلات عمليات المؤسسة وتقارير الأخطاء عن بُعد
منح إذن الوصول إلى شهادة عميل وإزالة إذن الوصول إليها
إعادة ضبط رمز المرور الآمن
اختبار الأمان في ملف العمل

إيقاف الوصول إلى التطبيقات

للمؤسسات التي تريد حظر الموظفين من اللعب أو مشاهدة يستخدمون YouTube على أجهزتهم التي تعمل بنظام تشغيل Android في أوقات معينة من اليوم في أيام معينة من الأسبوع، يمكن لوحدة التحكّم بسياسة الجهاز (DPC) إيقاف الوصول إلى التطبيقات مؤقتًا.

لإيقاف الوصول إلى التطبيقات، تعمل وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الجهاز أو مالك الملف الشخصي. تضبط setPackagesSuspended()، وسيعمل التطبيق المحدَّد كما لو فقد تم إيقافه (يظهر مشغّل Google باللون الرمادي للتطبيق). عندما ينقر المستخدم على التطبيق، سيظهر لهم مربع حوار نظام يفيد بأنّ التطبيق معلّق.

أثناء تعليق التطبيق، لا يمكنه بدء الأنشطة وإرسال الإشعارات إلى إلغاء الحزمة. لا تظهر الحزم المعلّقة في النظرة العامة. الشاشة، ولا يمكنها عرض مربعات الحوار (بما في ذلك الإشعارات المحمصة وأشرطة الوجبات الخفيفة)، كما أنها يتعذَّر تشغيل الصوت أو اهتزاز الجهاز.

يمكن لمشغّلات التطبيقات معرفة ما إذا تم تعليق التطبيق من خلال الاتصال isPackageSuspended(). للحصول على تفاصيل حول كيفية ضبط التطبيق التعليق، راجع setPackagesSuspended.

حظر التطبيقات من مصادر غير معروفة

في ما يلي التطبيقات التي لم يتم تثبيتها من Google Play (أو غيرها من متاجر التطبيقات الموثوق بها). يُسمى تطبيقات من مصادر غير معروفة. يمكن أن تكون الأجهزة والبيانات أكثر عرضةً للخطر عند تثبيت المستخدمين لهذه التطبيقات.

لمنع أحد الأشخاص من تثبيت تطبيقات من مصادر غير معروفة، يجب أن تتضمن مكونات المشرف الأجهزة المُدارة بالكامل والملفات الشخصية للعمل إضافة القيود المفروضة على المستخدمين في DISALLOW_INSTALL_UNKNOWN_SOURCES.

القيود على مستوى الجهاز لملف العمل

عندما يضيف مشرف الملف الشخصي للعمل DISALLOW_INSTALL_UNKNOWN_SOURCES، لا تنطبق القيود إلا على ملف العمل. ومع ذلك، فإن مشرف العمل تقييدًا على مستوى الجهاز من خلال ضبط الإعداد المُدار في Google Play. القيد على مستوى الجهاز هو متوفّرة في الإصدار 8.0 من نظام التشغيل Android (أو الإصدارات الأحدث) عندما يكون تطبيق Google Play المثبّت الإصدار 80812500 أو إصدار أحدث.

لحصر عمليات تثبيت التطبيقات على Google Play، اتّبع الخطوات التالية:

  1. إعداد حزمة إعدادات مُدارة لحزمة Google Play com.android.vending
  2. في الحزمة، ضع قيمة منطقية المفتاح verify_apps:device_wide_unknown_source_block.
  3. أضِف القيود المفروضة على المستخدمين في ENSURE_VERIFY_APPS.

يوضّح المثال التالي كيفية التأكّد من أنّ Google Play يتيح ذلك ونضبط القيمة على true:

Kotlin

internal val DEVICE_WIDE_UNKNOWN_SOURCES = "verify_apps:device_wide_unknown_source_block"
internal val GOOGLE_PLAY_APK = "com.android.vending"

// ...

// Add the setting to Google Play's existing managed config. Supported in
// Google Play version 80812500 or higher--older versions ignore unsupported
// settings.
val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
var existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

// Make sure that Google Play Protect verifies apps.
dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS)
dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES)

Java

static final String DEVICE_WIDE_UNKNOWN_SOURCES =
    "verify_apps:device_wide_unknown_source_block";
static final String GOOGLE_PLAY_APK = "com.android.vending";

// ...


// Add the setting to Google Play's existing managed config. Supported in
// Google Play version 80812500 or higher--older versions ignore unsupported
// settings.
DevicePolicyManager dpm =
    (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
Bundle existingConfig =
    dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DEVICE_WIDE_UNKNOWN_SOURCES, true);
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

// Make sure that Google Play Protect verifies apps.
dpm.addUserRestriction(adminName, UserManager.ENSURE_VERIFY_APPS);
dpm.addUserRestriction(adminName, UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);

تظل واجهة المستخدم في إعدادات النظام نشطة، ولكن النظام يحظرها تثبيت التطبيق. ويؤثر هذا القيد في عمليات التثبيت المستقبلية، التي كانت سابقًا التطبيقات المثبّتة على الجهاز. يمكن لمستخدمي الجهاز مواصلة تثبيت التطبيقات. في ملفك الشخصي باستخدام Android Debug Bridge (adb).

لمزيد من المعلومات حول المصادر غير المعروفة، يُرجى الاطّلاع على التوزيع البديل. الخيارات.

حصر إمكانية الوصول إلى حسابات في Google Play

في بعض الأحيان، قد ترغب إحدى المؤسسات في السماح للأشخاص بإضافة حسابات Google الحسابات (لقراءة البريد في Gmail على سبيل المثال) ولكن لا تريد الحساب الشخصي حساب لتثبيت التطبيقات. يمكن لوحدة التحكّم بسياسة الجهاز (DPC) إعداد قائمة بالحسابات التي يمكن للأشخاص استخدامها في Google Play.

يمكن لمكونات المشرف للأجهزة المُدارة بالكامل أو الملفات الشخصية للعمل تقييد الحسابات من خلال ضبط ضبط مُدار لـ Google Play. الحساب تتوفّر القيود عندما يكون الإصدار 80970100 من تطبيق Google Play المثبّت هو أو أعلى.

لفرض قيود على الحسابات في Google Play، يمكنك اتّباع الخطوات التالية:

  1. إعداد حزمة إعدادات مُدارة لحزمة Google Play com.android.vending
  2. في الحزمة، ضع عناوين البريد الإلكتروني مفصولة بفواصل كقيمة سلسلة المفتاح allowed_accounts.

يوضّح المثال التالي كيفية وضع حد أقصى لعدد الحسابات:

Kotlin

internal val ALLOWED_ACCOUNTS = "allowed_accounts"
internal val GOOGLE_PLAY_APK = "com.android.vending"

// ...

// Limit Google Play to one work and one personal account. Use
// a comma-separated list of account email addresses (usernames).
val googleAccounts = "ali@gmail.com,ali.connors@example.com"

// Supported in Google Play version 80970100 or higher.
val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

Java

static final String ALLOWED_ACCOUNTS = "allowed_accounts";
static final String GOOGLE_PLAY_APK = "com.android.vending";

// ...


// Limit Google Play to one work and one personal account. Use
// a comma-separated list of account email addresses (usernames).
String googleAccounts = "ali@gmail.com,ali.connors@example.com";

// Supported in Google Play version 80970100 or higher.
Bundle existingConfig =
    dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putString(ALLOWED_ACCOUNTS, googleAccounts);
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

لقصر Google Play على حساب العمل فقط، اضبط allowed_accounts على حساب مُدار واحد حالما تعرِف وحدة التحكّم بسياسة الجهاز (DPC) عنوان البريد الإلكتروني للحساب. إنّ تمنع السلسلة الفارغة المستخدمين من استخدام أي حساب في Google Play.

تفعيل ميزة "توفير الحماية للمؤسسات بعد إعادة الضبط على الإعدادات الأصلية"

ومن خلال استخدام ميزة "توفير الحماية بعد إعادة الضبط على الإعدادات الأصلية للمؤسسات"، يمكن للمؤسسات تحديد يمكن لحسابات Google توفير المتطلبات اللازمة لجهاز تمت إعادة ضبطه على الإعدادات الأصلية.

تم تصميم ميزة "توفير الحماية بعد إعادة الضبط على الإعدادات الأصلية للمستهلكين" لمنع سرقة الأجهزة. قبل السماح لأي شخص بإدارة الجهاز بعد إعادة تعيين إعدادات المصنع بشكل غير مصرح به (مثل إدارة الخدمات الجوّالة للمؤسسات (EMM)، يتطلب معالج الإعداد من المستخدم المصادقة مقابل أي حسابات Google التي كانت في السابق على الملف الشخصي للجهاز.

في بيئة المؤسسات، تعد إعادة تعيين إعدادات المصنع أداة مهمة لإدارة أجهزة الموظفين عند مغادرة أي موظف للمؤسسة. ومع ذلك، إذا كانت عدم معرفة المؤسسة لبيانات اعتماد حساب الموظف، أو إعادة الضبط على الإعدادات الأصلية يمكن أن يؤدي الحماية إلى منع قدرة المؤسسة على إصدار جهاز إلى جهاز آخر الموظف.

التحكُّم في توفير المتطلبات اللازمة بعد إعادة الضبط على الإعدادات الأصلية

عند التشغيل في وضع مالك الجهاز، يمكن لوحدة التحكّم بسياسة الجهاز (DPC) استخدام setFactoryResetProtectionPolicy() للتحكّم في الحسابات أن يكون لديك الإذن بإدارة جهاز بعد إعادة ضبطه على الإعدادات الأصلية. إذا كانت هذه التكوين تم ضبطها على null أو تم ضبطها على قائمة فارغة، فالحسابات المُصرّح لها بإدارة حسابات الجهاز بعد إعادة تعيين إعدادات المصنع هي الحسابات الموجودة على الملف الشخصي الخاص بك.

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضبط هذه الحسابات طوال فترة بقاء حساب مُدار بالكامل. الخاص بك.

  1. يمكن لمشرف تكنولوجيا المعلومات استخدام الطريقة people.get من People API. بالقيمة الخاصة me. يسترد هذا الإجراء سمة userId الحساب الذي سجّلت الدخول إليه. يتم عرض userID في المفتاح resourceName في على النموذج people/[userId] كسلسلة عدد صحيح. قد تتضمن الحسابات التي تم إنشاؤها حديثًا لن تكون متاحة لأغراض إعادة الضبط على الإعدادات الأصلية لمدة 72 ساعة.
  2. قد تحتاج أيضًا إلى السماح لواحد أو أكثر من مشرفي تكنولوجيا المعلومات بفتح قفل الجهاز بعد إعادة تعيين إعدادات المصنع. اطلب من كل من مشرفي تكنولوجيا المعلومات هؤلاء تسجيل الدخول إلى حساباتهم على Google اتباع الخطوة 1 أيضًا ومشاركة userId معك، حتى تتمكن من إضافة userIds إلى القائمة في الخطوة التالية.
  3. وتضع وحدة التحكّم بسياسة الجهاز (DPC) قيودًا مناسبة على التطبيق باستخدام setFactoryResetProtectionPolicy() لضبط قائمة userId التي يمكنها توفير جهاز تمت إعادة ضبطه على الإعدادات الأصلية.
  4. تعمل وحدة التحكّم بسياسة الجهاز (DPC) على تفعيل الحسابات التي يمكنها توفير الأجهزة بعد المصنع. إعادة الضبط من خلال إرسال البث com.google.android.gms.auth.FRP_CONFIG_CHANGED كنية صريحة لـ من خلال منع السقوط بسبب القيود التي تفرضها الخلفية.

Kotlin

const val ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

// List of userId that can provision a factory reset device.
// You can use the value returned calling people/me endpoint.
val accountIds = listOf("000000000000000000000")

dpm.setFactoryResetProtectionPolicy(
    adminName,
    FactoryResetProtectionPolicy.Builder()
        .setFactoryResetProtectionAccounts(accountIds)
        .setFactoryResetProtectionEnabled(true)
        .build()
)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

// List of userId that can provision a factory reset device.
// You can use the value returned calling people/me endpoint.
List<String> accountIds = new ArrayList<String>();
accountIds.add("000000000000000000000");

dpm.setFactoryResetProtectionPolicy(
    adminName,
    new FactoryResetProtectionPolicy.Builder()
        .setFactoryResetProtectionAccounts(accountIds)
        .setFactoryResetProtectionEnabled(true)
        .build());

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

معيار قديم

بالنسبة إلى الأجهزة التي لا يمكنها استخدام setFactoryResetProtectionPolicy()، تتوفر هذه الميزة مع المستوى 30 من واجهة برمجة التطبيقات، يمكن لوحدة التحكّم بسياسة الجهاز استخدام setApplicationRestrictions لإضافة الحسابات المختارة إلى إعدادات factoryResetProtectionAdmin المُدارة لحزمة com.google.android.gms.

Kotlin

const val GOOGLE_PLAY_APK = "com.android.vending"
const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"
const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false)
newConfig.putString(FACTORY_RESET_PROTECTION_ADMIN, googleAccounts)
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String GOOGLE_PLAY_APK = "com.android.vending";
static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin";
static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

Bundle existingConfig =
        dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, false);
newConfig.putStringArray(FACTORY_RESET_PROTECTION_ADMIN,
        accountIds.toArray(new String[accountIds.size()]));
dpm.setApplicationRestrictions(adminName, GOOGLE_PLAY_APK, newConfig);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

إيقاف ميزة "توفير الحماية بعد إعادة الضبط على الإعدادات الأصلية للمؤسسات"

لإيقاف الحماية بعد إعادة الضبط على الإعدادات الأصلية، يمكن لوحدة التحكُّم بسياسة الجهاز (DPC) استخدام setFactoryResetProtectionPolicy()تم تمرير القيمة null.

Kotlin

const val ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

dpm.setFactoryResetProtectionPolicy(adminName, null)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String ACTION_FRP_CONFIG_CHANGED =
    "com.google.android.gms.auth.FRP_CONFIG_CHANGED";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

dpm.setFactoryResetProtectionPolicy(adminName, null);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

معيار قديم

بالنسبة إلى الأجهزة التي لا يمكنها استخدام setFactoryResetProtectionPolicy()، تتوفر هذه الميزة مع المستوى 30 من واجهة برمجة التطبيقات، يمكن لوحدة التحكّم بسياسة الجهاز استخدام setApplicationRestrictions لضبط مفتاح. قيمة true في disableFactoryResetProtectionAdmin المُدارة لحزمة com.google.android.gms.

Kotlin

const val GOOGLE_PLAY_APK = "com.android.vending"
const val FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin"
const val DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin"
const val GMSCORE_PACKAGE = "com.google.android.gms"

// ...

val existingConfig = dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK)
val newConfig = Bundle(existingConfig)
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true)

dpm.setApplicationRestrictions(
    adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions
)

val frpChangedIntent = Intent(ACTION_FRP_CONFIG_CHANGED)

frpChangedIntent.setPackage(GMSCORE_PACKAGE)
context.sendBroadcast(frpChangedIntent)

Java

static final String GOOGLE_PLAY_APK = "com.android.vending";
static final String FACTORY_RESET_PROTECTION_ADMIN = "factoryResetProtectionAdmin";
static final String DISABLE_FACTORY_RESET_PROTECTION_ADMIN = "disableFactoryResetProtectionAdmin";
static final String GMSCORE_PACKAGE = "com.google.android.gms";

// ...

Bundle existingConfig =
        dpm.getApplicationRestrictions(adminName, GOOGLE_PLAY_APK);
Bundle newConfig = new Bundle(existingConfig);
newConfig.putBoolean(DISABLE_FACTORY_RESET_PROTECTION_ADMIN, true);

dpm.setApplicationRestrictions(
    adminName, GOOGLE_PLAY_SERVICES_PACKAGE, restrictions);

Intent frpChangedIntent = new Intent(ACTION_FRP_CONFIG_CHANGED);

frpChangedIntent.setPackage(GMSCORE_PACKAGE);
context.sendBroadcast(frpChangedIntent);

راقِب سجلّات عمليات المؤسسة وتقارير الأخطاء عن بُعد

يمكن للمشرف في وحدة تحكّم إدارة الخدمات الجوّالة للمؤسسات (EMM) مراقبة الأجهزة المُدارة بالكامل باستخدام حساب Enterprise. وسجلات العمليات وتقارير الأخطاء عن بُعد.

تسجيل نشاط أجهزة المؤسسة

وحدة التحكّم بسياسة الجهاز (DPC) التي تعمل في وضع مالك الجهاز يمكنها رصد الأنشطة المريبة عن بُعد تتبع نشاط الأجهزة، بما في ذلك عمليات إطلاق التطبيقات، Android Debug Bridge (adb) والنشاط وعمليات فتح قفل الشاشة. لا تتطلّب سجلّات العمليات موافقة المستخدم.

لتفعيل التسجيل أو إيقافه، تطلب وحدة التحكّم بسياسة الجهاز setSecurityLoggingEnabled().

عند توفُّر حزمة جديدة من السجلّات، يتلقّى DeviceAdminReceiver onSecurityLogsAvailable() معاودة الاتصال. لاسترداد السجلات (بعد تلقي معاودة الاتصال)، طلب وحدة التحكّم بسياسة الجهاز (DPC) retrieveSecurityLogs().

يمكن لوحدات التحكّم بسياسة الجهاز (DPC) أيضًا استدعاء retrievePreRebootSecurityLogs() لاسترجاع الأمان. السجلات التي تم إنشاؤها في دورة إعادة التشغيل السابقة. هذا هو الفاصل الزمني بين آخر إعادة تشغيل للجهاز وإعادة تشغيله السابقة. الأجهزة غير المتوافقة تُرجع retrieveSecurityLogs() مبلغ null. إذا كان تطبيقك يسترد السجلّات باستخدام كليهما retrievePreRebootSecurityLogs() وretrieveSecurityLogs()، عليك إجراء ما يلي: للتحقق من الإدخالات المكررة.
ملاحظة: لا تسجِّل هذه الميزة إلا النشاط على الأجهزة المُدارة بالكامل باستخدام حساب المستخدم أو المستخدمين التابعين على الجهاز. لا تعمل هذه الميزة على الأجهزة الشخصية، لأنها تسجِّل الأنشطة على مستوى الجهاز.

يمكن أن يكون هذا الإعداد مفيدًا في تدقيق ما بعد الحدث الأمني لأنه يسجل الأنواع التالية من الإجراءات:

  • في كل مرة يتم فيها تشغيل التطبيق حديثًا. يمكن أن يساعد هذا في تحديد ما إذا كانت هناك برنامج ضار يبدأ بتطبيق مخترَق.
  • محاولات غير ناجحة لفتح القفل على الجهاز. قد يحدد هذا ما إذا كانت هناك عدة محاولات فاشلة لفتح القفل خلال فترة زمنية قصيرة.
  • أوامر Adb التي قد تسبّب ضررًا عندما يتصل المستخدِم الجهاز إلى كمبيوتر باستخدام كابل USB.

للحصول على تفاصيل عن كيفية قراءة السجلّات، يُرجى الاطّلاع على SecurityLog.

أثناء التطوير والاختبار، يمكنك إجبار النظام على اتخاذ أي إجراء وسجلات الأمان الحالية والمتاحة لوحدة التحكّم بسياسة الجهاز، ولن تحتاج إلى الانتظار حتى اكتمال . في Android 9.0 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، شغِّل ما يلي: الأمر Android Debug Bridge (adb) في الوحدة الطرفية:

adb shell dpm force-security-logs

يقيّد النظام عدد المرات التي يمكنك فيها استخدام الأداة ويُبلغ عن أي التباطؤ المتعمد في الإخراج الطرفي. إذا كانت هناك سجلات متاحة، تتلقّى وحدة التحكّم بسياسة الجهاز (DPC) معاودة الاتصال onSecurityLogsAvailable().

طلب تقرير خطأ عن بُعد

وحدة التحكّم بسياسة الجهاز (DPC) التي تعمل في وضع مالك الجهاز يمكنها طلب تقارير أخطاء للمستخدم عن بُعد الأجهزة التي بها مستخدم واحد فقط أو مستخدمون تابعون. يسجّل تقرير الأخطاء نشاط الجهاز في اللحظة المحددة التي يتم فيها طلب تقرير الخطأ، تضمين النشاط من الساعات القليلة الماضية، اعتمادًا على عدد المرات التي يستخدم فيها Logcat عمليات إعادة تحميل المخزن المؤقت.

لطلب تقارير الأخطاء عن بُعد، تطلب وحدة التحكّم بسياسة الجهاز requestBugreport():

منح إمكانية الوصول إلى شهادة عميل وإزالة الإذن بالوصول إليها

في حال منح وحدة التحكّم بسياسة الجهاز (DPC) في وضع مالك الملف الشخصي أو مالك الجهاز تطبيقًا تابعًا لجهة خارجية القدرة على إدارة الشهادات، يمكن للتطبيق منح نفسه إمكانية الوصول إلى شهادات يثبّتها المستخدم بدون تدخل أي مستخدم. لتثبيت شهادة يمكن لجميع التطبيقات في ملف شخصي الوصول إليها، استخدِم installKeyPair().

لمعرفة المَعلمات التي يجب ضبطها، يُرجى الاطّلاع على installKeyPair(). هذه الميزة مع واجهة برمجة التطبيقات الحالية لإدارة الشهادات.

سيناريو النشر

بدون استخدام الطريقة installKeyPair():

  • على المستخدمين النقر على اسم الشهادة ثم النقر على السماح في كل مرة. ما يريدون منحه إمكانية الوصول إلى شهادة.
  • يظهر للمستخدمين إشعار عند تثبيت شهادة ويجب عليهم تسمية الشهادة.

باستخدام الطريقة installKeyPair():

  • لا يحتاج المستخدمون إلى النقر على سماح في كل مرة يريدون فيها منح إمكانية الوصول إلى الشهادة.
  • لا يمكن للمستخدمين إعادة تسمية الشهادات.
  • يتمتع المشرفون بقدرٍ أكبر من التحكم في أنه يمكنهم حظر الشهادات التطبيقات التي يجب ألا تمتلك إمكانية الوصول إلى شهادات محدّدة.

إزالة شهادة عميل

بعد منح حق الوصول إلى شهادة عميل، يمكن إزالة العميل عن بُعد الشهادات التي تم تثبيتها من خلال installKeyPair()، اتصال removeKeyPair()

وحدة التحكّم بسياسة الجهاز (DPC) التي تعمل في وضع مالك الجهاز أو وضع مالك الملف الشخصي أو مفوَّضة بإمكان أداة تثبيت الشهادة استدعاء removeKeyPair(). يؤدي هذا إلى إزالة تم تثبيت الشهادة وزوج المفتاح الخاص باسم مستعار محدد للمفتاح الخاص.

سيناريو النشر

استخدِم هذه الميزة في حال نقل بيانات إحدى المؤسسات إلى نموذج أكثر أمانًا من العملاء. الشهادة. إذا طرح المشرف شهادة جديدة، وتوزيعها وقتًا طويلاً، فيمكن للمشرف إبطال الشهادات بعد اكتمال عملية الترحيل.

إعادة ضبط رمز المرور الآمن

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) إعادة ضبط كلمة مرور المستخدم من خلال السماح بإجراء التغيير باستخدام ومسجل مسبقًا وآمن. يمكن لمالكي الجهاز ومالكي الملفات الشخصية الاتصال بأمان واجهات برمجة التطبيقات لإعادة ضبط رمز المرور لتغيير كلمة مرور الأجهزة والملفات الشخصية للعمل على التوالي. تحلّ إعادة ضبط رمز المرور الآمن محلّ resetPassword() التحسينات التالية:

يجب استخدام إعادة ضبط رمز المرور الآمن إذا كان إصدار وحدة التحكّم بسياسة الجهاز (DPC) يستهدف الإصدار Android 8.0 (واجهة برمجة التطبيقات). المستوى 26) أو أعلى. يؤدي الاتصال بـ resetPassword() إلى طرح SecurityException في وحدات التحكّم بسياسة الجهاز (DPC) التي تستهدف الإصدار 8.0 من نظام التشغيل Android أو الإصدارات الأحدث، لذلك تحتاج إلى تعديل وحدة التحكّم بسياسة الجهاز.

إعداد رمز مميّز وتفعيله

يجب ضبط رمز مميّز وتفعيله في وحدة التحكّم بسياسة الجهاز قبل إعادة ضبط كلمة المرور. لأنّ قد لا تتمكن وحدة التحكّم بسياسة الجهاز من استخدام الرمز المميّز على الفور، بل تضبط الرمز مسبقًا قد يحتاج مشرف تكنولوجيا المعلومات إلى استخدامه.

الرمز المميز لإعادة تعيين كلمة المرور هو قيمة عشوائية قوية من الناحية المشفرة وتحتاج إلى أن يبلغ طولها 32 بايت على الأقل. أنشئ رمزًا مميزًا لكل جهاز وملف شخصي - لا تفعل إعادة استخدام أو مشاركة الرموز المميزة التي تم إنشاؤها

ننصحك بتخزين الرموز المميّزة أو وسائل فك تشفير الرموز المميّزة المشفَّرة على الخادم. في حال تخزين الرموز المميّزة محليًا في مساحة تخزين مشفّرة لبيانات الاعتماد، ستلاحظ أنّ وحدة التحكّم بسياسة الجهاز (DPC) لا يمكنه إعادة ضبط كلمة المرور حتى يفتح المستخدم قفل الجهاز أو الملف الشخصي. إذا كنت وتخزين الرموز المميزة محليًا في مساحة التخزين المشفرة على الجهاز، والتي تتعرض للاختراق، وقد يستخدم المهاجم الرمز المميز للوصول إلى ملف شخصي للعمل أو المستخدم.

يمكنك إنشاء رمز مميّز جديد في وحدة التحكّم بسياسة الجهاز (DPC) أو استرجاع رمز مميّز من الخادم. تشير رسالة الأشكال البيانية وحدة التحكّم بسياسة الجهاز (DPC) تنشئ رمزًا مميّزًا بحد ذاته وتبلِغ عنه الخادم:

Kotlin

val token = ByteArray(32)

// Generate a new token
val random = SecureRandom()
random.nextBytes(token)

// Set the token to use at a later date
val success: Boolean
success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(context), token)

// Activate the token and update success variable...

// Store the token on a server
if (success) {
 sendTokenToServer(token)
}

Java

byte token[] = new byte[32]; // Minimum size token accepted

// Generate a new token
SecureRandom random = new SecureRandom();
random.nextBytes(token);

// Set the token to use at a later date
boolean success;
success = dpm.setResetPasswordToken(DeviceAdminReceiver.getComponentName(getContext()), token);

// Activate the token and update success variable ...

// Store the token on a server
if (success) {
 sendTokenToServer(token);
}

في معظم الحالات، تحتاج وحدة التحكّم بسياسة الجهاز إلى تفعيل رمز مميّز بعد إعداده. ولكن عندما إذا لم يكن لدى المستخدم كلمة مرور لشاشة القفل، يفعِّل النظام رمزًا مميزًا مباشرةً. لتفعيل رمز مميّز، اطلب من المستخدم تأكيد بيانات الاعتماد الخاصة به. يمكن لوحدة التحكّم بسياسة الجهاز (DPC) استدعاء طريقة KeyguardManager createConfirmDeviceCredentialIntent() للحصول على Intent تبدأ التأكيد. اشرح لمستخدم الجهاز في واجهة المستخدم وسبب يطلب منهم المصادقة. يوضح المقتطف أدناه كيفية تنشيط الرمز المميّز في وحدة التحكّم بسياسة الجهاز (DPC):

Kotlin

// In your DPC, you'll need to localize the user prompt
val ACTIVATE_TOKEN_PROMPT = "Use your credentials to enable remote password reset"
val ACTIVATE_TOKEN_REQUEST = 1

// Create or fetch a token and set it in setResetPasswordToken() ...
val keyguardManager = context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
val confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(null, ACTIVATE_TOKEN_PROMPT)

if (confirmIntent != null) {
 startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST)
 // Check your onActivityResult() callback for RESULT_OK
} else {
 // Null means the user doesn't have a lock screen so the token is already active.
 // Call isResetPasswordTokenActive() if you need to confirm
}

Java

// In your DPC, you'll need to localize the user prompt
static final String ACTIVATE_TOKEN_PROMPT =
 "Use your credentials to enable remote password reset";
static final int ACTIVATE_TOKEN_REQUEST = 1;

// Create or fetch a token and set it in setResetPasswordToken() ...

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
Intent confirmIntent = keyguardManager.createConfirmDeviceCredentialIntent(
  null, ACTIVATE_TOKEN_PROMPT);

if (confirmIntent != null) {
 startActivityForResult(confirmIntent, ACTIVATE_TOKEN_REQUEST);
 // Check your onActivityResult() callback for RESULT_OK
} else {
 // Null means the user doesn't have a lock screen so the token is already active.
 // Call isResetPasswordTokenActive() if you need to confirm
}

يجب تفعيل رمز مميّز تضبطه وحدة التحكّم بسياسة الجهاز قبل إعادة تشغيل الجهاز. جهاز Android يخزن رمزًا مميزًا غير منشط في الذاكرة ولا يحتفظ بالرمز المميز بعد إعادة التشغيل. إذا أعاد المستخدم تشغيل الجهاز قبل تفعيل رمز مميّز، يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضبط الرمز المميز نفسه مرة أخرى أو إنشاء رمز مميز جديد.

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) التأكّد من أنّ الرمز المميّز نشط من خلال طلب isResetPasswordTokenActive() والتحقق من النتيجة هي true.

بعد أن تضبط وحدة التحكّم بسياسة الجهاز رمزًا مميّزًا وتفعّله، يكون صالحًا إلى أن تحذفه وحدة التحكّم بسياسة الجهاز أو يستبدل الرمز المميز (أو تتم إعادة ضبط الجهاز على الإعدادات الأصلية). يُعد الرمز المميز مستقلاً عن كلمة المرور ولا تتأثر بتغيير المستخدم لكلمة المرور أو محوها.

حذف رمز مميّز

يمكنك الاتصال بـ clearResetPasswordToken() لحذف رمز مميّز أرسلته وحدة التحكّم بسياسة الجهاز. المحددة مسبقًا. قد تحتاج إلى إبطال رمز مميّز مُختَرق أو قد تحتاج إلى إزالة إمكانية إعادة تعيين كلمة المرور. يوضح النموذج أدناه كيفية تنفيذ هذا في وحدة التحكّم بسياسة الجهاز (DPC):

Kotlin

val dpm = getDpm()
val admin = DeviceAdminReceiver.getComponentName(requireActivity())

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

Java

DevicePolicyManager dpm = getDpm();
ComponentName admin = DeviceAdminReceiver.getComponentName(getActivity());

// Clear the token
if (!dpm.clearResetPasswordToken(admin)) {
 // Report the failure and possibly try later ...
}

إعادة ضبط كلمة المرور

عندما يحتاج أحد مشرفي تكنولوجيا المعلومات إلى إعادة ضبط كلمة المرور، اتصل resetPasswordWithToken() ومرِّر الرمز المميّز الذي ضبطته وحدة التحكّم بسياسة الجهاز (DPC) وتفعيلها. مسبقًا:

Kotlin

val token: ByteArray = getTokenFromServer()
val newPassword = "password"

try {
 val result: Boolean = dpm.resetPasswordWithToken(
 DeviceAdminReceiver.getComponentName(requireContext()),
 newPassword,
 token,
 0
 )

 if (result) {
 // The password is now 'password'
 } else {
 // Using 'password' doesn't meet password restrictions
 }
} catch (e: IllegalStateException) {
 // The token doesn't match the one set earlier.
}

Java

byte token[] = getTokenFromServer();
String newPassword = "password";

try {
 boolean result = dpm.resetPasswordWithToken(
  DeviceAdminReceiver.getComponentName(getContext()), newPassword, token, 0);

 if (result) {
 // The password is now 'password'
 } else {
 // Using `password` doesn't meet password restrictions
 }
} catch (IllegalStateException e) {
 // The token doesn't match the one set earlier.
}

عند الاتصال بـ resetPasswordWithToken()، يتم عرض مبلغ false، على عكس كلمة المرور تغييرها، عندما لا تتوافق كلمة المرور الجديدة مع القيود التالية:

  • يتوافق عدد الأحرف مع أي قيد على الحد الأدنى لطول كلمة المرور. اتصل getPasswordMinimumLength() لمعرفة ما إذا كان قسم تكنولوجيا المعلومات المشرف على وضع قيد على الطول.
  • يفي نطاق الأحرف وتعقيدها في كلمة المرور مع تكوين . اتصل بالرقم getPasswordQuality() لمعرفة ما إذا كان أحد موظفي تكنولوجيا المعلومات فرض قيود على التركيبة.

إذا كانت قيود جودة كلمة المرور لا تتطلب تعيين كلمة مرور، يمكنك: تمرير null أو سلسلة فارغة إلى resetPasswordWithToken() لإزالة وكلمة المرور.

اختبار الأمان لملف العمل

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) التي تعمل في وضع مالك الملف الشخصي أن تطلب من المستخدمين تحديد مستوى أمان. للتطبيقات التي تعمل في ملف العمل. يعرض النظام مستوى الأمان. التحدي عندما يحاول المستخدم فتح أي تطبيق من تطبيقات العمل. إذا نجح المستخدم في إكمال التحدي الأمني، يفتح النظام قفل ملف العمل وفك تشفيره، إذا لزم الأمر.

آلية عمل اختبار الأمان في ملف العمل

  1. إذا أرسلت وحدة التحكّم بسياسة الجهاز (DPC) هدف ACTION_SET_NEW_PASSWORD، سيطلب منك النظام إعداد تحدٍ أمني للمستخدم.
  2. يمكن لوحدة التحكّم بسياسة الجهاز أيضًا إرسالACTION_SET_NEW_PARENT_PROFILE_PASSWORD مطالبة المستخدم بضبط قفل للجهاز

يمكن لوحدة التحكّم بسياسة الجهاز (DPC) ضبط سياسات كلمة المرور لاختبار التحقق من العمل بشكل مختلف عن السياسات الخاصة بكلمات مرور الأجهزة الأخرى. على سبيل المثال، الحد الأدنى لطول يمكن أن تختلف سرعة استجابة الجهاز عن المدة المطلوبة كلمات المرور. تحدّد وحدة التحكّم بسياسة الجهاز سياسات التحدي باستخدام DevicePolicyManager، مثل setPasswordQuality() setPasswordMinimumLength()

الاعتبارات

  • يمكن لوحدة التحكُّم بسياسة الجهاز (DPC) إعادة ضبط كلمة المرور على ملف العمل، ولكن لا يمكنها إعادة ضبط كلمة مرور الجهاز (الشخصية). في حال اختار المستخدم ضبط كلمات مرور للعمل وكلمات مرور شخصية نفسه، ثم يتسبب الجزء resetPassword() في ملف العمل في إعادة ضبط كلمة المرور على ملف العمل فقط، ولن تكون كلمة المرور هي نفسها كضبط لشاشة قفل الجهاز.
  • يمكن لوحدة التحكّم بسياسة الجهاز تخصيص شاشة بيانات الاعتماد لتحدّي العمل باستخدام setOrganizationColor() وsetOrganizationName()
  • لا يمكن لمشرفي الجهاز استخدام resetPassword() لمحو كلمات المرور أو تغييرها. تلك التي تم تعيينها بالفعل. لا يزال بإمكان مشرفي الجهاز ضبط كلمة مرور، ولكن فقط عندما لا يتضمن الجهاز كلمة مرور أو رقم تعريف شخصي أو نقش

للحصول على معلومات إضافية، يمكنك الاطّلاع على getParentProfileInstance() والمرجع. ضمن DevicePolicyManager.