الأمان

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

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

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

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

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

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

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

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

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

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

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

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

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

لحصر عمليات تثبيت التطبيقات على 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 على سبيل المثال)، ولكنها لا تريد من الحساب الشخصي تثبيت التطبيقات. يمكن لوحدة التحكّم بسياسة الجهاز إعداد قائمة بالحسابات التي يمكن للمستخدمين استخدامها في Google Play.

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

لفرض قيود على الحسابات في 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 على الحساب المُدار الواحد فور تعرّف وحدة التحكّم بسياسة الجهاز على عنوان البريد الإلكتروني للحساب. تمنع السلسلة الفارغة الأشخاص من استخدام أي حساب في Google Play.

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

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

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

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

التحكم في إدارة الحسابات بعد إعادة الضبط على الإعدادات الأصلية

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

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

  1. تحصل وحدة التحكّم بسياسة الجهاز (DPC) على أرقام تعريف الحسابات (يدويًا أو آليًا) التي يمكنها توفير جهاز بعد إعادة الضبط على الإعدادات الأصلية.
  2. تستخدم وحدة التحكّم بسياسة الجهاز القيمة الخاصة "أنا" باعتبارها userId للإشارة إلى المستخدم الذي تمت مصادقته. يتم عرض المعرّف كسلسلة عدد صحيح. قد لا تكون الحسابات التي تم إنشاؤها حديثًا متاحة لأغراض إعادة الضبط على الإعدادات الأصلية لمدة 72 ساعة.
  3. تضع وحدة التحكّم بسياسة الجهاز قيودًا مناسبة للتطبيق باستخدام DevicePolicyManager.setApplicationRestrictions() لضبط قيم زوج المفتاح/القيمة في حزمة settings وللإشارة إلى الحزمة التي تنطبق عليها القيود:
    اسم المفتاح—factoryResetProtectionAdmin.
    قيمة المفتاح: سلسلة تحتوي على رقم تعريف حساب واحد يمكنه توفير جهاز تمت إعادة ضبطه على الإعدادات الأصلية أو مصفوفة سلسلة تحتوي على أرقام تعريف حسابات متعدّدة.
    اسم الحِزمة: com.google.android.gms.
  4. تفعِّل وحدة التحكّم بسياسة الجهاز الحسابات التي يمكنها توفير الأجهزة بعد إعادة الضبط على الإعدادات الأصلية من خلال إرسال بث com.google.android.gms.auth.FRP_CONFIG_CHANGED.

إيقاف حماية إعادة الضبط على الإعدادات الأصلية

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

  1. تضع وحدة التحكّم بسياسة الجهاز قيودًا مناسبة على التطبيق باستخدام DevicePolicyManager.setApplicationRestrictions() لضبط قيم زوج المفتاح/القيمة في حزمة settings وللإشارة إلى الحزمة التي تنطبق عليها القيود:
    اسم المفتاح—disableFactoryResetProtectionAdmin.
    قيمة المفتاح، وهي قيمة منطقية تبلغ true أو false (تلقائية).
    اسم الحِزمة: com.google.android.gms.
  2. تُعلِم وحدة التحكّم بسياسة الجهاز "خدمات Google Play" بهذا التغيير من خلال إرسال رسالة البث com.google.android.gms.auth.FRP_CONFIG_CHANGED.

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

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

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

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

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

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

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

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

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

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

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

adb shell dpm force-security-logs

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

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

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

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

منح حق الوصول إلى شهادة العميل وإزالته

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

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

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

بدون طريقة installKeyPair():

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

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

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

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

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

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

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

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

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

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

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

ضبط رمز مميز وتفعيله

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

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

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

يمكنك إنشاء رمز مميّز جديد في وحدة التحكّم بسياسة الجهاز (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 تبدأ عملية التأكيد. اشرح لمستخدم الجهاز في واجهة المستخدم السبب الذي تطلب منه المصادقة. يوضّح المقتطف أدناه كيفية تفعيل رمز مميّز في وحدة التحكّم بسياسة الجهاز:

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) التأكّد من أنّ الرمز المميّز نشط عن طريق استدعاء isResetPasswordTokenActive() والتحقّق من النتيجة هي true.

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

حذف رمز مميّز

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

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() مع إدخال الرمز المميّز الذي ضبطته وفعِّله مسبقًا لوحدة التحكّم بسياسة الجهاز:

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() لإزالة كلمة المرور.

اختبار الأمان الخاص بالملف الشخصي للعمل

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

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

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

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

الاعتبارات

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

للحصول على معلومات إضافية، يُرجى مراجعة getParentProfileInstance() والمستندات المرجعية ضمن DevicePolicyManager.