
C/C++ स्रोत कोड में कमजोरियाँ खोजने के लिए एक स्थैतिक विश्लेषण उपकरण
यह David A. Wheeler द्वारा "flawfinder" है।
Flawfinder एक सरल प्रोग्राम है जो C/C++ स्रोत कोड को स्कैन करता है और संभावित सुरक्षा दोषों की रिपोर्ट करता है। यह सॉफ्टवेयर में कमजोरियों की जांच करने के लिए एक उपयोगी उपकरण हो सकता है, और यह सामान्य रूप से स्थैतिक स्रोत कोड विश्लेषण उपकरणों के लिए एक सरल परिचय के रूप में भी काम कर सकता है। इसे स्थापित करना और उपयोग करना आसान बनाने के लिए डिज़ाइन किया गया है। Flawfinder सामान्य कमजोरी गणना (CWE) का समर्थन करता है और आधिकारिक तौर पर CWE-संगत है। यह SARIF, SonarQube, और HTML सहित विभिन्न आउटपुट प्रारूपों का समर्थन करता है।
Flawfinder का उपयोग AI-आधारित कोड विश्लेषण उपकरणों के साथ किया जा सकता है। Flawfinder आउटपुट का उपयोग तुरंत पहचानने के लिए किया जा सकता है कि कोड के किन क्षेत्रों पर अधिक ध्यान देने की आवश्यकता है, जिसे फिर एक AI सिस्टम अधिक विस्तार से जांच सकता है।
अधिक जानकारी के लिए, प्रोजेक्ट वेबसाइट देखें।
Flawfinder को Unix/Linux/POSIX प्रणालियों (Cygwin, Linux-आधारित प्रणालियाँ, MacOS, और विभिन्न BSDs सहित) पर कमांड लाइन टूल के रूप में उपयोग के लिए डिज़ाइन किया गया है। इसमें Python की आवश्यकता है (हम Python 3 के साथ परीक्षण करते हैं; Python 2.7 को काम करना चाहिए लेकिन इसका तेजी से परीक्षण नहीं किया जा रहा है)।
यदि आप केवल इसका उपयोग करना चाहते हैं, तो आप Python के "pip" या अपने सिस्टम के पैकेज मैनेजर (flawfinder के कई सिस्टमों के लिए पैकेज हैं) से 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 का उपयोग करने के लिए कॉन्फ़िगर किया गया है (अब तक की सबसे सामान्य स्थिति)।
हालांकि, यदि वर्ण एन्कोडिंग समस्या है और आप Python3 चला रहे हैं तो flawfinder के रुकने की संभावना है। सामान्य लक्षण इस प्रकार त्रुटि संदेश हैं:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
दुर्भाग्य से, Python3 इससे निपटने के लिए उपयोगी built-ins प्रदान करने में विफल रहता है। इस प्रकार, बाहरी पुस्तकालयों पर निर्भर हुए बिना इस समस्या से निपटना गैर-तुच्छ है (जिससे हम बचने का प्रयास कर रहे हैं)।
यदि आपको यह समस्या है, तो विभिन्न समाधानों के संग्रह के लिए flawfinder मैनुअल पृष्ठ देखें। सबसे सरल में से एक है स्रोत कोड और सिस्टम कॉन्फ़िगरेशन को UTF-8 में परिवर्तित करना। आप सिस्टम टूल iconv या Python प्रोग्राम cvt2utf जैसे उपकरणों का उपयोग करके स्रोत कोड को UTF-8 में परिवर्तित कर सकते हैं; आप pip install cvt2utf का उपयोग करके cvt2utf स्थापित कर सकते हैं।
अधिक तकनीकी रूप से, flawfinder लेक्सिकल स्कैनिंग का उपयोग करके उन टोकन (जैसे फ़ंक्शन नाम) को खोजता है जो संभावित कमजोरियों का सुझाव देते हैं, उनके जोखिम स्तर का अनुमान लगाता है (जैसे, फ़ंक्शन कॉल के टेक्स्ट द्वारा), और परिणामों की रिपोर्ट करता है। Flawfinder नियंत्रण प्रवाह, डेटा प्रवाह, डेटा प्रकार, नामस्थानों और दायरों के बारे में अधिकांश जानकारी का उपयोग नहीं करता है या उस तक पहुंच नहीं रखता है। इस प्रकार, flawfinder अनिवार्य रूप से कमजोरियों के लिए कई झूठी सकारात्मकता उत्पन्न करेगा और कई कमजोरियों की रिपोर्ट करने में विफल रहेगा। दूसरी ओर, flawfinder उन प्रोग्रामों में कमजोरियां ढूंढ सकता है जिन्हें बनाया नहीं जा सकता या लिंक नहीं किया जा सकता। Flawfinder अधिकांश मैक्रो परिभाषाओं और अन्य विषमताओं से भी उतना भ्रमित नहीं होता जितना अधिक परिष्कृत उपकरणों को परेशानी होती है।
action.yml देखें
.github/workflows के अंतर्गत निम्नलिखित सामग्री के साथ एक .yml फ़ाइल बनाएँ:
- 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 SonarQube के cxx प्लगइन के साथ एकीकृत होता है। निम्नलिखित विकल्पों का उपयोग करके एक बार Flawfinder चलाकर SonarQube में "Administration > CXX External Analyers > Other Rule Definitions" के अंतर्गत Flawfinder नियम जोड़ें।
flawfinder --listrules --sonar [...]
फिर अपने CI/CD में Flawfinder को इस प्रकार चलाएं ताकि SonarQube समझ सके कि आउटपुट उत्पन्न हो।
flawfinder -CDQ --sonar [...]
आप आउटपुट को एक फ़ाइल में रीडायरेक्ट करना चाहते हैं जिसे आप sonar.cxx.other.reportPaths विकल्प के माध्यम से SonarQube में लोड कर सकते हैं।
हम योगदान पसंद करते हैं! योगदान पर अधिक जानकारी के लिए, फ़ाइल CONTRIBUTING.md देखें।
Flawfinder GNU GPL लाइसेंस संस्करण 2 या बाद के (GPL-2.0+) के तहत जारी किया गया है। लाइसेंस जानकारी के लिए COPYING फ़ाइल देखें।