
Phoenix Framework के लिए सुरक्षा-केंद्रित स्थैतिक विश्लेषण
Sobelow एक सुरक्षा-केंद्रित स्थैतिक विश्लेषण उपकरण है जो Elixir और Phoenix फ्रेमवर्क के लिए है। सुरक्षा शोधकर्ताओं के लिए, यह रुचि के बिंदुओं का त्वरित दृश्य प्राप्त करने का एक उपयोगी उपकरण है। परियोजना अनुरक्षकों के लिए, इसका उपयोग कई सामान्य कमजोरियों के परिचय को रोकने के लिए किया जा सकता है।
वर्तमान में Sobelow निम्नलिखित सुरक्षा समस्याओं के कुछ प्रकारों का पता लगाता है:
संभावित कमजोरियों को उनकी असुरक्षा में विश्वास के अनुसार विभिन्न रंगों में चिह्नित किया जाता है। उच्च विश्वास लाल है, मध्यम विश्वास पीला है, और निम्न विश्वास हरा है।
एक खोज को आमतौर पर 'निम्न विश्वास' के रूप में चिह्नित किया जाता है यदि ऐसा लगता है कि कोई फ़ंक्शन असुरक्षित रूप से उपयोग किया जा सकता है, लेकिन यह विश्वसनीय रूप से निर्धारित नहीं किया जा सकता कि फ़ंक्शन उपयोगकर्ता-आपूर्ति इनपुट स्वीकार करता है। अर्थात, यदि किसी खोज को हरा चिह्नित किया गया है, तो यह गंभीर रूप से असुरक्षित हो सकता है, लेकिन इसके लिए अधिक मैन्युअल सत्यापन की आवश्यकता होगी।
नोट: यह परियोजना निरंतर विकास में है, और समय के साथ अतिरिक्त कमजोरियों को चिह्नित किया जाएगा। यदि आपको कोई बग मिलता है, या अतिरिक्त सुविधाओं या सुरक्षा जाँचों का अनुरोध करना चाहते हैं, तो कृपया एक मुद्दा खोलें!
Sobelow का उपयोग करने के लिए, आप इसे अपने एप्लिकेशन की निर्भरताओं में जोड़ सकते हैं।
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
आप निम्नलिखित को कमांड लाइन से निष्पादित करके Sobelow को वैश्विक रूप से भी स्थापित कर सकते हैं:
$ mix escript.install hex sobelow
नवीनतम रिलीज़ के बजाय मास्टर ब्रांच से स्थापित करने के लिए, निम्नलिखित कमांड का उपयोग किया जा सकता है:
$ mix escript.install github nccgroup/sobelow
स्थापना के बाद, Phoenix प्रोजेक्ट को स्कैन करने का सबसे सरल तरीका प्रोजेक्ट रूट से निम्नलिखित चलाना है:
$ mix sobelow
नोट: कोई भी पथ तर्क पूर्ण पथ होने चाहिए, या एप्लिकेशन रूट के सापेक्ष होने चाहिए।
--root या -r - एप्लिकेशन रूट डायरेक्टरी निर्दिष्ट करें। एक पथ तर्क स्वीकार करता है, उदा. ../my_project।
--verbose या -v - कोड स्निपेट और अतिरिक्त खोज विवरण प्रिंट करें।
--ignore या -i - दिए गए खोज प्रकारों को अनदेखा करें। मॉड्यूल नामों की एक कॉमा-सेपरेटेड सूची स्वीकार करता है, उदा. XSS.Raw,Traversal।
--ignore-files - फ़ाइलों को अनदेखा करें। फ़ाइल नामों की एक कॉमा-सेपरेटेड सूची स्वीकार करता है, उदा. config/prod.exs।
--details या -d - खोज-प्रकार का विवरण प्राप्त करें। एक एकल मॉड्यूल नाम स्वीकार करता है, उदा. Config.CSRF।
Sobelow उपयोगकर्ताओं को एक कॉन्फ़िगरेशन फ़ाइल में बार-बार उपयोग किए जाने वाले विकल्पों को सहेजने की अनुमति देता है। उदाहरण के लिए, यदि आप स्वयं को लगातार चलाते हुए पाते हैं:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
आप अपनी .sobelow-conf कॉन्फ़िग फ़ाइल बनाने के लिए --save-config फ़्लैग का उपयोग कर सकते हैं:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
यह कमांड आपके एप्लिकेशन की रूट में .sobelow-conf फ़ाइल बनाएगा। आप परिवर्तन करने के लिए इस फ़ाइल को सीधे संपादित कर सकते हैं।
आप बिना किसी विकल्प के भी कमांड चला सकते हैं:
$ mix sobelow --save-config
जब आप पहली बार इस पैकेज का उपयोग शुरू कर रहे हों - उत्पन्न कॉन्फ़िगरेशन फ़ाइल प्रत्येक विकल्प के लिए डिफ़ॉल्ट मानों से भरी होगी। (यह इस पैकेज को पहले से मौजूद कोडबेस में तुरंत शामिल करने में मदद करता है।)
अब यदि आप सहेजी गई कॉन्फ़िगरेशन के साथ Sobelow चलाना चाहते हैं, तो आप --config फ़्लैग के साथ Sobelow चला सकते हैं।
$ mix sobelow --config
Sobelow कम-रिपोर्टिंग की तुलना में अधिक-रिपोर्टिंग का पक्षधर है। इस प्रकार, आप एक सामान्य स्कैन में कई गलत सकारात्मक पा सकते हैं। इन निष्कर्षों को फ़ंक्शन परिभाषा से पहले # sobelow_skip टिप्पणी, और मॉड्यूल की एक सूची जोड़कर व्यक्तिगत रूप से अनदेखा किया जा सकता है।
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Sobelow को एक नए प्रोजेक्ट में एकीकृत करते समय, बड़ी संख्या में गलत सकारात्मक हो सकते हैं। सभी मुद्रित निष्कर्षों को गलत सकारात्मक के रूप में चिह्नित करने के लिए, --mark-skip-all फ़्लैग के साथ Sobelow चलाएँ।
एक बार जब आप उपयुक्त निष्कर्षों को टैग कर लें, तो Sobelow को --skip फ़्लैग के साथ चलाएँ।
$ mix sobelow --skip
जबकि # sobelow_skip टिप्पणियाँ केवल फ़ंक्शन-स्तरीय निष्कर्षों को चिह्नित कर सकती हैं (और इसलिए कॉन्फ़िगरेशन समस्याओं को छोड़ने के लिए उपयोग नहीं की जा सकतीं), --mark-skip-all फ़्लैग का उपयोग किसी भी प्रकार के निष्कर्ष को छोड़ने के लिए किया जा सकता है।
निष्कर्ष श्रेणियाँ मॉड्यूल में विभाजित की गई हैं। इन मॉड्यूल का उपयोग या तो निष्कर्षों के वर्गों को अनदेखा करने (ignore और skip विकल्पों के माध्यम से) या कमजोरी विवरण प्राप्त करने (details विकल्प के माध्यम से) के लिए किया जा सकता है।
यह सूची, और अन्य सहायक जानकारी, कमांड लाइन पर पाई जा सकती है:
$ mix help sobelow
एक उम्ब्रेला ऐप के भीतर सभी चाइल्ड ऐप्स पर एक ही कमांड से Sobelow चलाने के लिए, आप अपनी रूट mix.exs फ़ाइल में sobelow के लिए एक alias जोड़ सकते हैं:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
यदि आप उम्ब्रेला ऐप में कॉन्फ़िगरेशन फ़ाइलों का उपयोग करना चाहते हैं, तो प्रत्येक चाइल्ड एप्लिकेशन में .sobelow-conf बनाएँ और --config फ़्लैग का उपयोग करें।
किसी प्रोजेक्ट को स्कैन करते समय, Sobelow कभी-कभी अपडेट की जाँच करेगा, और यदि कोई नया संस्करण उपलब्ध है तो एक अलर्ट प्रिंट करेगा। Sobelow स्कैन किए गए प्रोजेक्ट की रूट में एक .sobelow फ़ाइल बनाकर अंतिम अपडेट-जाँच का रिकॉर्ड रखता है।
यदि यह कार्यक्षमता वांछित नहीं है, तो स्कैन के साथ --private फ़्लैग का उपयोग किया जा सकता है।
--all-details - सभी खोज-प्रकारों का विवरण प्राप्त करें।
--private - अपडेट जाँच छोड़ें।
--router - राउटर स्थान निर्दिष्ट करें। इसका उपयोग केवल तभी करने की आवश्यकता है जब राउटर स्थान गैर-मानक हो। एक पथ तर्क स्वीकार करता है, उदा. my/strange/router.ex।
--exit - low, medium, या high की विश्वास सीमा पर या उससे ऊपर गैर-शून्य निकास स्थिति लौटाएँ। डिफ़ॉल्ट false है जो शून्य निकास स्थिति लौटाता है
--threshold - low (डिफ़ॉल्ट), medium, या high के विश्वास स्तर पर या उससे ऊपर के निष्कर्ष लौटाएँ।
--format या -f - खोज आउटपुट प्रारूप निर्दिष्ट करें। एक प्रारूप स्वीकार करता है, उदा. txt या json।
ध्यान दें कि --verbose जैसे विकल्प json प्रारूप के साथ काम नहीं करेंगे। सभी json स्वरूपित निष्कर्षों में type, file, और line कुंजी होती है। अन्य कुंजियाँ भिन्न हो सकती हैं।
--quiet - निष्कर्षों की संख्या दर्शाने वाली एक पंक्ति लौटाएँ। अन्यथा, यदि कोई निष्कर्ष नहीं हैं तो कोई आउटपुट न लौटाएँ।
--compact - न्यूनतम, एकल-पंक्ति निष्कर्ष विश्वास के अनुसार रंगीन आउटपुट के साथ।
--flycheck - न्यूनतम, एकल-पंक्ति निष्कर्ष जो flycheck-आधारित टूलिंग के साथ संगत हैं।
--save-config - कमांड लाइन विकल्पों के आधार पर एक कॉन्फ़िगरेशन फ़ाइल उत्पन्न करता है। अधिक जानकारी के लिए कॉन्फ़िगरेशन फ़ाइलें देखें।
--config - कॉन्फ़िगरेशन फ़ाइल के साथ Sobelow चलाएँ। अधिक जानकारी के लिए कॉन्फ़िगरेशन फ़ाइलें देखें।
--mark-skip-all - सभी प्रदर्शित निष्कर्षों को छोड़ने योग्य के रूप में चिह्नित करें।
--clear-skip - --mark-skip-all द्वारा बनाई गई कॉन्फ़िगरेशन साफ़ करें।
--skip - उन निष्कर्षों को अनदेखा करें जिन्हें छोड़ने के लिए चिह्नित किया गया है। अधिक जानकारी के लिए गलत सकारात्मक देखें।
--version - Sobelow का वर्तमान संस्करण आउटपुट करता है। यह CI चरणों या Salus जैसे अन्य टूल के साथ एकीकरण के लिए उपयोगी है।