
أداة إدخال معيارية لـ ESF للتطوير والبحث.
هذه أداة صُممت للاستهلاك المعياري لأحداث إطار عمل أمان نقاط النهاية (EndpointSecurity Framework - ESF) من بيئة macOS. هذه محاولتي للتغلب على عدد من المشكلات التي واجهتها مع الأدوات الحالية، بما في ذلك أشياء مثل فقدان البيانات الصامت، والاستهلاك الصارم لأنواع الأحداث، وعدم دعم أنواع بيانات الأحداث البديلة، والتحميل الزائد على معالج الوصول إلى الملفات.
تعتمد هذه الأداة بشكل كبير على العمل الممتاز الذي قام به كريس روس، وعمر إكرام، وفريق Objective-See لأدواتهم ProcessMonitor وAppmon وEndpointSecurityDemo. لقد تم تعزيز فهمي الأساسي وقابلية تطبيق استيعاب بيانات ESF بشكل كبير من خلال فحص أعمالهم التي قامت بمعظم العمل الشاق لجعل هذا التطوير ممكنًا. حاولت هذه الأداة استقراء أفضل العناصر من هذه الأدوات والتوسع فيها للسماح بإجراء استهلاك ESF حسب الحالة بناءً على احتياجات المحققين.
الأدوات الحالية، بما في ذلك الأدوات الأكثر تطورًا مثل Crescendo من FireEye، تقع في عدد من المشكلات المرتبطة بـ ESF نفسه والتي يبدو في الاختبار أنها مرتبطة بالطريقة التي يستوعب بها عميل ESF البيانات من النظام الفرعي. المشكلة الأساسية التي تمت مواجهتها هي الفقدان الصامت للبيانات. في الاختبار، عندما تم استيعاب أنواع متعددة من الأحداث، أظهرت النتائج عند مقارنتها باستيعاب نوع حدث واحد وجود تباين في البيانات المتراكمة. في الاختبار، لم تكن الأحداث الحرجة المتعلقة بالنشاط الضار موجودة في مجموعة البيانات المكتسبة التي كانت حاضرة في استيعاب نوع الحدث الواحد.
الغرض الأساسي لهذه الأداة كان ثلاثيًا:
تحقيقًا لهذه الغاية، تسمح الأداة للمستخدم بتحديد أنواع الأحداث التي يريد جمعها أثناء العمليات من بين 51 نوع حدث NOTIFY المتاحة (تم حذف أنواع أحداث AUTH لهذه الأداة). هذا يعني أن الباحثين يمكنهم استهداف أنواع أحداث محددة مرتبطة بعمليات محددة يرغبون في مراقبتها، بالإضافة إلى المساعدة في تقليل فقدان البيانات الصامت المرتبط بها عن طريق تقليل إجمالي أنواع الأحداث التي يجمعها العميل.
يتم توزيع مخرجات البيانات في ملفات سجلات فردية لكل نوع حدث، والتي بدورها تُجمَّع تحت ملفات فئة الأحداث مثل العمليات والملفات والمقابس وما إلى ذلك. تُكتب جميع السجلات بصيغة JSON لسهولة الاستيعاب ويمكن للمستخدمين توسيعها عن طريق تعديل الكود المصدري لجمع حقول إضافية موضحة في وثائق event_type المقدمة من Apple.
ملاحظات مستقبلية -
من أجل منع فقدان البيانات الصامت، سيكون الحل المحتمل هو تعدد الخيوط في الأداة للسماح بتشغيل عدة عملاء ESF في وقت واحد مع قيام كل منها بجمع مجموعة فرعية من أنواع الأحداث. هذا يمكن أن يتغلب على الوصول إلى الحد الداخلي الذي يسبب فقدان البيانات الملحوظ. ببساطة لم يكن لدي الوقت لتوظيف الضوابط الإضافية لهذا.
كيفية الاستخدام
يتطلب تعطيل SIP!
لسوء الحظ، نظرًا لأن هذا كود إثبات مفهوم تطويري، لن تتمكن من استخدامه مع تفعيل SIP لأن الوصول إلى النظام الفرعي لـ ESF مقيد بالملفات الثنائية الموقعة. نظرًا لأن هذا غير موقّع، يجب تعطيل SIP للاستخدام. لذلك، استخدمه فقط على أجهزة غير إنتاجية.
هناك ثلاثة أنواع من التنفيذ: إما أن تحدد معرف event_id من ملف التكوين، أو تحدد group_id من ملف التكوين، أو يمكنك الرجوع إلى ملف التكوين مع إلغاء تعليق أسطر معرفات أنواع الأحداث أو المجموعات.
مثال 1 = جمع أحداث ES_EVENT_TYPE_NOTIFY_EXEC فقط: ./ESFang -id 2
مثال 2 = جمع أحداث فئة الملفات: ./ESFang -group 2
مثال 3 = جمع أنواع الأحداث أو المجموعات المحددة بواسطة ملف التكوين: ./ESFang -config ./ESF_config.txt
ملاحظة حول الفلتر المرمّز بشكل ثابت
داخل الكود المصدري يوجد فلتر عمليات مرمّز بشكل ثابت موجود في الأسطر 460 - 469. يمكن التلاعب بهذا الفلتر إما للالتقاط على PID محدد أو PPID أو اسم عملية محدد. تمت إضافة هذا كحل "مؤقت" لأغراض التصفية المحددة. المحاولات لجعل هذا ديناميكيًا من سطر الأوامر لتغذية Inspector باءت بالفشل جميعها. لذا تُرك مرمّزًا بشكل ثابت.
ملاحظة حول كاتم العمليات المرمّز بشكل ثابت
داخل الكود المصدري توجد سعة كتم عمليات مرمّزة بشكل ثابت موجودة في الأسطر 471 - 491. يمكن استخدام هذا الفلتر لكتم التقاط أحداث محددة بناءً على مسار العملية أو مسار العملية الأم على التوالي. يجب استخدام هذا بحذر حيث سيتم كتم جميع العمليات المطابقة للاسم المحدد إذا كانت العملية أو العملية الأم لأي نشاط. كان هذا في مرحلة الاختبار التجريبي عند الإصدار.