استخدام غير آمن لواجهة برمجة التطبيقات

فئة OWASP: MASVS-PLATFORM: Platform Interaction

نظرة عامة

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

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

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

تحدث المخاطر المرتبطة ببيانات وخدمات واجهة برمجة التطبيقات عند عدم استخدام مصادقة وعناصر تحكّم في الوصول آمنة بدرجة كافية.

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

التأثير

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

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

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

إجراءات التخفيف

Stateful API

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

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

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

تنفيذ معالجة الأخطاء وتسجيلها بشكل صحيح:

  • التعامل مع أخطاء OAuth بشكل سليم وواضح وتسجيلها لأغراض تصحيح الأخطاء
    • سيساعدك تقليل فرص الاختراق أيضًا في تحديد أي مشاكل قد تنشأ وحلّها.
    • تأكَّد من أنّ أي رسائل يتم تسجيلها أو عرضها للمستخدم واضحة، ولكن لا تتضمّن معلومات مفيدة للمهاجم.

ضبط بروتوكول OAuth بأمان في التطبيق:

  • أرسِل المَعلمة redirect_uri إلى كلّ من نقطتَي النهاية الخاصة بالتفويض والرمز المميّز.
  • إذا كان تطبيقك يستخدم بروتوكول OAuth مع خدمة تابعة لجهة خارجية، عليك إعداد سياسة مشاركة الموارد المشتركة المصادر (CORS) للحدّ من الوصول إلى موارد تطبيقك.
    • سيساعد ذلك في منع هجمات النصوص البرمجية على المواقع الإلكترونية (XSS) غير المصرَّح بها.
  • استخدِم المَعلمة state لمنع هجمات تزوير الطلبات عبر المواقع.

استخدام مكتبة أمان:

  • ننصحك باستخدام مكتبة أمان، مثل AppAuth، لتسهيل تنفيذ مسارات OAuth الآمنة.
    • يمكن أن تساعد مكتبات Android هذه في أتمتة العديد من أفضل ممارسات الأمان المذكورة سابقًا.

يتم توضيح طرق المصادقة الأخرى، بما في ذلك رموز Firebase المميزة ورموز Google المميزة، في مستندات OpenAPI.

Stateless API

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

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

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

توفّر Play Integrity API إمكانية التحقّق من سلامة التطبيق والطلبات. يمكن أن يحدّ ذلك من بعض السيناريوهات التي يمكن فيها إساءة استخدام هذا الإذن. في ما يتعلق بإدارة المفاتيح، في كثير من الحالات، يكون مخزن المفاتيح هو أفضل مكان لتخزين المفاتيح الخاصة بشكل آمن.

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

المراجع