استكشاف CodeQL في GitHub
ما هو CodeQL
CodeQL هو محرك تحليل التعليمات البرمجية الدلالية الذي طورته GitHub والذي يتعامل مع التعليمات البرمجية كبيانات. بدلا من مجرد البحث عن أنماط النص ، يفهم CodeQL هيكل ومعنى التعليمات البرمجية الخاصة بك ، مما يتيح تحليلا متطورا للأمان والجودة.
غالبا ما تنتج أدوات التحليل الثابت التقليدية إيجابيات خاطئة لأنها تستخدم مطابقة أنماط بسيطة. يفهم النهج الدلالي ل CodeQL سياق التعليمات البرمجية والعلاقات بين عناصر التعليمات البرمجية وتدفق البيانات عبر التطبيقات ، مما يؤدي إلى اكتشاف الثغرات الأمنية بشكل أكثر دقة.
الخصائص الرئيسية ل CodeQL
يتعامل CodeQL مع التعليمات البرمجية كقاعدة بيانات:
- التمثيل الهيكلي: تحويل التعليمات البرمجية المصدر إلى قاعدة بيانات تلتقط أشجار بناء الجملة والرسوم البيانية لتدفق التحكم ومسارات تدفق البيانات.
- تنسيق قابل للاستعلام: يجعل التعليمات البرمجية قابلة للاستعلام باستخدام لغة استعلام متخصصة، على غرار الاستعلام عن قاعدة بيانات تقليدية.
- نهج الحيادي للغة: يدعم لغات برمجة متعددة بما في ذلك C / C ++ و C # و Java و JavaScript / TypeScript و Python و Ruby و Go و Swift.
- تغطية شاملة: لا يحلل الملفات الفردية فحسب ، بل يحلل قواعد التعليمات البرمجية بأكملها مع جميع التوصيلات الخاصة بها.
يتيح CodeQL تحليلا دقيقا للأمان:
- تحليل المتغيرات: بمجرد تحديد ثغرة أمنية واحدة، يمكنك كتابة استعلامات للعثور على مشكلات مماثلة عبر قاعدة التعليمات البرمجية بأكملها.
- تحليل تدفق البيانات: يتتبع كيفية انتقال البيانات عبر التطبيق الخاص بك من المصادر (إدخال المستخدم) إلى المصارف (العمليات الحساسة).
- تتبع التلوث : يحدد متى تصل البيانات غير الموثوق بها إلى العمليات الحساسة دون التحقق من الصحة أو التعقيم المناسب.
- تحليل تدفق التحكم: فهم مسارات التنفيذ والمنطق الشرطي للعثور على الثغرات الأمنية التي تحدث فقط في ظل ظروف محددة.
كيف يعمل CodeQL
يتضمن تحليل CodeQL ثلاث مراحل متميزة تحول شفرة المصدر إلى نتائج أمنية قابلة للتنفيذ:
المرحلة 1: إنشاء قاعدة بيانات CodeQL
تستخرج الخطوة الأولى تمثيلا منظما للتعليمات البرمجية الخاصة بك:
- استخراج الكود: يحلل ملفات المصدر الخاصة بك أثناء التحويل البرمجي أو من خلال التحليل الثابت.
- إنشاء قاعدة البيانات: بناء قاعدة بيانات شاملة تمثل بنية التعليمات البرمجية الخاصة بك، بما في ذلك أشجار بناء الجملة المجردة والرسوم البيانية لتدفق التحكم وتبعيات البيانات.
- التقاط بيانات التعريف: يسجل مواقع الملفات وأرقام الأسطر ونطاقات المتغيرات واستدعاءات الدالات والتسلسلات الهرمية للفئة.
- الامثل: فهرسة قاعدة البيانات للحصول على استعلام فعال، حتى على قواعد التعليمات البرمجية الكبيرة.
تصبح قاعدة البيانات هذه الأساس لجميع التحليلات اللاحقة. يتم إنشاؤه مرة واحدة ويمكن الاستعلام عنه عدة مرات ، مما يجعل تحليل الأمان التكراري فعالا.
المرحلة 2: تشغيل استعلامات CodeQL
بمجرد وجود قاعدة البيانات، يمكنك تنفيذ الاستعلامات للعثور على مشكلات الأمان:
- حزم الاستعلام القياسية: يوفر GitHub مجموعات استعلامات منسقة للثغرات الأمنية الشائعة (معايير OWASP Top 10 و CWE).
- الاستعلامات المخصصة: اكتب استفساراتك الخاصة للعثور على أنماط الأمان الخاصة بالمؤسسة أو انتهاكات معايير الترميز.
- تنفيذ الاستعلام: يقوم محرك CodeQL بتشغيل الاستعلامات مقابل قاعدة البيانات ، والبحث عن أنماط التعليمات البرمجية التي تطابق توقيعات الثغرات الأمنية.
- اداء: يتم تنفيذ الاستعلامات بسرعة لأنها تعمل على قاعدة البيانات المفهرسة بدلا من ملفات المصدر الأولية.
تتضمن أمثلة فئات الاستعلام ما يلي:
- نقاط الضعف في الحقن: حقن SQL ، حقن الأوامر ، البرمجة النصية عبر المواقع.
- مشاكل المصادقة: سياسات كلمات المرور الضعيفة ، وفحوصات المصادقة المفقودة ، وإدارة الجلسات غير الآمنة.
- مشاكل التشفير: خوارزميات ضعيفة ، بيانات اعتماد مشفرة ، عشوائية غير كافية.
- إدارة الموارد: تسرب الذاكرة ، واستنفاد الموارد ، واستهلاك الموارد غير المنضبط.
المرحلة 3: تفسير النتائج
تقدم المرحلة النهائية النتائج في أشكال قابلة للتنفيذ:
- ترتيب النتائج: يعطي CodeQL الأولوية للنتائج حسب الشدة ومستوى الثقة وقابلية الاستغلال.
- المعلومات السياقية: يتضمن كل اكتشاف مواقع الملفات وأرقام الأسطر ومقتطفات التعليمات البرمجية المتأثرة ومسارات تدفق البيانات.
- إرشادات المعالجة: وتشمل النتائج تفسيرات لثغرة الضعف وتوصيات لإصلاحها.
- تكامل: تتكامل النتائج مع علامة تبويب GitHub Security والتعليقات التوضيحية لطلب السحب وملفات SARIF للأدوات الخارجية.
لغة استعلام CodeQL
تتم كتابة استعلامات CodeQL بلغة تعريفية مصممة خصيصا لتحليل التعليمات البرمجية:
بنية الاستعلام وبناء الجملة
يستخدم CodeQL برمجة منطقية موجهة للكائنات:
- الفئات والمسندات: حدد ما تبحث عنه باستخدام الفئات التي تمثل عناصر التعليمات البرمجية (الدالات والمتغيرات والتعبيرات).
- النهج التقريري: صف ما تريد العثور عليه بدلا من كيفية العثور عليه.
- مطابقة النمط: استخدم المسندات لمطابقة أنماط التعليمات البرمجية والعلاقات.
- القابلية للتركيب: قم بإنشاء استعلامات معقدة من خلال الجمع بين مسندات أبسط.
مثال على بنية الاستعلام:
import javascript
from SqlExecution sql, Source source
where source.flowsTo(sql.getAnArgument())
select sql, "SQL query vulnerable to injection from $@.", source, "user input"
يعثر هذا الاستعلام على ثغرات أمنية في حقن SQL من خلال:
- تحديد نقاط تنفيذ SQL.
- إيجاد مصادر مدخلات المستخدم.
- تتبع تدفق البيانات من الإدخال إلى تنفيذ SQL.
- الإبلاغ عن الثغرات الأمنية مع السياق.
مكتبات الاستعلام القياسية
يوفر GitHub مكتبات استعلام شاملة:
- استعلامات الأمان: اكتشف OWASP Top 10 ثغرات أمنية وفئات CWE ومشكلات الأمان الخاصة باللغة.
- استعلامات جودة التعليمات البرمجية: ابحث عن روائح التعليمات البرمجية ومشكلات قابلية الصيانة ومشاكل الأداء وانتهاكات أفضل الممارسات.
- مساهمات المجتمع: ساهم الباحثون والمطورون الأمنيون بآلاف الاستفسارات.
- تحديثات منتظمة: يضيف GitHub Security Lab باستمرار استعلامات جديدة للثغرات الأمنية الناشئة.
يمكنك استخدام هذه الاستعلامات as-is أو تخصيصها لاحتياجاتك الخاصة.
CodeQL في أمان GitHub
يتكامل CodeQL بعمق مع ميزات أمان GitHub:
مسح التعليمات البرمجية باستخدام CodeQL
تحليل الأمان الآلي:
- الإعداد الافتراضي: قم بتمكين مسح CodeQL بنقرة واحدة في إعدادات المستودع.
- عمليات الفحص المجدولة: المسح الضوئي تلقائيا عند كل طلب دفع أو سحب أو وفقا لجدول زمني.
- دعم متعدد اللغات: يكتشف اللغات تلقائيا في المستودع الخاص بك ويدير الاستعلامات المناسبة.
- عرض النتيجة: تظهر نتائج الأمان في علامة التبويب الأمان مع تفسيرات مفصلة.
تكامل طلب السحب:
- التعليقات التوضيحية المضمنة: تظهر نتائج الأمان كتعليقات مباشرة على أسطر التعليمات البرمجية الضعيفة في طلبات السحب.
- حظر الشيكات: قم بتكوين CodeQL كفحص مطلوب يجب أن يمر قبل الدمج.
- المسح التفاضلي: يبلغ فقط عن الثغرات الأمنية الجديدة التي يقدمها طلب السحب، مما يقلل من الضوضاء.
- ملاحظات المطورين: يرى المطورون مشكلات الأمان على الفور بينما تكون التعليمات البرمجية جديدة في أذهانهم.
GitHub Advanced Security
بالنسبة للمؤسسات، يوفر GitHub Advanced Security إمكانات إضافية:
- مسح المستودع الخاص: قم بتشغيل CodeQL على المستودعات الخاصة.
- تنفيذ الاستعلام المخصص: تحميل وتشغيل الاستعلامات الخاصة بالمؤسسة.
- نظرة عامة على الأمان: لوحة معلومات تعرض الوضع الأمني عبر جميع المستودعات.
- إدارة التنبيه: فرز نتائج الأمان وتعيينها وتتبعها عبر الفرق.
استخدام CodeQL في مسارات CI / CD
يمتد CodeQL إلى ما هو أبعد من GitHub للتكامل مع أنظمة CI / CD المختلفة:
نهج التكامل
تكامل GitHub Actions:
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: javascript, python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
سير العمل هذا:
- تهيئة CodeQL للغات محددة.
- إنشاء التطبيق الخاص بك (أو التحليل دون بناء).
- تشغيل استعلامات الأمان.
- تحميل النتائج إلى علامة التبويب GitHub Security.
تكامل Azure Pipelines:
يمكن تشغيل CodeQL في Azure Pipelines باستخدام واجهة سطر الأوامر:
- تثبيت CodeQL CLI: قم بتنزيل وتثبيت حزمة CodeQL في خط الأنابيب الخاص بك.
-
إنشاء قاعدة بيانات: قم بالتشغيل
codeql database createأثناء الإنشاء الخاص بك. -
تحليل قاعدة البيانات: التنفيذ
codeql database analyzeباستخدام حزم الاستعلام المحددة. - نتائج التصدير: إنشاء ملفات SARIF للتصور في Azure DevOps.
أنظمة CI / CD الأخرى:
يدعم CodeQL CLI أي نظام أساسي CI / CD:
- جينكنز: تنفيذ تحليل CodeQL كخطوات إنشاء.
- جيت لاب CI / CD: قم بتشغيل CodeQL في مسارات GitLab باستخدام إخراج SARIF.
- سيركل سي آي: دمج عمليات فحص CodeQL في مهام سير عمل CircleCI.
- أنظمة مخصصة: استخدم CodeQL CLI من أي بيئة يمكنها تشغيل أدوات سطر الأوامر.
بوابات أمنية
استخدم نتائج CodeQL كبوابات جودة:
- عمليات الإنشاء الفاشلة: قم بتكوين المسارات لتفشل عندما يعثر CodeQL على ثغرات أمنية عالية الخطورة.
- تحليل الاتجاه: تتبع مقاييس الأمان بمرور الوقت لقياس التحسين.
- متطلبات الامتثال: إنشاء دليل على الفحص الأمني لعمليات التدقيق وشهادات الامتثال.
- المعالجة التلقائية: قم بتشغيل مهام سير العمل التلقائية عند اكتشاف ثغرات أمنية معينة.
أدوات تطوير CodeQL
يوفر CodeQL أدوات لإنشاء الاستعلامات واختبارها:
ملحق Visual Studio Code
يقدم امتداد CodeQL الرسمي ل VS Code:
- تطوير الاستعلام: اكتب استعلامات CodeQL واختبرها باستخدام تمييز بناء الجملة والإكمال التلقائي والوثائق المضمنة.
- تحليل قاعدة البيانات المحلية: قم بتشغيل الاستعلامات مقابل قواعد البيانات التي تم إنشاؤها من قواعد التعليمات البرمجية المحلية.
- تصور النتيجة: راجع نتائج الاستعلام باستخدام التنقل في التعليمات البرمجية المصدر ومسارات تدفق البيانات.
- دعم تصحيح الأخطاء: خطوة من خلال تنفيذ الاستعلام لفهم النتائج وتحسين الأداء.
واجهة سطر الأوامر
يتيح CodeQL CLI التحليل القابل للنص:
-
إنشاء قاعدة البيانات:
codeql database createيستخرج التعليمات البرمجية إلى تنسيق قابل للاستعلام. -
تنفيذ الاستعلام:
codeql database analyzeيقوم بتشغيل الاستعلامات وإنشاء النتائج. -
استعلامات الاختبار:
codeql test runالتحقق من صحة الاستعلامات مقابل حالات الاختبار. - إدارة الحزمة: تنزيل حزم الاستعلام القياسية وإدارتها.
فوائد CodeQL لأتمتة الأمان
يوفر دمج CodeQL في عملية DevSecOps مزايا كبيرة:
إنتاجية المطور
الكشف المبكر:
- أمان التحول إلى اليسار: ابحث عن نقاط الضعف أثناء التطوير بدلا من الإنتاج.
- معالجة أسرع: يمكنك إصلاح المشكلات عندما تكون التعليمات البرمجية حديثة وتكون التغييرات صغيرة.
- فرص التعلم: يتعلم المطورون ممارسات الترميز الآمن من التعليقات الفورية.
- تقليل تبديل السياق: تظهر نتائج الأمان في أدوات التطوير المألوفة.
نتائج دقيقة:
- إيجابيات كاذبة منخفضة: ينتج عن التحليل الدلالي نتائج أكثر دقة من مطابقة الأنماط.
- المعلومات السياقية: تتضمن النتائج مسارات تدفق البيانات التي توضح بالضبط كيفية حدوث الثغرات الأمنية.
- النتائج ذات الأولوية: ركز على القضايا القابلة للاستغلال بدلا من الاهتمامات النظرية.
- اكتشاف المتغير: ابحث عن جميع حالات نمط الثغرات الأمنية، وليس فقط أمثلة واضحة.
الأمن التنظيمي
تغطية شاملة:
- قاعدة التعليمات البرمجية بأكملها: تحليل جميع التعليمات البرمجية، بما في ذلك تبعيات الجهات الخارجية والمكونات القديمة.
- لغات متعددة: تحليل أمني موحد عبر التطبيقات متعددة اللغات.
- معايير متسقة: تطبيق نفس قواعد الأمان عبر جميع المستودعات.
- التحليل التاريخي: امسح التعليمات البرمجية الموجودة ضوئيا لإنشاء خطوط أساس الأمان.
أمان قابل للتطوير:
- المسح الآلي: لا توجد مراجعات أمنية يدوية مطلوبة لكل التزام.
- المراقبة المستمرة: تكتشف عمليات الفحص المنتظمة الثغرات الأمنية التي تم الكشف عنها حديثا.
- الأمان كرمز: تدوين متطلبات الأمان كاستعلامات مخزنة في التحكم في الإصدار.
- تبادل المعرفة: تلتقط مكتبات الاستعلام معرفة الأمان المؤسسي.
الامتثال والحوكمة
مسارات التدقيق:
- سجل الفحص: سجل جميع عمليات الفحص الأمني مع الطوابع الزمنية والنتائج.
- البحث عن دورة الحياة: تتبع الثغرات الأمنية من الاكتشاف إلى المعالجة.
- إنفاذ السياسات: إثبات حدوث عمليات فحص أمنية لكل إصدار.
- توليد الأدلة: إنتاج تقارير للمدققين وأطر الامتثال.
لمزيد من المعلومات حول CodeQL، راجع نظرة عامة على CodeQL.
للحصول على الأدوات المتوفرة، راجع أدوات CodeQL.