تأمين APIs في بوابة API
Zeping Bai
November 4, 2022
مقدمة
في يونيو 2021، تم تسريب ما يقرب من 92% من بيانات مستخدمي LinkedIn عبر واجهات برمجة التطبيقات (APIs) العامة التي تفتقر إلى ضوابط أمنية. البيانات التي تم الكشف عنها، والتي تم بيعها للعامة في السوق السوداء، شملت 700 مليون اسم مستخدم، بيانات شخصية، عناوين بريد إلكتروني، أرقام هواتف، وتفاصيل أخرى. على الرغم من أن LinkedIn تعتبر هذا الحدث عملية جمع للبيانات العامة وليس وصولًا غير مشروع، إلا أنه يسلط الضوء على أهمية إجراءات أمن واجهات برمجة التطبيقات.
كوصلة خارجية لتقديم الخدمات، تتعرض واجهات برمجة التطبيقات باستمرار لحركة مرور خارجية، وتواجه مهاجمين معادين يستخدمون هجمات حجب الخدمة، الحقن، والثغرات المعروفة للهجوم. على سبيل المثال، استغل المهاجمون عيوب log4j 2 في ديسمبر 2020 لتنفيذ هجمات غير مهيأة ضد واجهات برمجة التطبيقات. لذلك، من الضروري تعزيز قدرة واجهة برمجة التطبيقات على صد هؤلاء المهاجمين الخبثاء. ومع ذلك، قبل أن نتبنى إجراءات لتأمين واجهة برمجة التطبيقات، دعونا أولاً نفهم ما هي واجهة برمجة التطبيقات.
ما هي واجهة برمجة التطبيقات (API)؟
واجهة برمجة التطبيقات التقليدية (API) تعني المكتبات الثابتة أو الديناميكية للبرمجيات لاستدعاء وظائفها. يمكن للمطورين إعادة استخدام الوظائف التي توفرها البرمجيات الحالية بناءً على استدعاء واجهات برمجة التطبيقات الخاصة بها، مثل TCP/IP، التي توفرها أنظمة التشغيل.
مع تطور أنظمة البرمجيات والشبكات، يشير مصطلح "API" الآن إلى واجهات النظام التي يتم الوصول إليها عبر الشبكة. يستدعي العملاء هذه الواجهات باستخدام بروتوكولات مثل HTTP لأداء وظائف العميل، مثل الاستعلام عن واجهة برمجة التطبيقات الخاصة بالطقس للحصول على معلومات الطقس.
بمعناها الأصلي، تشير واجهة برمجة التطبيقات إلى قناة توفرها نظام البرمجيات للخدمات الأخرى، والتي تحدد مواصفات التشغيل المتبادل بين الأنظمة الفرعية المختلفة. على سبيل المثال، توفر خدمة المصادقة واجهات لتسجيل الدخول، التسجيل، والحصول على معلومات المستخدم. يمكن للخدمات الأخرى استخدام واجهات الاستدعاء هذه لإكمال وظيفة المصادقة. وبالمثل، من خلال واجهة برمجة التطبيقات، يمكن للأنظمة الفرعية التعاون لإنجاز مهمة التطبيق بأكمله.
ما هو أمن واجهات برمجة التطبيقات؟
بعد نظرة عامة على واجهات برمجة التطبيقات، سنقدم الآن أمن واجهات برمجة التطبيقات. أمن واجهات برمجة التطبيقات يتضمن ثلاث وجهات نظر رئيسية:
أمن المعلومات (InfoSec): من منظور المعلومات، تأكد من أن المعلومات محمية خلال دورة حياتها الكاملة من التوليد، النقل، التخزين، والتدمير.
أمن الشبكات (NetSec): من منظور الشبكة، تأكد من أن البيانات المنقولة عبر الشبكة لا يتم التنصت عليها أو العبث بها، وأنه لا يتم الوصول إلى الشبكة من قبل أفراد غير مصرح لهم.
أمن التطبيقات (AppSec): من منظور نظام التطبيق، تأكد من أن التطبيقات المطورة يمكنها منع الهجمات الخبيثة.
أمن واجهات برمجة التطبيقات هو تقاطع هذه الجوانب الثلاثة، مما يعني أن جميع الجوانب الثلاثة لا غنى عنها إذا كنت ترغب في القيام بعمل جيد في أمن واجهات برمجة التطبيقات.
الهجمات الشائعة على أمن واجهات برمجة التطبيقات
OWASP، مشروع أمن تطبيقات الويب المفتوح، نشر قائمة بعشر مشاكل أمنية شائعة لواجهات برمجة التطبيقات OWASP API Security Project | OWASP Foundation.
تشمل القائمة المشاكل التالية:
تفويض مستوى الكائن المعطوب: يصل المستخدمون إلى كائنات البيانات التي ليس لديهم إذن بالوصول إليها.
مصادقة المستخدم المعطوبة: خطأ في تنفيذ خدمة المصادقة يسمح للمستخدمين بتجاوز آلية المصادقة للوصول غير المشروع إلى واجهة برمجة التطبيقات.
التعرض المفرط للبيانات: السماح للمستخدمين بالحصول على بيانات حساسة مفرطة، والتي من المفترض أن تكون محظورة.
نقص الموارد والحد من المعدل: نقص القيود على عدد الموارد اللازمة لتلبية طلبات العملاء، وكذلك أحجام الطلبات الواقعية.
تفويض مستوى الوظيفة المعطوب: يصل المستخدمون إلى واجهة برمجة تطبيقات وظيفة ليس لديهم إذن بالوصول إليها. التعيين الجماعي: يقوم المستخدمون بتغيير البيانات التي ليس لديهم إذن بتحريرها عن طريق واجهة تم تطويرها بشكل غير صحيح.
التكوين الأمني الخاطئ: إجراءات أمنية غير صحيحة التكوين لواجهة برمجة التطبيقات.
الحقن: إدخال بيانات غير موثوقة يؤدي إلى حقن SQL، تنفيذ أوامر غير متوقعة، أو الوصول إلى البيانات.
إدارة الأصول غير السليمة: إدارة موارد واجهة برمجة التطبيقات بشكل غير صحيح، مثل إصدار واجهات برمجة التطبيقات لبيئات الاختبار أو الإصدارات القديمة غير الصحيحة من واجهات برمجة التطبيقات.
نقص التسجيل والمراقبة: من الصعب تحديد الشذوذات الأمنية باستخدام طرق التدقيق بسبب عدم وجود أدوات تسجيل ومراقبة لوصول واجهات برمجة التطبيقات.
بعد ملاحظة المشاكل الشائعة المتعلقة بأمن واجهات برمجة التطبيقات، ما الذي يجب تنفيذه لحماية واجهة برمجة التطبيقات؟
كيف تحمي واجهة برمجة التطبيقات الخاصة بك؟
فيما يتعلق بحماية واجهة برمجة التطبيقات، يمكن أيضًا اتخاذ إجراءات من ثلاث وجهات نظر:
أمن المعلومات (InfoSec): يمكننا بناء نظام سري للمعلومات يتوافق مع السياسات القانونية ومتطلبات الأمن لتجنب الكشف عن المعلومات الشخصية.
أمن الشبكات (NetSec): تشفير وتحقق من نقل البيانات ضروري.
أمن التطبيقات (AppSec): نحتاج إلى تعزيز أمن التطبيق.
فيما يلي بعض الممارسات الإضافية لأمن واجهات برمجة التطبيقات.
التشفير المستمر: يمكننا منع حالات التنصت على البيانات والعبث بها بسبب الشبكات غير المدارة من خلال إعداد TLS كامل التدفق. بالإضافة إلى ذلك، من الضروري أيضًا تمكين mTLS للتحقق من صحة جانب العميل لمنع الوصول غير المصرح به.
استخدام الرموز بحذر: نحتاج إلى الحذر عند استخدام JWTs لأنها تسمح للعميل بفك تشفيرها، مما قد يكشف عن معلومات سرية إذا تم استخدامها بشكل غير صحيح. بالإضافة إلى ذلك، سنواجه صعوبة عند إلغاء جلسة تسجيل دخول محددة لأن تطبيق إجراء الإلغاء معقد بسبب قيودها.
حبيبات صلاحيات أصغر: قم بتعيين الحد الأدنى من الصلاحيات للوصول إلى واجهة برمجة التطبيقات والبيانات لتجنب إمكانية الوصول غير المصرح به.
التحقق من الإدخال: لا تثق أبدًا بقيم إدخال العميل. يجب عليك التحقق من قيم إدخال العميل للتأكد من أنها تلبي متطلبات الأمان.
الحد من المعدل: قم بتقييد سرعة الوصول إلى واجهة برمجة التطبيقات. هذه الإجراءات تمنع هجمات حجب الوصول، والتي تحدث عندما يتم تحميل النظام بطلبات لا يمكنه التعامل معها جميعًا في وقت واحد.
التسجيل والمراقبة: تصميم آلية تسجيل ومراقبة مناسبة للنظام تمكننا من تحديد الأحداث الأمنية واتخاذ الإجراءات المناسبة بسرعة. يمكننا أيضًا العودة إلى الوراء بعد حدث أمني لتحديد الأنظمة والبيانات المتأثرة وتحديد مدى أي تسريبات محتملة للبيانات.
الإجراءات المذكورة أعلاه تتطلب منا إجراء تغييرات محددة على نظام التطبيق من خلال معالجة مكونات فردية، والتي ليست مكلفة للغاية فحسب، بل هي أيضًا عرضة لمشاكل إضافية.
كيف يمكننا تنفيذ إجراءات أمنية دون تعريض خدمات التطبيق للخطر؟
بوابات واجهات برمجة التطبيقات
توفر بوابات واجهات برمجة التطبيقات مسارًا جديدًا خارج تحويل النظام، مما يقلل بشكل كبير من تكلفة التحويل ويوفر إدارة مركزية وموحدة لحركة المرور الواردة. كما توفر بوابات واجهات برمجة التطبيقات ميزات أمنية غنية، مما يمكننا من منع وتسجيل الزيارات غير المصرح بها.
باستخدام Apache APISIX كمثال، سيصف القسم التالي عدة سيناريوهات تطبيقية لبوابات واجهات برمجة التطبيقات لتأمين واجهات برمجة التطبيقات.
التشفير (TLS/mTLS)
يمكنك ليس فقط تمكين TLS لواجهة برمجة التطبيقات لتوفير وصول HTTPS، ولكن أيضًا تمكين mTLS للتحقق من هوية العميل. وبطبيعة الحال، يمكنك أيضًا تمكين TLS/mTLS للخدمات الصاعدة لضمان أمان حركة المرور أثناء انتقالها عبر الشبكة الداخلية. يمكنك الرجوع إلى دليل mTLS لتمكين الوظيفة اللازمة.
التحقق من الهوية
يمكن تشفير جميع الاتصالات، ولكن هذا لا يضمن أمان واجهة برمجة التطبيقات. نتيجة لذلك، في إعدادات الأعمال الواقعية، يجب أن ندرج مكونات مرتبطة بالمصادقة. لمعالجة هذه المشكلة، يوفر APISIX مجموعة متنوعة من الإضافات المرتبطة بالمصادقة التي يمكن توصيلها بسهولة مع خدمات المصادقة الخارجية أو مباشرة عبر البوابة. تتراوح هذه الإضافات من البسيطة مثل LDAP، OpenID Connect، و Open Policy Agent إلى الأكثر تعقيدًا مثل Basic Auth، Key Auth، JWT Auth، و Forward Auth.
الحد من المعدل
نقص الموارد والحد من المعدل هما هجومان شائعان. بالنسبة لهذه الحالات، تحتوي البوابات عادةً على إضافات مرتبطة بالحد من المعدل؛ وكذلك يفعل Apache APISIX. يوفر ثلاث إضافات: limit-count، limit-req، و limit-conn، والتي توفر ميزات تحديد سرعة الطلب، قياس الطلب، والحد من الاتصال لواجهة برمجة التطبيقات. يمكن أن تساعد في التحكم بشكل فعال في ضغط الوصول إلى واجهة برمجة التطبيقات ومنع النظام من التحميل الزائد بطلبات غير قابلة للإدارة.
القيود الأمنية
يوفر APISIX إضافات CORS و CSRF لتوفير حماية من التزوير عبر النطاقات والمواقع لواجهة برمجة التطبيقات، مما يعزز قدرتها على حماية أمانها. بالإضافة إلى ذلك، تمكن إضافات القيود من حجب IP، UA، Referer، و URI، مما يمكن أن يعارض معظم هجمات واجهات برمجة التطبيقات.
التحقق من الإدخال
يوفر APISIX إضافة request-validation، والتي تسمح لمقدمي واجهة برمجة التطبيقات بالتحقق من إدخال المستخدم عبر jsonschema. يمكن استخدام لغة وصف البيانات المنظمة وقواعد التحقق بشكل جيد للتحقق من البيانات.
القدرة على المراقبة
الطرق المذكورة أعلاه هي جميعها طرق لحماية واجهة برمجة التطبيقات. ومع ذلك، لا يوجد نظام آمن تمامًا. بمجرد تعرض النظام للهجوم، يجب علينا التصرف بسرعة لتحديد سبب الهجوم ومنع المزيد من الضرر من الهجوم. نتيجة لذلك، يوفر APISIX أيضًا مجموعة واسعة من إضافات التسجيل، والتي يمكنها إرسال السجلات إلى وجهات مختلفة، بما في ذلك Kafka، Clickhouse، وحلول التسجيل كخدمة التي تقدمها مزودي السحابة مثل Google Cloud، Splunk، إلخ.
علاوة على ذلك، يوفر APISIX وظيفة تتبع الروابط مع الالتحاق بـ Skywalking، OpenTelemetry، وبرامج التتبع الأخرى.
بالإضافة إلى ذلك، يوفر APISIX إضافة Prometheus، والتي يمكنها حساب وتصدير المقاييس المرتبطة بطلبات واجهة برمجة التطبيقات إلى خدمة مراقبة Prometheus للمساعدة في تحديد مشاكل الأداء ومنع انقطاعات الخدمة النظامية.
يمكننا تحديد الأحداث الأمنية المحتملة في الوقت المناسب من خلال جعل النظام قابلًا للمراقبة بشكل كافٍ.
القدرات البرمجية
أخيرًا وليس آخرًا، يوفر APISIX أيضًا إضافة serverless لمعالجة الثغرات الأمنية اليومية (0-day)، مما يسمح للمستخدمين باستخدام كود Lua لتنفيذ بعض المنطق عند وصول الطلب. يمكننا الاستفادة من هذه الوظيفة لحظر بعض الثغرات الأمنية اليومية مؤقتًا عند ظهورها.
الخاتمة
أمن واجهات برمجة التطبيقات ضروري لمقدمي الخدمات، لذلك يجب على المطورين بذل جهد للحفاظ عليه محدثًا. لتوضيح كيفية استخدام بوابات واجهات برمجة التطبيقات في إعدادات تطبيق مختلفة، يستخدم هذا المقال Apache APISIX كمثال، وهي استراتيجية جديدة تختلف عن تعديل النظام التي تساعد المطورين على تقليل تكلفة القضايا الأمنية.