Falco



Falco هو أداة أمان وقت تشغيل سحابية أصلية لأنظمة تشغيل لينكس. وهو مصمم لاكتشاف السلوك غير الطبيعي والتهديدات الأمنية المحتملة والتنبيه بشأنها في الوقت الفعلي.
في جوهره، يُعد Falco وكيل مراقبة واكتشاف على مستوى النواة يرصد الأحداث، مثل استدعاءات النظام (syscalls)، استنادًا إلى قواعد مخصصة. يمكن لـ Falco إثراء هذه الأحداث من خلال دمج البيانات الوصفية من بيئة تشغيل الحاويات وKubernetes. يمكن تحليل الأحداث التي يتم جمعها خارج المضيف في أنظمة SIEM أو بحيرات البيانات (data lake).
Falco، الذي أنشأته Sysdig في الأصل، هو مشروع متخرج تحت مظلة مؤسسة الحوسبة السحابية الأصلية (CNCF)، ويُستخدم في الإنتاج من قبل العديد من المؤسسات.
للحصول على معلومات تقنية مفصلة ورؤى حول التهديدات السيبرانية التي يمكن لـ Falco اكتشافها، قم بزيارة موقع Falco الرسمي.
للحصول على معلومات شاملة حول أحدث التحديثات والتغييرات في المشروع، يرجى الرجوع إلى سجل التغييرات.
مشروع Falco
تتم صيانة قاعدة بيانات مشروع Falco ضمن منظمة falcosecurity على GitHub. يحتوي المستودع الرئيسي، falcosecurity/falco، على الكود المصدري لثنائي Falco، بينما تُستضاف المشاريع الفرعية الأخرى في مستودعات مخصصة. يعزز هذا النهج المتمثل في عزل المكونات في مستودعات متخصصة قابلية التوسع والتطوير المركّز. تشمل المستودعات الأساسية البارزة ما يلي:
- falcosecurity/libs: يستضيف هذا المستودع مكتبات Falco الأساسية، التي تشكل غالبية الكود المصدري للثنائي وتوفر ميزات أساسية، مثل برامج تشغيل النواة.
- falcosecurity/rules: يحتوي على مجموعة القواعد الرسمية لـ Falco، ويقدم قواعد كشف مُعرّفة مسبقًا لمختلف التهديدات الأمنية والسلوكيات غير الطبيعية.
- falcosecurity/plugins: يدعم هذا المستودع التكامل مع الخدمات الخارجية عبر الإضافات (plugins) التي توسّع قدرات Falco إلى ما هو أبعد من استدعاءات النظام وأحداث الحاويات، مع خطط لتطوير وظائف متخصصة في الإصدارات المستقبلية.
- falcosecurity/falcoctl: أداة سطر أوامر مصممة لإدارة Falco والتفاعل معه.
- falcosecurity/charts: ينشر هذا المستودع مخططات Helm لنشر Falco ونظامه البيئي. مصدر مخطط Falco موجود في
chart/falco.
لمزيد من الرؤى حول مستودعاتنا وتفاصيل إضافية حول نموذج الحوكمة لدينا، يرجى زيارة المركز الرسمي لمشروع Falco: falcosecurity/evolution.
البدء مع Falco
إذا كنت جديدًا على Falco، فابدأ رحلتك مع دليل البدء. بالنسبة لعمليات النشر في بيئات الإنتاج، يرجى الرجوع إلى وثائق الإعداد الشاملة.
كتوصيات أخيرة قبل نشر Falco، تحقق من توافق البيئة، وحدد أهداف الكشف لديك، وحسّن الأداء، واختر البناء المناسب، وخطط للتكامل مع SIEM أو بحيرات البيانات لضمان استجابة فعّالة للحوادث.
بيئة العرض التوضيحي
يتم توفير بيئة عرض توضيحي عبر ملف docker-compose يمكن تشغيله على مضيف docker، ويتضمن falco وfalcosidekick وfalcosidekick-ui وقاعدة بيانات redis المطلوبة. لمزيد من المعلومات، راجع قسم docker-compose.
انضم إلى المجتمع
للمشاركة في مشروع Falco، يرجى زيارة مستودع المجتمع للعثور على مزيد من المعلومات وطرق المشاركة.
إذا كانت لديك أي أسئلة حول Falco أو المساهمة فيه، فلا تتردد في فتح issue أو التواصل مع القائمين على صيانة Falco وأعضاء المجتمع للحصول على المساعدة.
كيف يمكنك التواصل؟
الالتزام بأمان Falco الذاتي
يمكن العثور على التقارير الكاملة لعمليات التدقيق الأمني المختلفة هنا.
بالإضافة إلى ذلك، يمكنك الرجوع إلى قسمي الأمان falco وlibs للحصول على تحديثات مفصلة حول النشرات الأمنية والسياسات.
للإبلاغ عن الثغرات الأمنية، يرجى اتباع عملية المجتمع الموضحة في الوثائق الموجودة هنا.
البناء
للحصول على إرشادات شاملة وخطوة بخطوة حول بناء Falco من المصدر، يرجى الرجوع إلى الوثائق الرسمية.
الاختبار
توسيع تعليمات الاختبار
يُعد بناء Falco من المصدر في Falco المورد الأساسي لفهم كيفية بناء Falco من المصدر. بالإضافة إلى ذلك، يقدم مستودع falcosecurity/libs معلومات قيمة إضافية حول اختبارات وتصحيح الأخطاء في المكتبات الأساسية وبرامج تشغيل النواة الخاصة بـ Falco.
فيما يلي مثال لأمر cmake سيتيح لك كل ما تحتاجه لجميع اختبارات الوحدة في هذا المستودع:
cmake \
-DUSE_BUNDLED_DEPS=ON \
-DBUILD_DRIVER=ON \
-DBUILD_FALCO_MODERN_BPF=ON \
-DCREATE_TEST_TARGETS=ON \
-DBUILD_FALCO_UNIT_TESTS=ON ..;
قم ببناء مجموعة اختبارات الوحدة وتشغيلها:
nproc=$(grep processor /proc/cpuinfo | tail -n 1 | awk '{print $3}');
make -j$(($nproc-1)) falco_unit_tests;
# Run the tests
sudo ./unit_tests/falco_unit_tests;
اختياريًا، يمكنك بناء برنامج التشغيل الذي تختاره وتجربة تشغيل ثنائي Falco لإجراء اختبارات يدوية.
أخيرًا، نقل مشروع Falco اختبارات الانحدار الخاصة به إلى falcosecurity/testing.
كيفية المساهمة
يرجى الرجوع إلى دليل المساهمة ومدونة قواعد السلوك لمزيد من المعلومات حول كيفية المساهمة.
الأسئلة الشائعة
لماذا كُتب Falco بلغة C++ بدلاً من Go أو {language}؟
توسيع المعلومات
- كُتبت الأسطر الأولى من التعليمات البرمجية في أساس Falco منذ فترة، حيث لم تكن Go قد اكتسبت بعد نفس المستوى من النضج والاعتماد كما هو الحال اليوم.
- نموذج تنفيذ Falco تسلسلي وأحادي الخيط بسبب متطلبات الحفاظ على الحالة (statefulness) للأداة، وبالتالي فإن معظم مزايا وقت تشغيل Go المتعلقة بالتزامن لن يتم استغلالها على الإطلاق.
- يتعامل كود Falco مع برمجة منخفضة المستوى للغاية في العديد من الأماكن، ونعلم جميعًا أن الربط بين Go وC ممكن لكنه يجلب الكثير من التعقيد والمفاضلات.
- بصفته أداة أمان مصممة لاستهلاك إنتاجية عالية جدًا من الأحداث في الثانية، يحتاج Falco إلى استخلاص أقصى أداء من جميع المسارات الساخنة في وقت التشغيل ويتطلب تحكمًا عميقًا في تخصيص الذاكرة، وهو ما لا يمكن لوقت تشغيل Go توفيره (هناك أيضًا جمع القمامة (garbage collection) المتضمن).
- على الرغم من أن Go لم تناسب المتطلبات الهندسية لنواة Falco، إلا أننا ما زلنا نعتقد أنها يمكن أن تكون مرشحًا جيدًا لكتابة امتدادات Falco عبر نظام الإضافات. هذا هو السبب الرئيسي وراء منحنا اهتمامًا خاصًا وأولوية عالية لتطوير plugin-sdk-go.
- Go ليست شرطًا للحصول على ثنائيات مرتبطة ثابتًا (statically-linked). في الواقع، نوفر إصدارات Falco ثابتة بالكامل منذ بضع سنوات. المشكلة الوحيدة فيها هي أن نظام الإضافات لا يمكن دعمه مع نموذج المكتبات الديناميكية الحالي لدينا.
- صُمم نظام الإضافات لدعم لغات متعددة، لذا فإن الحفاظ على قاعدة تعليمات برمجية متوافقة مع C من جهتنا هو أفضل استراتيجية لضمان أقصى توافق عبر اللغات.
- بشكل عام، لدى الإضافات متطلبات/اعتماديات GLIBC لأنها تحتوي على روابط C منخفضة المستوى مطلوبة للتحميل الديناميكي. يمكن أن يكون الحل المحتمل للمستقبل هو دعم ربط الإضافات بشكل ثابت في وقت الترجمة ومن ثم إصدارها مدمجة داخل ثنائي Falco. على الرغم من عدم بدء أي عمل في هذا الاتجاه بعد، إلا أن هذا سيحل معظم المشكلات التي أبلغت عنها وسيوفر أيضًا ثنائيًا ثابتًا تمامًا. بالطبع، لن يكون هذا متوافقًا مع التحميل الديناميكي بعد الآن، لكنه قد يكون حلاً قابلاً للتطبيق لإصدار Falco المُبني بشكل ثابت.
- سلامة الذاكرة هي بالتأكيد مصدر قلق، ونبذل قصارى جهدنا للحفاظ على مستوى عالٍ من الجودة حتى وإن كانت C++ عرضة للأخطاء إلى حد كبير. على سبيل المثال، نحاول استخدام المؤشرات الذكية (smart pointers) كلما أمكن، ونبني المكتبات باستخدام address sanitizer في بيئة التكامل المستمر (CI)، ونشغّل Falco عبر Valgrind قبل كل إصدار، ولدينا طرق لاختبار الإجهاد (stress-test) لاكتشاف الانحدارات في الأداء أو استخدام الذاكرة غير الطبيعي (على سبيل المثال: https://github.com/falcosecurity/event-generator). علاوة على ذلك، لدينا جهات خارجية تدقق قاعدة التعليمات البرمجية من وقت لآخر. لا شيء من هذا يحقق موقف سلامة مثاليًا بالطبع، لكننا نحاول تعظيم فرصنا. من هذا المنظور، ستجعل Go حياتنا أسهل بالتأكيد، لكن المفاضلات لم تجعل الأمر يستحق العناء حتى الآن بسبب النقاط المذكورة أعلاه.
- قاعدة التعليمات البرمجية C++ لمكتبات falcosecurity/libs، التي تشكل جوهر Falco، كبيرة ومعقدة للغاية. سيكون نقل كل هذا الكود إلى لغة أخرى جهدًا كبيرًا يتطلب الكثير من موارد التطوير مع احتمالية عالية للفشل والانحدار. لذلك، كان نهجنا حتى الآن هو اختيار إعادة الهيكلة (refactors) وصقل الكود بدلاً من ذلك، حتى نصل إلى مستوى أمثل من الاستقرار والجودة والنمطية في ذلك الجزء من الكود. من شأن ذلك أن يجعل التطويرات المستقبلية أكثر سلاسة وقابلية للتحقيق.
ما هي الخطوة التالية لـ Falco؟
ابقَ على اطلاع دائم بقدرات Falco المتطورة من خلال استكشاف خارطة طريق Falco، والتي توفر رؤى حول الميزات قيد التطوير حاليًا والمخطط لها في الإصدارات المستقبلية.
الترخيص
Falco مرخّص لك بموجب ترخيص المصدر المفتوح Apache 2.0.
الموارد