
أداة تحليل ثابت لاكتشاف الثغرات الأمنية في كود مصدر C/C++
هذا هو "flawfinder" من تأليف David A. Wheeler.
Flawfinder هو برنامج بسيط يفحص كود المصدر بلغة C/C++ ويبلغ عن الثغرات الأمنية المحتملة. يمكن أن يكون أداة مفيدة لفحص البرامج بحثًا عن نقاط الضعف، ويمكنه أيضًا أن يكون بمثابة مقدمة بسيطة لأدوات تحليل كود المصدر الثابت بشكل عام. وهو مصمم ليكون سهل التثبيت والاستخدام. يدعم Flawfinder التعداد الشائع لنقاط الضعف (CWE) وهو متوافق رسميًا مع CWE. يدعم العديد من صيغ الإخراج بما في ذلك SARIF و SonarQube و HTML.
يمكن استخدام Flawfinder جنبًا إلى جنب مع أدوات تحليل الكود المستندة إلى الذكاء الاصطناعي. يمكن استخدام مخرجات Flawfinder لتحديد مجالات الكود التي تستحق اهتمامًا أوثق بسرعة، والتي يمكن لنظام الذكاء الاصطناعي فحصها بمزيد من التفصيل.
لمزيد من المعلومات، راجع موقع المشروع
تم تصميم Flawfinder للاستخدام على أنظمة Unix/Linux/POSIX (بما في ذلك Cygwin والأنظمة المستندة إلى Linux و MacOS ومختلف أنظمة BSD) كأداة سطر أوامر. يتطلب Python (نختبر باستخدام Python 3؛ يجب أن يعمل Python 2.7 ولكنه غير مُختبر بشكل متزايد).
إذا كنت ترغب فقط في استخدامه، فيمكنك تثبيت Flawfinder باستخدام "pip" الخاص بـ Python أو باستخدام مدير الحزم لنظامك (يحتوي Flawfinder على حزم للعديد من الأنظمة). كما يدعم التثبيت السهل باتباع اصطلاحات تثبيت المصدر المعتادة make install. يحتوي الملف INSTALL.md على تعليمات تثبيت أكثر تفصيلاً. ليس عليك تثبيته لتشغيله، لكنه أسهل بهذه الطريقة.
لتشغيل Flawfinder، ما عليك سوى إعطائه قائمة بملفات المصدر أو الدلائل لفحصها. على سبيل المثال، لفحص جميع الملفات في "src/" وتحتويها بشكل متكرر:
flawfinder src/
لفحص جميع الملفات في الدليل الحالي وتحتويها بشكل متكرر:
flawfinder ./
يتم إعطاء النتائج (الاكتشافات) مستوى خطر من 0 (خطر منخفض جدًا) إلى 5 (خطر مرتفع). افتراضيًا، يتم عرض النتائج ذات مستوى الخطر 1 أو أعلى. يمكنك إظهار النتائج ذات مستوى الخطر 4 أو أعلى فقط في الدليل الحالي وتحتويها بهذه الطريقة:
flawfinder --minlevel 4 ./
تصف صفحة الدليل (flawfinder.1 أو flawfinder.pdf) كيفية استخدام Flawfinder (بما في ذلك خياراته المختلفة) والمعلومات ذات الصلة (مثل كيفية دعمه لـ CWE). على سبيل المثال، يقوم الخيار --html بإنشاء مخرجات بتنسيق HTML. يعطي الخيار --help قائمة موجزة بالخيارات.
يجب أن يكون Flawfinder قادرًا على تفسير ترميز الأحرف لكود المصدر الخاص بك بشكل صحيح. في الغالبية العظمى من الحالات، لا تمثل هذه مشكلة، خاصة إذا كان كود المصدر مشفرًا بشكل صحيح باستخدام UTF-8 وتم تكوين نظامك لاستخدام UTF-8 (الموقف الأكثر شيوعًا).
ومع ذلك، من الممكن أن يتوقف Flawfinder إذا كانت هناك مشكلة في ترميز الأحرف وكنت تستخدم Python3.
العرض المعتاد هو رسائل خطأ مثل هذه:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
للأسف، لا يوفر Python3 أدوات مدمجة مفيدة للتعامل مع هذا. وبالتالي، فإن التعامل مع هذه المشكلة ليس تافهًا دون الاعتماد على مكتبات خارجية (والتي نحاول تجنبها).
إذا كانت لديك هذه المشكلة، فراجع صفحة دليل Flawfinder لمجموعة من الحلول المختلفة.
من أبسط الحلول هو ببساطة تحويل كود المصدر وتكوين النظام إلى UTF-8.
يمكنك تحويل كود المصدر إلى UTF-8 باستخدام أدوات مثل الأداة النظامية iconv أو برنامج Python
cvt2utf;
يمكنك تثبيت cvt2utf باستخدام pip install cvt2utf.
من الناحية التقنية الأكثر، يستخدم Flawfinder المسح المعجمي (lexical scanning) للعثور على الرموز (مثل أسماء الدوال) التي تشير إلى ثغرات محتملة، ويقدر مستوى خطورتها (على سبيل المثال، من خلال نص استدعاءات الدوال)، ويبلغ عن النتائج. لا يستخدم Flawfinder أو لديه إمكانية الوصول إلى معظم المعلومات حول تدفق التحكم، تدفق البيانات، أنواع البيانات، مساحات الأسماء، والنطاقات. وبالتالي، سينتج Flawfinder بالضرورة العديد من الإيجابيات الكاذبة للثغرات ويفشل في الإبلاغ عن العديد من الثغرات. من ناحية أخرى، يمكن لـ Flawfinder العثور على ثغرات في البرامج التي لا يمكن بناؤها أو ربطها. كما أن Flawfinder لا يرتبك بسبب معظم تعريفات الماكرو والغرائب الأخرى التي تواجه الأدوات الأكثر تطورًا صعوبة فيها.
يوجد إجراء لـ GitHub متاح لمن يستخدمون GitHub.
راجع action.yml
قم بإنشاء ملف .yml ضمن .github/workflows بالمحتوى التالي:
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
يمكنك إضافة العديد من الإضافات الأخرى إلى الوسائط.
على سبيل المثال، --error-level=4 سيؤدي إلى إرجاع خطأ إذا وجد Flawfinder ثغرة من المستوى 4 أو أعلى.
لاحظ رقم الإصدار بعد رمز @؛ يمكنك اختيار إصدار مختلف.
يمكنك العثور على اسم الإجراء وسلسلة الإصدار من Marketplace بالنقر على زر "Use latest/xxx version".
يتكامل Flawfinder مع البرنامج المساعد cxx الخاص بـ SonarQube. أضف قواعد Flawfinder في SonarQube ضمن "Administration > CXX External Analyers > Other Rule Definitions" عن طريق تشغيل Flawfinder مرة واحدة باستخدام الخيارات التالية.
flawfinder --listrules --sonar [...]
ثم في CI/CD الخاص بك، قم بتشغيل Flawfinder بهذا الشكل لإنشاء مخرجات يمكن لـ SonarQube فهمها.
flawfinder -CDQ --sonar [...]
ستحتاج إلى توجيه الإخراج إلى ملف يمكنك تحميله بعد ذلك إلى
SonarQube عبر خيار sonar.cxx.other.reportPaths.
نحن نحب المساهمات! لمزيد من المعلومات حول المساهمة، راجع الملف CONTRIBUTING.md.
تم إصدار Flawfinder بموجب ترخيص GNU GPL الإصدار 2 أو الأحدث (GPL-2.0+). راجع ملف COPYING للحصول على معلومات الترخيص.