سؤال

أنا أعمل على SQL نظام كشف التسلل (IDS) وأحتاج إلى تحليل استعلامات SQL الواردة.تعد كتابة محلل SQL الخاص مهمة طويلة المدى ولن تعكس أبدًا المنطق المستخدم في المحلل اللغوي الأصلي.اكتشفت أن MySQL لديه محلل معجمي مع الملف المصدر الرئيسي sql/sql_lex.cc ومحلل نحوي مبني باستخدام البيسون من sql/sql_yacc.y.أنا مهتم حقًا بإعادة استخدام هذه الحلول القوية.أقوم ببناء معرفات IDS الخاصة بي في C/C++، لذلك أبحث عن طريقة ما لربط محلل MySQL بنظام الكشف الخاص بي.

كنت أتساءل عما إذا كان من الممكن إعادة استخدام محلل MySQL (محلل بناء الجملة المعجمي) للحصول على بنية استعلام SQL في بعض الأشكال المنطقية على سبيل المثال.شجرة بناء الجملة.هل هي ممكنة؟هل هناك بعض النصوص أو البرامج التعليمية أو المشاريع ذات الصلة؟

شكرًا

هل كانت مفيدة؟

المحلول

لقد انتهيت من الإصدار الأول من IDS الخاص بي كجزء من مشروع البكالوريوس الخاص بي.يتم تنفيذه كمكون إضافي لـ MySQL.

سأقوم بإدراج مصادري الرئيسية لفهم العناصر الداخلية لـ MySQL أدناه.ثم أصف بإيجاز النهج الذي استخدمته في IDS الخاص بي.

نصوص وثائق MySQL

  • لقد وجدت الكتب خبير MySQL بواسطة تشارلز بيل و فهم MySQL الداخلية بواسطة ساشا باتشيف (كما كتب user3822447) لتكون نقطة دخول جيدة جدًا لفهم الأجزاء الداخلية لـ MySQL.
  • تطوير البرنامج المساعد MySQL 5.1 بواسطة أندرو هاتشينجز وسيرجي جولوبشيك هو أيضا مفيد جدا.
  • ال دليل MySQL الداخلي يحتوي أيضًا على بعض المعلومات الأساسية الجيدة للبدء بها.
  • بعد كل القراءة فعلت شيئا تصحيح الأخطاء (باستخدام VS) واكتشفت كيف تبدو بنية شجرة الاستعلام.

الحل الخاص بي لـ IDS

يمكن العثور على الكود المصدري للحل الخاص بي على sourceforge.أخطط لتوثيقها أكثر قليلاً في الويكي الخاص بها.

نقطة الدخول الرئيسية هي audit_ids_notify() وظيفة في audit_ids.cc.يأخذ البرنامج المساعد شجرة الاستعلام التي تم إنشاؤها بواسطة محلل MySQL الداخلي ويقوم بإنشاء نسخة مبسطة منها (لحفظ الذاكرة).ثم تقوم بالكشف عن الشذوذ - فهي تحتوي على قائمة بهياكل شجرة الاستعلام المعروفة وتحتفظ ببعض المعلومات الإحصائية حول كل جزء يمكن تحديده من كل بنية شجرة استعلام.تتم كتابة الإخراج في ملف سجل خاص في دليل بيانات MySQL.

حاولت أن أجعل الحل معياريًا وقابلاً للتمديد.الإصدار الأولي هو نوع من العرض التوضيحي ولم يتم تحسين الأداء خاصة في وحدة تخزين SQL.

نوع البرنامج المساعد MySQL

لقد حددت طريقتين محتملتين واستخدمت النهج الأول.

  1. البرنامج المساعد للتدقيق
    • نوع المجمع في البرنامج المساعد للحل الخاص بي هو البرنامج المساعد للتدقيق.
    • لقد استخدمت هذا النوع من المكونات الإضافية على الرغم من استخدامها للإبلاغ عن عمليات الخادم (على سبيل المثال.لتسجيل الاستعلامات أو الأخطاء).
    • لقد اخترت هذا النوع من المكونات الإضافية لأنني اكتشفت أن هذا هو المكون الإضافي الوحيد المدعوم الأصلي والذي يتم استدعاؤه عندما تكون شجرة الاستعلام بعد اكتمالها (على سبيل المثال.تم تحليله) وقبل تحريره من الذاكرة (لـ MySQL 5.6.17).
    • عيب:ما ورد أعلاه غير مضمون تمامًا في الإصدارات المستقبلية من MySQL، لكن في رأيي لا ينبغي أن يتغير هذا في المستقبل القريب.
    • ميزة:لا يحتاج MySQL إلى إعادة ترجمته.يكفي بناء البرنامج المساعد وتثبيته.


  1. الاستعلام عن البرنامج المساعد لإعادة الكتابة
    • هناك أيضًا طريقة بديلة للقيام بذلك باستخدام نوع مكون إضافي غير أصلي إعادة كتابة الاستعلام.لقد وفرت واجهة برمجة تطبيقات البرنامج المساعد لتعديل الاستعلام وبالتالي لقراءته أيضًا.
    • عيب:لدعم واجهة برمجة التطبيقات الإضافية هذه، يجب إعادة ترجمة خادم MySQL باستخدام واجهة برمجة التطبيقات.أعتقد أنه قد يصبح جزءًا من توزيع إنتاج MySQL.
    • ميزة:نوع البرنامج المساعد المصمم لقراءة/إعادة كتابة شجرة الاستعلام الداخلية.

إذا كان هناك بعض الأسئلة/المشاكل المتعلقة بهذا الموضوع يمكنني الإجابة عليها فلا تتردد في طرحها ;)

نصائح أخرى

أعتقد أنه من الممكن. جرب كتابا متقدما MySQL Internals مثل "خبير MySQL" من قبل Charles Bell أو "فهم MySQL Internals" من Sasha Pachev. يستخدم MySQL Lexer مخصص تم بناؤه يدويا ومحللا متوافقا من BISONION مع أي ملف Lexer متوافقا.

بصرف النظر عن ذلك، قد تجد حلا أبسط من تحليل الاستعلام، على سبيل المثال:

  • استراتيجية # 1: رمي الاستعلام والنظر فقط إلى محتويات السلاسل داخل الاستعلام. ابحث عن ناقلات الهجوم المحتملة مثل كلمات رئيسية SQL. هذا يمكن أن يكتشف محاولات الهجوم.
  • استراتيجية # 2: رمي جميع مدخلات المستخدم وإجراء قائمة بقية محتويات الاستعلام. قم بإجراء قائمة بجميع أنماط الاستعلام الخاصة بك من الكلمات الرئيسية ومقارنتها ضد بعضها البعض. ابحث عن استفسارات الهيكل الشاذ الإشارة إلى أن شخصا ما قام بتعديل الاستعلام بنجاح.

أنا لا SQL Guru ولكن الاستراتيجية الأساسية هي ببساطة استخدام الاستعلامات المعلمة وتجاهل محاولات الاختراق. معظم هذه المحاولات على الإنترنت هي استعلامات عشوائية عامة مصممة لتحقيق الضعف الواضح ويمكن تجاهلها بأمان إذا اتبعت ممارسة الأمان الأساسية في كل مكان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top