مرحباً! يعد هذا المستودع جزءًا من هذه السلسلة من منشورات المدونة على تقنيات أمان API العملية. تمشي السلسلة خلال عملية الدفاع عن واجهة برمجة تطبيقات الأجهزة المحمولة مقابل مآثر مختلفة قد يستخدمها المهاجم للوصول إلى البيانات التي يحتفظ بها. في سيناريو العرض التوضيحي هذا ، يتيح الهجوم للمستخدمين الحقيقيين للنظام الحصول على ميزة تجارية غير عادلة على حساب الشركة.
يحتوي هذا المستودع على جميع المكونات الثلاثة المستخدمة لوصف قصة Shipfast:
لقد احتفظنا بجميع المشاريع الثلاثة في نفس المستودع ونظم الكود لتضمين جميع الخطوات من تقدم سلسلة المدونة. نأمل أن يجعل هذا الأمر أسهل في الفهم ككل.
بعد تعيين المشهد في منشور المدونة الأول ، توضح الإدخالات المتعاقبة كيف يمكن تعزيز (أو تجاوز) تدابير الأمان باستخدام روابط إلى الكود في مستودع GitHub عند الاقتضاء. قد يتم تلخيص سلسلة المدونة من خلال الإشارة إلى طريقة الأمان الرئيسية قيد المناقشة في كل واحدة:
نحن نقدم عمليات النشر المتاحة بحرية للخدمتين ومؤلفات APK لك للتنزيل والتثبيت ، حتى تتمكن من العمل معهما أثناء قراءة المدونة. تقدم الأقسام التالية ملخصًا موجزًا للخدمات التي نشرناها ، والتطبيقات التي نقدمها ، ومكان العثور على الكود المرتبط في هذا المستودع ، وحيث توجد تغييرات لكل منشور مدونة.
يمكن العثور على رمز API Shipfast في مجلد الخادم/Shipfast-API. يتم نشر الرمز في السحابة وإتاحته على https://shipfast.demo.approov.io.
يتم إصدار إصدار API Shipfast من v1 إلى v4 لمتابعة قصة المدونة ويمكنك الوصول إلى كل مرحلة باستخدام عناوين URL التالية:
تحتوي صفحة الإصدارات من هذا المستودع على APK لكل مرحلة. يتم إعدادها حتى تتمكن من تثبيت كل منهم مرة واحدة على جهاز Android الخاص بك (آسف لا iOS في الوقت الحالي).
رمز التطبيقات هو كل شيء في مشروع Androidstudio: App/Android/Kotlin/Shipfast.
لقد استخدمنا نظام ألوان مختلف في كل إصدار من التطبيق حتى تتمكن من تحديد أي شخص يعمل بسرعة:
لا تملك الألوان أي معنى خاص ، ولكن من الواضح أن الأخضر هو الأفضل.
تم إعداد خدمة الويب Rogue ، Shipraider ، من قِبل قراصنة شريرة لمساعدة سائقي Shipfast على الاستفادة من إكراميات عملاء Shipfast. يمكن العثور على الرمز في مجلد الخادم/Shipraider-Rogue-Web.
يتم تقديم كل إصدار من موقع الويب من مجال مختلف:
يتبع موقع Shipraider نفس نظام الألوان مثل تطبيقات الهاتف المحمول للتمييز بين الإصدارات.
أدناه نقدم نظرة عامة موجزة على التقنيات المستخدمة في سلسلة المدونة لقفل واجهة برمجة التطبيقات مع روابط للخطوط ذات الصلة من التعليمات البرمجية ونشر المدونة المرتبطة.
الطريقة الأكثر شيوعًا التي يستخدمها المطورون لتحديد ما هو تقديم طلب إلى خادم API هي استخدام سلسلة طويلة في رأس الطلب ، والتي تسمى غالبًا Api-Key ، انظر أول منشور المدونة.
مفاتيح API بسيطة للغاية في كل من الخادم والعميل. يضيف رمز التطبيق هذا المفتاح إلى كل طلب ، ويقوم الخادم بالتحقق من صحة الطلب من خلال فحص رأس بسيط ، كما هو موضح في هذا الرمز.
لسوء الحظ ، يعد تجاوز حماية مفتاح API أمرًا سهلاً أيضًا ، لأنه سرا تم توصيلها في كل طلب. تبدأ المدونة الثانية في السلسلة من خلال إظهار كيفية استخراج مفتاح API مع هجوم MITM (رجل في الوسط). ثم تتم إضافة المفتاح إلى موقع Shipraider لاستخدامه في الطلبات التي يقدمها إلى API Shipfast.
لتحسين الحماية ، يقدم منشور المدونة الثاني HMAC لتوقيع طلبات واجهة برمجة التطبيقات (API) رقميًا ، وبالتالي منعها من الاختطاف أو العبث. إنه أفضل من مفتاح API حيث أن الجزء السري لا يتم إرساله بشكل صريح من العميل إلى الخادم ، وفي هذا الإصدار يتم تضمينه بشكل ثابت في الكود.
يعد تطبيق HMAC أكثر تفصيلاً من تطبيق مفتاح API ، لكنه لا يزال بسيطًا. يمكنك التحقق من هذا الرمز لتطبيق خادم API ، وهذا الرمز لتطبيق تطبيق الجوال.
ومع ذلك ، إذا كان سر HMAC مرمزًا بقوة ، فلا يزال من السهل على المهاجم استخلاصه. يوضح منشور المدونة الثالث هذا باستخدام أدوات تحليل ثنائية المصدر المفتوحة للكشف عن سر HMAC والخوارزمية المرتبطة المستخدمة للتوقيع على الطلبات. بمجرد أن يتم نسخها عبر رمز Shipraider ، يمكن موقع Rogue على التشغيل مرة أخرى.
كشف سيناريو الهجوم الثاني أن استخدام سر ثابت لخوارزمية HMAC هو نقطة ضعف. الدفاع التالي هو استخدام سر ديناميكي ؛ واحد يتم حسابه في وقت التشغيل. يشرح منشور المدونة الثالث كيفية الجمع بين سر ثابت مع البيانات الديناميكية لإعطاء سر ديناميكي يمكن من خلاله تهيئة خوارزمية HMAC.
يمكن رؤية تطبيق تطبيق الجوال في هذه الأسطر من التعليمات البرمجية بينما يمكن رؤية ما يعادل خادم API هنا.
إن حساب سر HMAC في وقت التشغيل يجعل من الصعب تجاوزه ولكن ليس مستحيلًا. يحتاج المهاجم الآن إلى فهم قسم أكبر من الكود من أجل إعادة إنتاج السلوك في موقع Shipraider. يسرد منشور المدونة الرابع عدة أساليب لهذا الغرض ، مع إعطاء مثال أكثر تفصيلاً باستخدام APP RECOPADAGE و ANDROID Studio Debugger. مرة أخرى ، يمكن للمهاجم كتابة رمز مكافئ في Shipraider لمواصلة استخدام API Shipfast.
يقدم منشور المدونة الرابع مقياس الأمن النهائي في السلسلة. شاهد تطبيقات الهاتف المحمول هو مفهوم أمان API الذي تم تنفيذه في Evertov. باختصار ، يتحقق FEROV من التطبيق بأكمله والبيئة التي يتم تشغيلها قبل تمكين الوصول إلى API - التطبيق هو المفتاح . يمنحك درجة عالية من الثقة في أن وصول API الخاص بك مغلق إلى مثيلات شرعية لتطبيقك. تم وصف هذا النهج بمزيد من التفصيل في صفحة نظرة عامة على منتجاتنا وفي الورقة البيضاء المرتبطة.
إن تكامل Uperov بسيط بقدر ما يمكن أن يكون لمطوري تطبيقات الهاتف المحمول. أضف OPEROV SDK إلى بناءك ، ونأمل استخدام أحد [أمثلة تكامل QuickStart]] (https://approov.io/docs/latest/approov-integration-examples/mobile-app/) لتسريع العملية ثم الاتصال بـ SDK للحصول على مجموعة متضمنة على طلبات API. يمكنك رؤية ذلك في تطبيق ShipFast في ShipfastApp.kt ، ابحث عن الخطوط التي تسبقها // *** UNCOMMENT THE CODE BELOW FOR APPROOV *** .
يعد تكامل خادم API بسيطًا أيضًا: استخدم إحدى مكتبات JWT العديدة للتحقق من الرمز المميز للمربعة قبل الرد على طلبات API. يستخدم API Shipfast حزمة عقدة Express-JWT للتحقق من الرمز المميز لـ checkApproovToken .
تصف وثيقة الاستخدام المتقدمة خطوات البناء والنشر لكل من المكونات التي تشكل خدمات Shipfast و Shipraider. لمتابعة سلسلة المدونات ، عادة ما يكون ذلك كافياً لاستخدام الخدمات والتطبيقات التي يتم نشرها وصيانتها من قبل فريق FEROV ، وفي هذه الحالة لا تحتاج إلى متابعة هذا المستند. ومع ذلك ، ستحتاج إليها إذا حاولت تحدي الخماسي الاختياري ، الموصوف في نهاية آخر منشور المدونة.
تُظهر سلسلة المدونات ، ككل ، تحسنا تدريجيًا في أمان API من خلال ضمان أن الطلبات تأتي فقط من مصادر مشروعة. يتم استخدام المدونات والرمز في هذا المستودع لإظهار كيفية التحايل بسهولة على بعض آليات الحماية التي يتم استخدامها عادة في تطوير API. إنه يتوج بتكامل للاعتداء الذي يعطي أعلى درجة من الثقة في الطلبات التي تم التحقق منها من قبل API Shipfast. إذا كنت ترغب في استكشاف حل FERV في عمق أكثر ، فلماذا لا تجرب أحد الروابط التالية كنقطة انطلاق: