نصائح أمنيه 1

الإعلانات

نصائح أمنية

 

نصائح أمنيه

يحتوي اندرويد على ميزات أمان مضمنة، تقلل بشكلٍ كبير من تكرار\وتأثير مشكلات أمان التطبيق.

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

 

تساعدك ميزات الأمان الأساسية التالية، في إنشاء تطبيقات آمنة:

– تطبيق الحمايه Sandbox من اندرويد، و الذي يعزل تنفيذ بيانات وأكواد تطبيقك، عن التطبيقات الأخرى.

– إطار عمل التطبيق، بإستخدام تنفيذات قوية لوظائف الأمان الشائعة، مثل: التشفير، الأذونات، IPC الآمنة (الإتصالات بين العمليات).

– تقنيات مثل: ASLR و NX و ProPolice و safe_iop و OpenBSD dlmalloc و OpenBSD calloc و Linux mmap_min_addr لتخفيف المخاطر الشائعة، المرتبطة بأخطاء إدارة الذاكرة.

– نظام تشفير الملفات، والذي يمكن تمكينه لحماية البيانات، على الأجهزة المفقودة أو المسروقة.

– الأذونات الممنوحه من قبل المستخدم، لتقييد الوصول إلى ميزات النظام وبيانات المستخدم.

– أذونات معرّفة بواسطة التطبيق، للتحكم في بيانات التطبيق، لكل تطبيق.

من المهم أن تكون على دراية، بأفضل ممارسات أمان اندرويد، الواردة في هذا المستند.

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

 

 

 

نصائح أمنيه

 

تخزين البيانات


مصدر القلق الأمني الأكثر شيوعاً، لتطبيقٍ ما على اندرويد، هو ما إذا كانت البيانات التي تخزنها على الجهاز، يمكن الوصول إليها من خلال تطبيقات أخرى أم لا.

هناك ثلاث طرق أساسية لتخزين البيانات على الجهاز:

    • التخزين الداخلي
    • التخزين الخارجي
    • موفري المحتوى

الفقرات التاليه تصف مشكلات الأمان المتعلقة بكل نهج.

 

إستخدام التخزين الداخلي

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

يقوم اندرويد بتنفيذ هذه الحماية، وهي كافية لمعظم التطبيقات.

عموماً، تجنب وضعي MODE_WORLD_WRITEABLE أو MODE_WORLD_READABLE لملفات IPC، لأنها لا توفر القدرة على تقييد الوصول..

إلى البيانات في تطبيقات معينة، كما أنها لا توفر أي سيطرة على صيغ البيانات.

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

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

يمكنك تشفير الملفات المحلية بإستخدام مكتبة الأمانهذا الإجراء يمكنه توفير الحماية لجهاز مفقود، دون تشفير نظام الملفات.

 

 

إستخدام التخزين الخارجي

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

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

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

يجب عليك إجراء التحقق من صحة الإدخال، عند التعامل مع البيانات، الواردة من وحدة التخزين الخارجية، كما تفعل مع البيانات الواردة، من أي مصدر غير موثوق.

يجب ألا تخزن الملفات التنفيذية أو ملفات الفئة، على وحدة التخزين الخارجية، قبل التحميل الديناميكي.

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

 

 

 

نصائح أمنيه

إستخدام موفري المحتوى

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

إذا كنت لا تنوي، توفير إمكانية وصول التطبيقات الأخرى، إلى ContentProvider “موفري المحتوى” الخاصة بك، فقم بتمييزها بالسمة android:export=false  في ملف إيضاح التطبيق.

خلاف ذلك، قم بتعيين السمة android:exported على “true” للسماح للتطبيقات الأخرى بالوصول إلى البيانات المخزنة.

عند إنشاء ContentProvider “موفر المحتوى” والذي يتم تصديره للإستخدام من قبل التطبيقات الأخرى..

يمكنك تحديد إذن واحدة للقراءة والكتابة، أو يمكنك تحديد أذونات مستقلة للقراءة والكتابة.

يجب عليك قصر أذوناتك، على الأذونات المطلوبة، لإنجاز المهمة الحاليه.

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

إذا كنت تستخدم موفر المحتوى، لمشاركة البيانات بين تطبيقاتك فقط، فمن الأفضل إستخدام السمة  android:protectionLevel لتعيين حماية signature التوقيع.

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

عندما يتم توقيع التطبيقات، التي تصل إلى البيانات، بإستخدام نفس المفتاح.

 

 

نصائح أمنية

 

يمكن أيضاً لموفري المحتوى، توفير وصول أكثر دقة، من خلال الإعلان عن السمة android:grantUriPermissions

وإستخدام العلامات FLAG_GRANT_READ_URI_PERMISSION و FLAG_GRANT_WRITE_URI_PERMISSION في كائن الغرض Intent الذي ينشّط المكون.

يمكن تقييد نطاق هذه الأذونات بواسطة العنصر <grant-uri-permission>.

عند الوصول إلى موفر محتوى، إستخدم دوال إستعلام ذات معاملات، مثل: ()query، و ()update و ()delete لتجنب حقن SQL المحتمل، من مصادر غير موثوقه.

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

لا تملك شعور زائف بالأمان حول إذن الكتابة. تسمح إذن الكتابة، بعبارات SQL، و التي تجعل من الممكن تأكيد بعض البيانات، بإستخدام جمل WHERE الإبداعية، وتحليل النتائج.

على سبيل المثال، قد يبحث المهاجم عن وجود رقم هاتف معين، في سجل المكالمات، عن طريق تعديل صف، فقط إذا كان رقم الهاتف هذا موجوداً بالفعل.

إذا كانت بيانات موفر المحتوى، تملك بنية يمكن التنبؤ بها، فقد تمنح إذن الكتابة كلٍ من ميزتي القراءة والكتابة بشكلٍ متساوٍ.

 

 

 

 

نصائح أمنيه

إستخدام الأذونات


نظراً لأن نظام اندرويد يقوم بعزل\حماية التطبيقات عن بعضها البعض، يجب على التطبيقات، مشاركة المصادر والبيانات بشكلٍ صريح.

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

 

طلب الأذونات

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

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

بشكلٍ عام، إذا لم تكن الإذن مطلوبة لتشغيل تطبيقك، فلا تطلبها.

إذا كانت هناك ميزة، لا يمكن تشغيل التطبيق بدونها، فقم بإعلانها بإستخدام العنصر <uses-feature> في ملف الإيضاح.

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

لإنشاء معرف فريد، قم بإنشاء GUID “المعرف الفريد العالمي” لتطبيقك (انظر القسم الخاص بمعالجة بيانات المستخدم).

أو بدلاً من إستخدام وحدة التخزين الخارجية (التي تتطلب إذناً)، قم بتخزين البيانات على وحدة التخزين الداخلية.

بالإضافة إلى طلب الأذونات، يمكن لتطبيقك إستخدام عنصر <permission> لحماية IPC الحساسة للأمن، و المكشوفة لتطبيقات أخرى، مثل ContentProvider.

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

على سبيل المثال، ضع في إعتبارك إستخدام مستوى حماية التوقيع، على الأذونات، لإتصالات IPC بين التطبيقات التي يوفرها مطور واحد.

لا تسرب البيانات المحمية بإذن. يحدث هذا عندما يكشف تطبيقك البيانات عبر IPC، والتي أصبحت متاحة فقط لأن تطبيقك لديه إذن للوصول إلى تلك البيانات.

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

في الورقة البحثية إذن إعادة التفويض: الهجمات والدفاعات، المنشورة في USENIX.

 

 

 

 

 

نصائح أمنيه

 

إنشاء الأذونات

بشكلٍ عام، يجب أن تحاول تحديد أقل عدد ممكن من الأذونات، مع تلبية متطلبات الأمان الخاصة بك.

إنشاء إذن جديدة، غير شائع نسبياً لمعظم التطبيقات، لأن الأذونات المعرفة من قبل النظام، تغطي العديد من الحالات.

كلما كان ذلك ممكناً، قم بإجراء إختبارات الوصول، بإستخدام الأذونات الموجودة.

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

وتسمح بالوصول فقط من خلال التطبيقات الموقعة، من قبل المطور نفسه، كالتطبيق الذي ينفذ فحص الأذونات.

إذا كانت الإذن الجديدة لا تزال مطلوبة، فسيتم الإعلان عنها في ملف إيضاح التطبيق بإستخدام العنصر <permission>.

يمكن للتطبيقات التي ترغب في إستخدام الإذن الجديدة، الإشارة إليها عن طريق إضافة عنصر <uses-permission> في ملفات الإيضاح الخاصة بكلٍ منها.

يمكنك أيضاً إضافة أذونات بشكلٍ حيوي بإستخدام الدالة ()addPermission.

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

 

  • يجب أن تحتوي الإذن على سلسلة “string”، تشرح للمستخدم بدقة عن قرار الأمان المطلوب منه.
  • يجب ترجمة سلسلة الإذن إلى العديد من اللغات المختلفة.
  • يمكن للمستخدمين إختيار عدم تثبيت أحد التطبيقات، لأن الإذن مربكة أو تنطوي على مخاطر.
  • قد تطلب التطبيقات الإذن، عند عدم تثبيت مُنشئ الإذن.

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

 

 

 

 

 

نصائح أمنيه

إستخدام الشبكات


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

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

أن ينفذ تطبيقك كافة أفضل الممارسات، المتعلقة بالحفاظ على أمان بيانات المستخدم في جميع الأوقات.

 

 

 

نصائح أمنيه

إستخدام IP الشبكة

الشبكات على نظام اندرويد، لا تختلف عن بيئات لينوكس الأخرى. المراعاة الرئيسية هي، التأكد من إستخدام البروتوكولات المناسبة للبيانات الحساسة..

مثل HttpsURLConnection لتأمين حركة مرور الويب. يجب عليك إستخدام HTTPS بجانب HTTP في أي مكان تكون فيه HTTPS مدعومة على الخادم..

لأن الأجهزة المحمولة تتصل بشكلٍ متكرر، بشبكات غير مؤمنة، مثل نقاط إتصال Wi-Fi العامة.

يمكن تنفيذ الإتصالات ذات المصادقة والمشفرة، على مستوى السوكت بسهولة، بإستخدام فئة SSLSocket.

نظراً للتواتر الذي تتصل به أجهزة اندرويد، بشبكات لاسلكية غير آمنة بإستخدام Wi-Fi، يوصى بشدة بإستخدام الشبكات الآمنة..

لجميع التطبيقات التي تتصل عبر الشبكة. تستخدم بعض التطبيقات منافذ شبكة (المضيف المحلي “localhost “) لمعالجة IPC الحساسة.

يجب ألا تستخدم هذا النهج، لأن هذه الواجهات يمكن الوصول إليها، بواسطة تطبيقات أخرى على الجهاز. بدلاً من ذلك، استخدم آلية IPC للاندرويد..

حيث تكون المصادقة ممكنة، كما هو الحال عند إستخدام الخدمة. الربط بـ INADDR_ANY أسوأ من إستخدام

تدفق العناصر “loopback” لأنه عندها، قد يتلقى التطبيق طلبات من أي مكان.

تأكد من أنك، لا تثق في البيانات التي تم تنزيلها من بروتوكول HTTP أو البروتوكولات الأخرى الغير آمنة.

وهذا يشمل التحقق من صحة المدخلات في WebView وأي إستجابات على الأغراض الصادرة تجاه HTTP.

 

 

 

إستخدام شبكات الهاتف

تم تصميم بروتوكول الرسائل النصية القصيرة (SMS) بشكلٍ أساسي، للإتصال من مستخدم إلى آخر، وهو غير مناسب للتطبيقات التي ترغب في نقل البيانات.

بسبب القيود المفروضة على الرسائل القصيرة، يجب عليك إستخدام سحابة رسائل قوقل (GCM) و IP الشبكات..

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

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

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

أيضاً، يجب أن تكون على دراية بأن SMS عرضة لأن تكون خادعة و/أو يمكن إعتراضها على الشبكة.

على الجهاز الذي يعمل بنظام أندرويد نفسه، يتم إرسال رسائل SMS كأغراض بث، لذلك يمكن قراءتها أو إلتقاطها بواسطة..

تطبيقات أخرى لديها إذن “قراءة الرسائل النصية القصيرة” READ_SMS.

 

 

 

 

 

نصائح أمنيه

تنفيذ التحقق من صحة المدخلات


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

يحتوي نظام اندرويد على تدابير مضادة على مستوى النظام، والتي تقلل من تعرض التطبيقات لمشاكل التحقق من الصحة..

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

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

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

يوفر اندرويد عدداً من التقنيات مثل: ASLR و DEP التي تقلل من قابلية إستغلال هذه الأخطاء، لكنها لا تحل المشكلة الأساسية.

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

اللغات الديناميكية القائمة على السلسلة مثل: JavaScript و SQL تخضع أيضاً لمشاكل التحقق من صحة الإدخال، بسبب رموز الإلغاء وحقن السكربت.

إذا كنت تستخدم بيانات بداخل الإستعلامات، التي يتم إرسالها إلى قاعدة بيانات SQL أو موفر المحتوى، فقد يكون حقن SQL مشكلة.

أفضل دفاع هو، إستخدام طلبات البحث ذات المعاملات، كما تمت مناقشتها في القسم أعلاه حول موفري المحتوى.

يمكن أن يؤدي قصر الأذونات على القراءة فقط أو الكتابة فقط، إلى تقليل إحتمالية حدوث ضرر يتعلق بحقن SQL.

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

في حين أن القائمة السوداء للأحرف أو أحرف الإستبدال، يمكن أن تكون إستراتيجية فعالة، إلا أن هذه التقنيات عرضة للخطأ أثناء الممارسة، وينبغي تجنبها قدر الإمكان.

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد