أمان وقت التشغيل
أمان وقت التشغيل
الضوابط الثابتة — فحص الصور، ومعايير أمان الحاويات، وسياسات الشبكة — تمنع التكوينات الخطرة المعروفة قبل انطلاق أي حمل عمل. أما أمان وقت التشغيل فهو التخصص الذي يجيب على السؤال الأصعب: ماذا يفعل الحاوي فعلاً بعد أن يبدأ تشغيله؟ هجوم على سلسلة التوريد، أو ثغرة يوم الصفر، أو مُهدِّد داخلي، قد يتجاوز كل فحوصات ما قبل التشغيل ويزرع تهديداً داخل حاوٍ شرعي. أمان وقت التشغيل هو خط الاكتشاف الأخير قبل أن يقع تسرب البيانات.
يرتكز أمان بيئات cloud-native في وقت التشغيل على ثلاثة أعمدة: الكشف على مستوى نداءات النظام (syscall) عبر أدوات من قبيل Falco أو محركات قائمة على eBPF، وملفات تعريف seccomp التي تحجب النداءات على مستوى النواة، واكتشاف انجراف الحاوي (container drift) للتنبيه حين لا يعود الحاوي الجاري مطابقاً لصورته الثابتة. يشمل هذا الدرس الأعمدة الثلاثة بما فيها أنماط الفشل التي تعرّض لها الفرق الإنتاجية.
آلية عمل Falco: الرؤية من داخل النواة
Falco (مشروع خرّيج CNCF) يجلس بين النواة وفضاء المستخدم. يستخدم إما وحدة نواة (kernel module) أو مسباراً مبنياً على eBPF لاعتراض كل نداء نظام يُصدره كل عملية في كل حاوٍ على العقدة. تُغذَّى هذه الأحداث الخام إلى محرك قواعد يُقيّمها وفق مجموعة من القواعد التصريحية. حين تنطلق إحدى القواعد يُصدر Falco تنبيهاً منظَّماً — إلى الإخراج القياسي، أو syslog، أو webhook، أو مباشرةً إلى SIEM مثل Splunk أو Elastic.
يأتي Falco مع مجموعة قواعد افتراضية تغطي أخطر الفئات: تشغيل shell داخل حاوٍ، قراءة ملفات حساسة كـ /etc/shadow وملفات kubeconfig، اتصالات خارجية غير متوقعة، نداءات تصعيد الصلاحيات مثل setuid وptrace، وتعديل نظام ملفات الحاوي بعد انطلاقه. تضيف الفرق الإنتاجية قواعد مخصصة فوق هذه الأساسيات.
driver.kind=ebpf) أو مشغّل CO-RE الحديث (driver.kind=modern-ebpf). وحدة النواة تستلزم إعادة الترجمة عند كل ترقية للنواة وقد تُعطّل العقدة؛ أما eBPF فأكثر أماناً وهو المسار المدعوم من كبار مزودي الخدمة السحابية. يدعم AWS EKS وGKE كلاهما CO-RE eBPF دون الحاجة لتخصيص العقد.
ملفات تعريف Seccomp: الحجب عند حدود النواة
الاكتشاف يُخبرك حين وقع الأمر السيئ. أما Seccomp (وضع الحوسبة الآمنة) فيمنعه أصلاً بتقييد نداءات النظام المسموح للحاوي بإصدارها. حاوٍ يُشغّل واجهة Node.js API لا يحتاج إلى ptrace أو mount أو kexec_load. ملف تعريف seccomp هو قائمة بيضاء (أو سوداء) بصيغة JSON تُطبَّق بواسطة النواة — محاولة استدعاء نداء محجوب تُعيد EPERM أو تُنهي العملية.
يدعم Kubernetes طريقتين لتطبيق seccomp: ملف التعريف المدمج RuntimeDefault (الملف الافتراضي لبيئة تشغيل الحاوي، ويحجب نحو 44 نداءً لا تحتاجه أي حمل عمل عادي)، وملفات التعريف المحلية المخصصة Localhost المُخزَّنة على العقدة.
توليد ملف تعريف مخصص دقيق من الصفر أمر مرهق. المسار العملي على نطاق واسع: شغّل حمل العمل مع type: Unconfined وFalco يُسجّل النداءات، أو استخدم inspektor-gadget (الأمر ig advise seccomp-profile) لتسجيل ملف النداءات الفعلي لحاوٍ جارٍ وتوليد سياسة JSON تلقائياً. ثم ارفعه إلى Localhost في بيئة التجهيز، تحقق منه، ثم أطلقه للإنتاج.
--seccomp-default على الـ kubelet لتطبيق RuntimeDefault على كل Pod لا يحدد ملف seccomp. هذا مكسب أمني فوري على مستوى الكلاستر بأكمله دون تعديل أي ملف manifest للحمل العمل.
اكتشاف انجراف الحاوي
صورة الحاوي الثابتة هي عقد أمني: ما فحصته ووقّعت عليه وقت البناء هو بالضبط ما يعمل في الإنتاج. انجراف الحاوي يكسر هذا العقد — عملية تُثبّت أداة، أو تنزّل ملفاً ثنائياً، أو تُعدّل ملف إعداد داخل الطبقة القابلة للكتابة في الحاوي الجاري. حتى المطوّر الذي ينفّذ kubectl exec ... apt-get install curl لأغراض التشخيص يُنشئ انجرافاً قد يستمر إذا لم يُعد تشغيل الحاوي.
تتدرج مناهج اكتشاف الانجراف من الخفيف إلى الشامل:
- قواعد Falco (الطبقة الأولى): تكتشف الكتابات في مجلدات الملفات الثنائية، وتنفيذ مديري الحزم، وتنزيل ملفات ثنائية جديدة عبر أحداث syscall — تُطلق التنبيه في أجزاء من الثانية.
- نظام الملفات الجذري للقراءة فقط (الطبقة الثانية): اضبط
readOnlyRootFilesystem: trueفيsecurityContextللحاوي. أي محاولة كتابة تُعيدEROFS. مع وصلemptyDirأوtmpfsللمسارات التي تحتاج كتابة فعلاً، يُزيل هذا فئة كاملة من الانجراف. - تثبيت الصور بالبصمة الرقمية (الطبقة الثالثة): استخدم مرجع الصورة بالبصمة SHA256 (
myorg/api@sha256:abc123...) بدلاً من وسم متغيّر. وسم يمكن أن يسحب صورة مختلفة عند إعادة تشغيل Pod دون علم؛ البصمة لا تستطيع ذلك. - إثبات المصداقية عند الدخول (الطبقة الرابعة): أدوات من قبيل Sigstore/Cosign مع Kyverno أو OPA تضمن قبول الصور الموقَّعة من خط CI فقط. يُحجب الانجراف عبر استبدال الصور كلياً.
kubectl exec: معظم فرق الأمان ترصد عمليات نشر الصور لكنها تنسى أن kubectl exec داخل Pod الجاري يتجاوز جميع ضوابط الدخول وفحوصات الصور. المطوّر الذي يُثبّت حزمة داخل حاوٍ ينشئ rootkit مؤقتاً. تأكد أن سياسة التدقيق في Kubernetes (--audit-policy-file) تُسجّل أحداث exec على مستوى Request وتضخّها إلى SIEM. لدى Falco أيضاً قاعدة افتراضية لهذا: Terminal shell in container.
الربط الكامل: من الاكتشاف إلى الاستجابة في الإنتاج
الاكتشاف دون استجابة آلية ليس إلا إجهاداً من التنبيهات. النمط الإنتاجي على نطاق الشركات الكبرى هو حلقة استجابة متدرجة: Falco يُطلق webhook إلى Falcosidekick، الذي يُوجّه أحداث CRITICAL إلى بوت استجابة. البوت يستدعي واجهة Kubernetes API لعزل العقدة، وتقييد الـ Pod بسياسة شبكة، والتقاط لقطة جنائية (حالة الحاوي، واصفات الملفات المفتوحة عبر /proc)، ثم استدعاء فريق الطوارئ. أحداث الخطورة الأدنى تُوجَّه إلى SIEM لمراجعة المحللين.
استثمر في ضبط ضوضاء القواعد قبل ربط الاستجابة الآلية. قاعدة بمعدل إيجابيات كاذبة 5% تُطلق إيقاف Pods إنتاجية ستُقوّض الثقة بسرعة أكبر من التهديد الذي صُمّمت لمواجهته. ابدأ بوضع audit، وابنِ خطاً أساسياً على مدى أسبوعين، وأخمد الأنماط الحميدة المعروفة بحقل exceptions في Falco، ثم انتقل إلى أتمتة الاستجابة.