أصدرت شركة تقنية للخدمات اللوجستية مفاتيح API لثلاثة وأربعين شريك تكامل وتطبيقًا داخليًا على مدى أربع سنوات. ووجدت مراجعة أمنية أن أحد عشر مفتاحًا من الثلاثة والأربعين صدرت لتطبيقات أو تكاملات لم تعد نشطة: فإما أن التطبيق أُوقف، أو أن العلاقة مع شريك التكامل انتهت، أو أن حالة الاستخدام استُبدلت بتطبيق مختلف. وظلت المفاتيح الأحد عشر جميعها نشطة. وكانت ثلاثة منها لا تزال تولّد طلبات API، وهي طلبات لم تكن صادرة عن التطبيقات الموقوفة أو تكاملات الشركاء المنتهية، بل عن مصادر مجهولة حصلت على المفاتيح. وكان أحد المفاتيح قد انكشف في إيداع عام على GitHub، وكانت الطلبات تأتي من أكثر من أربعين عنوان IP مختلفًا. ولم تكن لدى شركة الخدمات اللوجستية أي عملية لإدارة دورة حياة مفاتيح API. فقد كانت المفاتيح تُصدَر عبر نظام للطلبات ولا تُلغى إلا عندما يطلب أحدهم إلغاءها تحديدًا. ولم يطلب أحد تحديدًا إلغاء مفاتيح التطبيقات التي أُوقفت بهدوء أو التكاملات التي انتهت بهدوء. أحد عشر مفتاحًا خاملًا. ثلاثة منها تُستغل فعليًا. وواحد منها مكشوف على الإنترنت العام لمدة أربعة أسابيع قبل أن يُجعل مستودع GitHub خاصًا.
ما إساءة استخدام هويات API في حقيقتها؟
هويات API هي بيانات الاعتماد، من مفاتيح API وأسرار العملاء ورموز OAuth ونحوها من رموز المصادقة المقروءة آليًا، التي تستخدمها التطبيقات والتكاملات والعمليات المؤتمتة للمصادقة على الواجهات البرمجية والمنصات. وهي المكافئ الآلي لكلمات مرور المستخدمين: سرّ مشترك يثبت أن الطرف المقدِّم له يملك حق الوصول إلى API. وكما هو الحال مع كلمات مرور المستخدمين، يمكن سرقتها ومشاركتها وتضمينها في الشيفرة وكشفها في المستودعات العامة واستخدامها خارج نطاقها المقصود. لكنها، بخلاف كلمات مرور المستخدمين، تُصدَر على نطاق هائل، إذ تتداول معظم المؤسسات مفاتيح API تفوق بكثير عدد حسابات المستخدمين لديها، وتُحكَم بصرامة أقل بكثير في دورة حياتها مقارنة ببيانات اعتماد المستخدمين.
تمثل مشكلة إهمال دورة الحياة الجذر البنيوي لإساءة استخدام هويات API. فحسابات المستخدمين تُنشأ لأشخاص محددين، وحين يغادر هؤلاء الأشخاص أو يغيّرون أدوارهم، تُنشئ عمليات إنهاء الخدمة ومراجعة الصلاحيات ضغطًا لمراجعة صلاحياتهم وتحديثها. أما مفاتيح API فتُنشأ لتطبيقات محددة، وحين تُوقَف تلك التطبيقات أو تنتهي التكاملات، لا يوجد حدث مماثل يُنشئ ضغطًا مؤسسيًا لمراجعة المفاتيح المرتبطة بها وإلغائها. يتوقف التطبيق عن العمل، ويظل المفتاح موجودًا، صالحًا ونشطًا، بانتظار من يعثر عليه.
أصبحت مشكلة الانكشاف في مستودعات الشيفرة واحدة من أكثر نواقل اختراق مفاتيح API شيوعًا خلال العقد الأخير. فالمطورون الذين يضمّنون مفاتيح API في شيفرة التطبيقات أثناء التطوير والاختبار، وهي ممارسة واسعة الانتشار تحظرها صراحةً جميع المعايير الأمنية لكنها شائعة جدًا في الواقع، يُنشئون خطر انكشاف مستمرًا في كل مرة تُودَع فيها تلك الشيفرة في مستودع. وإذا كان المستودع عامًا ولو لفترة وجيزة، كمستودع عام على GitHub جُعل خاصًا لاحقًا، فإن المفتاح ينكشف لأدوات الفحص المؤتمتة التي تجمع بيانات الاعتماد باستمرار من المستودعات العامة. وعادةً ما تُستغل مفاتيح API التي يُعثر عليها في المستودعات العامة خلال دقائق من انكشافها. وجعلُ المستودع خاصًا لا يزيل المفتاح من الأدوات التي جمعته بالفعل.
- بقاء مفاتيح التطبيقات الموقوفة نشطة: مفاتيح API لا تُلغى عند إخراج التطبيق الذي صدرت من أجله من الخدمة
- استمرار مفاتيح التكاملات المنتهية: بقاء المفاتيح الصادرة لشركاء تكامل انتهت العلاقة معهم نشطةً وصالحة
- مفاتيح مضمّنة في مستودعات الشيفرة: مفاتيح API مدمجة في الشيفرة المصدرية المودَعة في مستودعات التحكم في الإصدارات
- لا كشف لحالات الاستخدام الشاذ: استخدام مفاتيح API لا يُراقَب لرصد نشاط من مصادر غير متوقعة
- لا توجد عملية لإدارة دورة حياة المفاتيح: تُلغى المفاتيح فقط عند طلب ذلك تحديدًا، لا عبر مراجعة منهجية لدورة الحياة
لماذا يهم هذا
تكتسب إساءة استخدام هويات API أهميتها في TPRM لأن مفاتيح API هي الآلية الرئيسية التي تصل عبرها تطبيقات المورّدين وشركاء التكامل إلى منصات العملاء، وإدارة دورة حياة تلك المفاتيح هي التي تحدد ما إذا كان الوصول الذي تتيحه يظل ضمن نطاقه المقصود أم يتجاوزه زمنًا واتساعًا. ومنصة العميل التي تُصدر مفاتيح API للمورّدين وشركاء التكامل دون إدارة لدورة حياتها تراكم بيانات اعتماد خاملة وربما مخترقة تمثل وصولًا صالحًا إلى المنصة بعد انتهاء الغرض من الوصول بزمن طويل.
يكتسب بُعد سلسلة التوريد أهمية بالغة. فمفاتيح API الصادرة لمورّدي التكامل للوصول إلى منصة محددة قد تكون مضمّنة في شيفرة تطبيقات المورّد، أو مخزّنة في مستودعات الشيفرة المصدرية لديه، أو تمرّ عبر بيئات التطوير والاختبار لديه. ويمثل كل مسار من هذه المسارات ناقل تعرّض يمكن عبره الاستحواذ على المفتاح دون اختراق مباشر للعميل أو المورّد، سواء عبر انكشاف مستودع عام، أو اختراق محطة عمل أحد المطورين، أو مسار CI/CD يسجّل متغيرات البيئة. ويتيح المفتاح الوصول إلى منصة العميل بصرف النظر عن طريقة الحصول عليه.
بالنسبة لممارسي TPRM، يتطلب تقييم حوكمة مفاتيح API السؤال عن عمليات إدارة دورة الحياة ومراقبة الاستخدام وكشف الانكشاف، لا عن مجرد توثيق المفاتيح عند إصدارها. فتوثيق الإصدار يصف الاستخدام المقصود، أما إدارة دورة الحياة ومراقبة الاستخدام وكشف الانكشاف فتحكم ما يحدث فعليًا للمفتاح طوال عمره التشغيلي.
أين تخطئ معظم الفرق
الإخفاق الأكثر تكرارًا هو التعامل مع توثيق إصدار مفاتيح API على أنه حوكمة لمفاتيح API. فتوثيق التطبيق الذي صدر المفتاح من أجله لا يمنع المفتاح من أن يعمّر أطول من التطبيق، ولا يكشف الاستخدام من مصادر غير متوقعة، ولا يراقب الانكشاف في المستودعات. توثيق الإصدار هو السجل، أما إدارة دورة الحياة فهي الحوكمة.
- التعامل مع توثيق إصدار المفاتيح على أنه حوكمة للمفاتيح
- لا محفز في دورة الحياة عند إيقاف التطبيقات: المفاتيح لا تُراجَع عند إحالة التطبيقات إلى التقاعد
- لا مراقبة للاستخدام من مصادر غير متوقعة: استخدام المفاتيح من مصادر غير مصرّح لها لا يُكشف
- لا فحص للمستودعات بحثًا عن المفاتيح المضمّنة في الشيفرة
- إلغاء المفاتيح مرهون بطلب صريح بدلًا من مراجعة منهجية
كيف تبدو الممارسة الجيدة
تتعامل برامج حوكمة مفاتيح API الناضجة مع دورة حياة المفاتيح بوصفها مرتبطة بدورة حياة التطبيقات: فالمفاتيح الصادرة لتطبيقات محددة تُراجَع حين تتغير حالة تلك التطبيقات، والفحص المؤتمت يكشف المفاتيح المضمّنة في مستودعات الشيفرة قبل انكشافها، ومراقبة الاستخدام تُعلِّم المفاتيح المستخدمة من مصادر غير متوقعة.
- إيقاف التطبيقات يؤدي إلى مراجعة المفاتيح: المفاتيح المرتبطة بالتطبيقات التي تُحال إلى التقاعد تُعلَّم تلقائيًا لإلغائها
- فحص المستودعات بحثًا عن المفاتيح المضمّنة في الشيفرة: فحص مؤتمت لمستودعات الشيفرة بحثًا عن أنماط مفاتيح API
- كشف حالات الاستخدام الشاذ: مراقبة استخدام مفاتيح API لرصد الطلبات من مصادر غير متوقعة، أو الأحجام غير المعتادة، أو الأنماط المريبة
- سياسة انتهاء صلاحية المفاتيح وتدويرها: تُصدَر مفاتيح API بتواريخ انتهاء محددة بدلًا من صلاحية غير محددة المدة
- قائمة جرد المفاتيح مع تاريخ آخر استخدام: توثيق جميع المفاتيح النشطة مع تاريخ الإصدار والتطبيق المرتبط والطابع الزمني لآخر استخدام
الأدوات
فحص الأسرار: GitHub Advanced Security، وGitLab Secret Detection، وTrufflehog، وGitleaks
تفحص أدوات فحص الأسرار مستودعات الشيفرة، بما في ذلك الإيداعات وسجلها التاريخي، بحثًا عن مفاتيح API وبيانات الاعتماد وغيرها من الأسرار التي أُودعت في نظام التحكم في الإصدارات. وتوفر GitHub Advanced Security فحصًا مدمجًا للأسرار يُصدر تنبيهًا عند العثور في الإيداعات على بيانات اعتماد تطابق أنماطًا معروفة لمفاتيح API. وبالنسبة لممارسي TPRM، يوفر السؤال عمّا إذا كان المورّد يستخدم الفحص المؤتمت للمستودعات بحثًا عن مفاتيح API المضمّنة في الشيفرة سؤالًا محددًا لكشف انكشاف الشيفرة.
أمن API: Salt Security، و42Crunch، وNoname Security
تراقب منصات أمن API حركة API بحثًا عن أنماط استخدام شاذة، فتكشف المفاتيح المستخدمة من مصادر غير متوقعة، وأحجام الطلبات غير المعتادة، وأنماط الوصول غير المعتادة إلى نقاط النهاية، وغيرها من المؤشرات على احتمال اختراق المفتاح. وبالنسبة لممارسي TPRM، يوفر السؤال عمّا إذا كان المورّد يراقب استخدام مفاتيح API بحثًا عن الأنماط الشاذة سؤالًا محددًا لكشف إساءة استخدام المفاتيح.
إدارة الأسرار: HashiCorp Vault، وAWS Secrets Manager
توفر منصات إدارة الأسرار إدارة دورة حياة مفاتيح API، فتخزّن المفاتيح بأمان، وتتيح التدوير التلقائي، وتوفر سجلات وصول تمكّن من كشف الاستخدام غير المتوقع للمفاتيح. ويؤدي استبدال مفاتيح API المضمّنة في الشيفرة أو القائمة على أسرار مشتركة بمفاتيح يديرها مدير الأسرار إلى إزالة خطر التضمين في الشيفرة وتوفير إدارة مركزية لدورة الحياة. وبالنسبة لممارسي TPRM، يوفر السؤال عمّا إذا كانت تكاملات المورّدين مع منصات العملاء تستخدم إدارة الأسرار لتخزين المفاتيح السؤالَ الأكثر مباشرة لمنع التضمين في الشيفرة.
تحديات الحوكمة
يتمثل تحدي الحوكمة في دورة حياة مفاتيح API في مشكلة الحجم مقرونةً بتحدي الإسناد. فمعظم البيئات تضم مفاتيح API أكثر بكثير من حسابات المستخدمين، وتُنشئ المفاتيحَ فرقُ التطوير وفرق التكامل وفرق العمليات دون تسجيل مركزي. ويتطلب بناء برنامج إدارة دورة الحياة بناء قائمة الجرد أولًا، أي تحديد جميع المفاتيح النشطة والتطبيقات المرتبطة بها وتواريخ آخر استخدام لها، قبل أن يتسنى تطبيق عمليات دورة الحياة.
- ابنِ قائمة جرد لمفاتيح API: جميع المفاتيح النشطة مع التطبيق المرتبط وتاريخ الإصدار وتاريخ آخر استخدام
- اربط دورة حياة المفاتيح بدورة حياة التطبيقات: إحالة التطبيق إلى التقاعد تؤدي إلى مراجعة المفاتيح
- طبّق فحص المستودعات: كشف مؤتمت للمفاتيح المضمّنة في الشيفرة
- أضف مراقبة الاستخدام: المفاتيح المستخدمة من مصادر غير متوقعة تولّد تنبيهات
- طبّق انتهاء صلاحية المفاتيح: تُصدَر المفاتيح بتاريخ انتهاء محدد يتطلب تجديدًا صريحًا
إذا كنت فريقًا صغيرًا
اطرح على مورّديك المتكاملين عبر API سؤالين يكشفان مخاطر دورة الحياة والانكشاف في آن واحد. الأول: هل يمكنكم تقديم قائمة جرد بجميع مفاتيح API النشطة حاليًا لديكم للتكاملات مع منصتنا، متضمنةً آخر تاريخ استُخدم فيه كل مفتاح والتطبيق أو الخدمة التي تستخدمه؟ والثاني: هل تستخدمون فحصًا مؤتمتًا للمستودعات لكشف مفاتيح API التي ربما ضُمّنت في إيداعات المطورين؟ يكشف سؤال الجرد المفاتيح الخاملة واليتيمة، ويكشف سؤال الفحص خطر الانكشاف الذي ينتهي بطلبات 847 API من مصادر مجهولة.
- اطلب قائمة جرد مفاتيح API مع تواريخ آخر استخدام للمفاتيح الموجودة لدى المورّد
- اسأل عن الفحص المؤتمت للمستودعات بحثًا عن مفاتيح API المضمّنة في الشيفرة
- اسأل عن مراقبة حالات الاستخدام الشاذ لكشف إساءة استخدام مفاتيح API
- طبّق انتهاء صلاحية المفاتيح متطلبًا معياريًا لمفاتيح التكامل
ما الذي ينبغي اشتراطه
اسأل مباشرةً:
«هل يمكنكم تقديم قائمة جرد بجميع مفاتيح API التي يحتفظ بها جانبكم حاليًا للتكاملات مع منصتنا، متضمنةً تاريخ الإصدار والتطبيق المرتبط وتاريخ آخر استخدام، وهل يمكنكم تأكيد أنها جميعًا قيد الاستخدام حاليًا من تطبيقات نشطة ومصرّح لها؟»
«هل تستخدمون الفحص المؤتمت لكشف مفاتيح API المضمّنة في مستودعات التطوير لديكم، وهل ظهرت أي مفاتيح مرتبطة بمنصتنا يومًا ضمن نتائج فحص المستودعات؟»
ما تتوقعه دليلًا
- قائمة جرد مفاتيح API مع تواريخ آخر استخدام والتطبيقات المرتبطة
- تأكيد فحص المستودعات مع نتائج آخر فحص
- وصف مراقبة الاستخدام: كيف يُكشف الاستخدام غير المتوقع للمفاتيح
- سياسة انتهاء صلاحية المفاتيح وتدويرها
المورّد الذي ظهر مفتاح API الخاص به 847 مرة خلال الشهر الماضي من مصادر ليست تطبيقه الموقوف يعاني مشكلة قائمة في إساءة استخدام المفاتيح. فتوثيق التطبيق الذي صدر المفتاح من أجله يصف بدقة نية الإصدار، وسجل الاستخدام يصف بدقة الواقع الحالي. وسؤال الحوكمة هو ما إذا كان هناك ما يربط بين الاثنين، أي ما إذا كان أحد يراقب الفجوة بين الاستخدام المقصود والاستخدام الفعلي التي تمثلها طلبات 847.
كيف تُثبت ذلك
- سجلات جرد مفاتيح API مع التحقق من آخر استخدام
- أدلة على تطبيق فحص المستودعات
- توثيق سياسة انتهاء صلاحية المفاتيح
- تأكيد مراقبة حالات الاستخدام الشاذ
الخلاصة الرئيسية
عمّر مفتاح API ثمانية أشهر بعد التطبيق الذي أُنشئ من أجله. وظل في مستودع عام على GitHub لمدة أربعة أسابيع. واستُخدم 847 مرة هذا الشهر من مصادر ليست التطبيق الموقوف. يسجّل توثيق الإصدار بدقة الغرض من المفتاح. لكن إدارة دورة الحياة التي كان ينبغي أن تُحيل المفتاح إلى التقاعد عند إيقاف التطبيق غير موجودة. ومراقبة الاستخدام التي كان ينبغي أن تكشف الجهات المستدعية غير المتوقعة غائبة. وفحص المستودعات الذي كان ينبغي أن يُعلِّم الإيداع المتضمن للمفتاح لم يُشغَّل قط. كانت الفجوات الثلاث قائمة في آن واحد. والمفتاح يُساء استخدامه فعليًا في هذه اللحظة. إن هوية API هي أكثر أنواع بيانات الاعتماد وفرةً في معظم البيئات وأقلها حوكمة. وتوثيق الإصدار هو بداية الحوكمة، أما دورة الحياة والمراقبة والفحص فهي بقيتها.