
متفرع من https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
هذا تطبيق ويب مبني على Flask يتتبع إصلاحات الأمان في Alpine.
باستخدام قاعدة بيانات secdb الخاصة بـ Alpine، يمكننا عمومًا استنتاج أي CVEs تم إصلاحها وأيها لم يتم إصلاحها. ستُضاف بعض الامتدادات إلى مخطط الإبلاغ secfixes للسماح لمشرفي الحزم بالإشارة إلى النتائج الإيجابية الكاذبة.
في المستقبل القريب، سيتم الإبلاغ عن تغييرات الحالة إلى قائمة الإعلان الأمني بينما يعالجها المحرك.
يجب عليك إنشاء بيئة virtualenv بالطريقة المعتادة، ثم تنفيذ pip3 install -r requirements.txt.
إذا أردت استخدام قاعدة بيانات غير sqlite، فستحتاج إلى تثبيت برنامج التشغيل المناسب لها،
على سبيل المثال pip3 install psycopg2.
أخيرًا، ستحتاج إلى كتابة ملف إعدادات: انسخ الملف النموذجي وعدّله ليناسب احتياجاتك.
بعد ذلك ستحتاج إلى تعيين متغيرات البيئة التالية إلى قيم مفيدة:
SECFIXES_TRACKER_CONFIG: المسار إلى ملف الإعداداتFLASK_APP: اسم التطبيق، secfixes_trackerبعد الانتهاء، قم بتهيئة قاعدة البيانات باستخدام flask init-db.
اختياريًا، قم بتشغيل make لبناء secfixes-cli. يتطلب ذلك تثبيت go.
بمجرد تكوين البيئة، يمكنك تشغيل المهام المختلفة:
flask runيشغّل خادم الويب. يمكن أيضًا القيام بذلك باستخدام gunicorn أو ما شابه ذلك، لكن هذا غير مغطى هنا.
flask init-dbيهيئ قاعدة البيانات.
flask import-apkindex [repo]يستورد المستودعات المهيأة.
flask import-secfixes [repo]يستورد خلاصات secdb المهيأة.
flask import-nvd [feed-name]يستورد خلاصة NVD، مثل 2021 أو recent.
بمجرد استيراد الخلاصات السنوية، تحتاج فقط إلى استيراد خلاصة recent
بشكل يومي.
./secfixes-cli import-vulnrichيستورد تفاصيل CVE من https://github.com/cisagov/vulnrichment.
flask update-states [repo]يحدّث عناصر VulnerabilityState المختلفة بناءً على المحتويات الحالية لخلاصات
secfixes وNVD وapkindex. يجب تشغيله بعد مهام الاستيراد
أعلاه على أساس كل ساعة.
تتم مزامنة قواعد إعادة الكتابة من Alpine infra/docker/secfixes-tracker. راجع config/README.md لمعرفة هيكل الملفات.
يستخدم تطبيق Flask متغير Python CUSTOM_REWRITERS في secfixes_tracker/application.cfg (منسوخًا في config/prod.settings.py). القواعد هي دوال lambda تُطابق كـ cpe_vendor:source_pkgname أو cpe_vendor:*.
PACKAGE_EXCLUSIONS في الملف نفسه يستبعد الحزم التي تتراكم عليها CVEs إيجابية كاذبة (مثل bridge).
يستخدم secfixes-cli قواعد مبنية على expr في config/application.toml (منسوخًا في config/prod.application.toml). القواعد مبنية على expr.
مثال على قاعدة:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
تحدد predicate ما إذا كانت القاعدة تنطبق، بينما تحدد rewrite_rule كيفية إعادة كتابة cpe.
خيار ثالث اختياري يسمى field يحدد أي حقل من CPE سيتم إعادة كتابته.
إذا لم يتم توفيره، فسيتم ضبطه افتراضيًا
على product.
المتغيرات التالية متاحة في بيئة التعبيرات:
vendorproducttarget_swversionتم تنفيذ fmt باستخدام fmt.Sprintf، لكنه يقبل وسيطين فقط. الوسيط الأول
إما سلسلة نصية أو شريحة. وهذا يسمح باستخدامه مع
الأنابيب (pipes).
ستحتاج إلى تشغيل مهام الاستيراد، ثم مهام تحديث الحالات. هذا كل ما يلزم فعله.
يتم حاليًا إعادة تصميم نظام البريد الإلكتروني ليتناسب بشكل أفضل مع كيفية تنفيذ محرك التتبع. ترقب هذه المساحة لتعليمات الإعداد بمجرد أن يصبح نظام البريد الإلكتروني جاهزًا.
في الوقت الحالي، مخطط قاعدة البيانات غير مستقر. ستحتاج إلى إعادة بناء قاعدة البيانات عند ترقية هذا البرنامج. بمجرد وصولنا إلى الإصدار 1.0، سيصبح مخطط قاعدة البيانات مستقرًا.