علاج الثغرة الأمنية "التشفير غير الآمن"

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

طريقة إصلاح المشاكل الواردة في تنبيهات "أنماط التشفير غير الآمن" 

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

   // يشير تنبيه وحدة التحكم إلى هذه الطريقة
  public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

  // المفتاح غير الآمن ومتّجه التهيئة موجودان في هذا الموضع ويجب تغييرهما
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

القيم المحسوبة بشكلٍ ثابت
القيمة المحسوبة بشكلٍ ثابت هي قيمة ثابتة عند تنفيذ كل تطبيق، حيث يمكن استخراج قيم التشفير المحسوبة بشكلٍ ثابت من تطبيقك واستخدامها لمهاجمة بيانات التطبيق المشفَّرة. وحتى إذا كنت تعالِج المفاتيح ومتّجهات التهيئة والقيم العشوائية بطرق معقدة قبل الاستخدام، تظل غير آمنة في حال تطابُق طرق المعالجة هذه في كل تنفيذ للبرامج.

أفضل الممارسات في نظام التشغيل Android
ننصح بتفعيل ميزة Jetpack Security للحصول على تشفير متماثل. وإذا كان تطبيقك يشفِّر مفاتيح واجهة برمجة التطبيقات أو معلومات تحديد الهوية الشخصية أو البيانات الحسّاسة الأخرى، يمكن استخدام EncryptedSharedPreferences لتخزين هذه البيانات بأمان دون القلق بشأن تنفيذ المفاتيح السرية ومتّجهات التهيئة والقيم العشوائية. يتوفّر المزيد من أفضل الممارسات والأمثلة على هذه الصفحة. ولنقل البيانات بأمان إلى أنظمة أخرى، يجب أن يستخدم مطوّرو البرامج طبقة النقل الآمنة/طبقة المقابس الآمنة لتأمين البيانات أثناء نقلها. 

يستخدم نظام Jetpack Security مشروع البرامج المفتوحة المصدر Tink من Google للتعامل مع التشفير المتماثل الذي تمت مصادقته. وبالنسبة إلى حالات الاستخدام المتقدمة في ما يتعلق بعمليات التشفير ذات المستوى الأدنى، نقترح استخدام Tink مباشرةً.

إذا لم تتوافق أفضل الممارسات في نظام التشغيل Android المذكورة آنفًا مع حالة استخدامك، وكان مطلوب منك إدارة المفاتيح ومتّجهات التهيئة والقيم العشوائية بشكلٍ صريح، ننصح باتّباع هذه المعايير:

  1. المفاتيح السرية: يجب أن تحافظ المفاتيح السرية المتماثلة على سريتها وأن تكون غير متوقعة. ولتشفير البيانات المحلية، يجب على مطوّري البرامج إنشاء مفاتيح سرية باستخدام العشوائية الآمنة بطريقة مشفَّرة (أو من البيانات التي ينشئها المستخدمون في حال استخدام PBEKeySpecs)، كما يجب عليهم تخزين المفاتيح السرية باستخدام AndroidKeystore
  2. متّجهات التهيئة: يجب أن تكون متّجهات التهيئة فريدة وغير متوقعة في رسائل متعددة ولكن لا حاجة لأن تكون سرية، حيث يجب أن ينشئ مطوّرو البرامج متّجهات تهيئة باستخدام "العشوائية الآمنة بطريقة مشفَّرة". ويجب أن يخزّن مطوّرو البرامج متّجهات التهيئة أو يرسلوها مع النص المشفَّر المرتبط بها.
  3. القيم العشوائية: يجب أن تكون القيم العشوائية فريدة وغير متوقعة في تجزئات متعددة ولكن لا حاجة لأن تكون سرية، حيث يجب أنْ ينشئ مطوّرو البرامج قيمًا عشوائية باستخدام "العشوائية الآمنة بطريقة مشفَّرة". ويجب أن يخزّن مطوّرو البرامج القيم العشوائية أو يرسلوها مع التجزئات المرتبطة بها.

الخطوات التالية

  1. حدِّث تطبيقك باستخدام الخطوات الموضَّحة أعلاه.
  2. سجِّل الدخول إلى حسابك على Play Console وأرسِل الإصدار المحدَّث من تطبيقك.
ستتم مراجعة تطبيقك مرة أخرى. وإذا لم يتم تحديث التطبيق بشكلٍ صحيح، سيستمر التحذير في الظهور. ويمكن أن تستغرق هذه العملية عدة ساعات.

تسرّنا مساعدتك

إذا كان لديك أسئلة فنية بشأن الثغرات الأمنية، يمكنك طرحها على موقع Stack Overflow واستخدام العلامة "android-security".
 

هل كان ذلك مفيدًا؟

كيف يمكننا تحسينها؟
false
القائمة الرئيسية
4902434207676338661
true
مركز مساعدة البحث
true
true
true
true
true
5016068
false
false