
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
यह एक Flask वेब एप्लिकेशन है जो Alpine में सुरक्षा फिक्स को ट्रैक करता है।
Alpine secdb का उपयोग करके, हम आम तौर पर अनुमान लगा सकते हैं कि कौन से CVE फिक्स हो चुके हैं और कौन से नहीं। पैकेज मेंटेनरों को फॉल्स पॉजिटिव दर्शाने की अनुमति देने के लिए secfixes रिपोर्टिंग स्कीमा में कुछ एक्सटेंशन जोड़े जाएँगे।
निकट भविष्य में, स्टेट परिवर्तनों को एक सुरक्षा घोषणा सूची में रिपोर्ट किया जाएगा, जैसे ही इंजन उन्हें प्रोसेस करेगा।
आपको सामान्य तरीके से एक virtualenv बनाना चाहिए, फिर pip3 install -r requirements.txt चलाएँ।
यदि आप sqlite के अलावा कोई अन्य डेटाबेस उपयोग करना चाहते हैं, तो आपको उसका ड्राइवर इंस्टॉल करना होगा, उदाहरण के लिए pip3 install psycopg2।
अंत में, आप एक कॉन्फ़िग फ़ाइल लिखना चाहेंगे: उदाहरण वाली फ़ाइल को कॉपी करें और उसे अपनी आवश्यकताओं के अनुसार संशोधित करें।
फिर आपको इन env वेरिएबल्स को कुछ उपयोगी मानों पर सेट करना होगा:
SECFIXES_TRACKER_CONFIG: कॉन्फ़िग फ़ाइल का पथFLASK_APP: ऐप का नाम, secfixes_trackerएक बार हो जाने पर, flask init-db के साथ डेटाबेस को इनिशियलाइज़ करें।
वैकल्पिक रूप से, secfixes-cli बनाने के लिए make चलाएँ। इसके लिए 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-vulnrichhttps://github.com/cisagov/vulnrichment से CVE विवरण इम्पोर्ट करता है।
flask update-states [repo]secfixes, NVD और apkindex फीड्स की वर्तमान सामग्री के आधार पर विभिन्न VulnerabilityState आइटम्स को अपडेट करता है। उपरोक्त इम्पोर्ट कार्यों के बाद इसे प्रति घंटे चलाया जाना चाहिए।
रीराइटर नियम Alpine infra/docker/secfixes-tracker से सिंक किए जाते हैं। फ़ाइल लेआउट के लिए config/README.md देखें।
Flask ऐप secfixes_tracker/application.cfg में Python CUSTOM_REWRITERS का उपयोग करता है (config/prod.settings.py में मिरर किया गया)। नियम lambda फ़ंक्शन हैं जो cpe_vendor:source_pkgname या cpe_vendor:* के रूप में मैच होते हैं।
उसी फ़ाइल में PACKAGE_EXCLUSIONS उन पैकेजों को बाहर करता है जो फॉल्स-पॉजिटिव CVE जमा करते हैं (जैसे bridge)।
secfixes-cli config/application.toml में expr-आधारित नियमों का उपयोग करता है (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_swversionfmt को fmt.Sprintf के साथ लागू किया गया है, लेकिन यह केवल 2 तर्क लेता है। पहला तर्क या तो एक स्ट्रिंग है, या एक slice है। यह इसे पाइप के साथ उपयोग करना संभव बनाता है।
आप इम्पोर्ट कार्यों को चलाना चाहेंगे, और फिर update-states कार्यों को। बस इतना ही करने की आवश्यकता है।
ई-मेल सामग्री को ट्रैकिंग इंजन के कार्यान्वयन में बेहतर फिट होने के लिए पुनः डिज़ाइन किया जा रहा है। सेटअप निर्देशों के लिए ई-मेल सामग्री तैयार होने पर यह स्थान देखें।
वर्तमान में, डेटाबेस स्कीमा अस्थिर है। इस सॉफ़्टवेयर को अपग्रेड करते समय आपको अपना डेटाबेस पुनर्निर्माण करने की आवश्यकता होगी। एक बार जब हम संस्करण 1.0 पर पहुँच जाते हैं, तो डेटाबेस स्कीमा स्थिर हो जाएगा।