
أداة تحليل بديل وتصور تقوم بمسح قواعد الأكواد بحثًا عن نقاط ضعف مماثلة
![]()
C0deVari4nt هي أداة لتحليل المتغيرات وتصورها تقوم بفحص قواعد الأكواد بحثًا عن نقاط ضعف متشابهة. تستفيد الأداة من CodeQL، وهو محرك تحليل أكواد دلالي، للاستعلام عن الكود بناءً على قوالب استعلام CodeQL يتحكم بها المستخدم، وتمرر النتائج إلى واجهة العميل المبنية باستخدام vis.js وReact لمزيد من الاستكشاف والتصور. يتيح ذلك تحليلًا سريعًا وشاملًا للمتغيرات بناءً على تقارير الثغرات السابقة. توفر ميزة التصور باستخدام vis.js رؤية إضافية للمطورين حول مسارات الكود الضعيفة وتسمح لهم بتحديد أولويات المتغيرات المحتملة بفعالية.

سلطت حادثة Log4Shell في ديسمبر 2021 الضوء على الصعوبات التي يواجهها مطورو المصادر المفتوحة في الاستجابة لتقارير الثغرات. بعد التصحيح الأولي لـ CVE-2021-44228، والذي سمح للمهاجمين عن بُعد غير المصادق عليهم بالسيطرة على الأجهزة التي تعمل بإصدارات ضعيفة من Log4j 2، أصدرت Apache 3 تصحيحات إضافية لمعالجة الثغرات ذات الصلة والحالات الحدودية غير المعالجة.
غالبًا ما يفتقر مطورو المصادر المفتوحة إلى التدريب على المراجعة الشاملة للكود ويواجهون مشاكل في تحديد متغيرات الثغرة، مما يؤدي إلى تصحيحات غير مكتملة. على الرغم من وجود مجموعات استعلام CodeQL لتسهيل التحليل السريع لقاعدة الكود، إلا أن النتائج التي تعيدها هذه المجموعات قد تؤدي إلى معدلات إيجابية كاذبة كبيرة. علاوة على ذلك، تعتمد هذه المجموعات على استعلامات محددة مسبقًا لا تدعم تحليل المتغيرات وليست مخصصة لقواعد الكود الفردية. ونتيجة لذلك، غالبًا ما تستجيب مشاريع المصادر المفتوحة لتقارير الثغرات بطريقة مجزأة تفوت المتغيرات المحتملة.
توفر C0deVari4nt منصة للمطورين لإجراء تحليل المتغيرات بسهولة دون العبء الكبير لكتابة استعلامات CodeQL الخاصة بهم. يمنح هذا المطورين المرونة لتخصيص قوالب CodeQL من خلال توفير معلومات خاصة بقاعدة الكود مثل مصدر معين ومستنزف لثغرة ما. سيتم تصور النتائج في عرض قاعدة بيانات رسم بياني مدعوم من vis.js ليتمكن المطورون من تحديد المتغيرات المحتملة بسرعة. وبالتالي، سيكون المطورون قادرين على معالجة فئات كاملة من الأخطاء من تقرير ثغرة واحد بفعالية.
تم بناء C0deVari4nt باستخدام بايثون وCodeQL وvis.js وReact لإنشاء تطبيق واجهة مستخدم رسومية تفاعلي لأخذ مدخلات المستخدم وعرض العلاقات بين مسارات الكود الضعيفة المختلفة.

تتكون C0deVari4nt من المكونين الرئيسيين التاليين:
يمكن رؤية المزيد من التفاصيل حول واجهة العميل أدناه:

dbextractor.py <codeql db zip file> لفك ضغط محتويات قاعدة بيانات CodeQLpip install -r requirements.txtuvicorn main:app --reload لبدء خادم التطوير المحلي على المنفذ 8000npm inpm start لبدء خادم التطوير المحلي
strcat دون فحوصات الحدود على وسيطة المصدرstrncpy دون فحوصات الحدود على وسيطة المصدرsnprintf
malloc أو calloc أو realloc دون تخصيص ذاكرة كافية لاحتواء نسخة من نوع المؤشرisAdditionalTaintStep لنقل التلوث بين وظيفتين غير متصلتينisAdditionalTaintStep لنقل التلوث بين المؤشرات التي لها نفس القيم في وقت التشغيليوضح ما يلي نتائج CodeQL لاستعلام مع recvfrom كمصدر، mempool_alloc كخطوة تلوث إضافية، وmemcpy كمستنزف:

ينتج عن هذه النتيجة إجمالي 180 عقدة في 27 مسار كود مختلف. يتم عرض النتائج في واجهة neo4j بسيطة أدناه:

من خلال وضع هذا الاستعلام عبر أداتنا، تمكنا من تحديد التكرارات لكل عقدة ومصدر ومستنزف ودمج علاقات العقد.
أدى ذلك إلى رسم بياني أنظف بشكل كبير مع إجمالي 11 عقدة فريدة مع الاحتفاظ بجميع مسارات الكود الـ 27 الفريدة:

يمكن تصنيف النتائج بشكل أكبر إلى مساراتها الخاصة من خلال ميزة تسمية المسار لدينا:

