
स्टैटिक टोकन और क्रेडेंशियल स्कैनर
Static Token And Credential Scanner
STACS एक YARA संचालित स्थैतिक क्रेडेंशियल स्कैनर है जो बाइनरी फ़ाइल स्वरूपों, नेस्टेड आर्काइव के विश्लेषण, कम्पोज़ेबल नियम सेट और इग्नोर सूचियाँ, तथा SARIF रिपोर्टिंग का समर्थन करता है।
वर्तमान में, STACS निम्नलिखित के रिकर्सिव अनपैकिंग का समर्थन करता है:
चूंकि STACS पहचाने गए फ़ाइल प्रकारों पर काम करता है, इसलिए मालिकाना फ़ाइल स्वरूप और अन्य फ़ाइल-प्रकार जो इन स्वरूपों का उपयोग करते हैं, स्वचालित रूप से समर्थित हो जाते हैं। इसमें Docker इमेज, Android APK, Java JAR फ़ाइलें, RPM, Debian पैकेज (.deb), macOS पैकेज (.pkg), और भी बहुत कुछ शामिल है!
STACS उन सभी टीमों द्वारा उपयोग के लिए डिज़ाइन किया गया है जो बाइनरी आर्टिफैक्ट जारी करती हैं। STACS डेवलपर्स को अपने रिलीज़ में स्थैतिक क्रेडेंशियल और कुंजी सामग्री के आकस्मिक समावेश की स्वचालित रूप से जाँच करने की क्षमता प्रदान करता है।
हालाँकि, इसका मतलब यह नहीं है कि STACS SaaS अनुप्रयोगों, एंटरप्राइज़ सॉफ़्टवेयर, या स्रोत कोड में भी मदद नहीं कर सकता!
उदाहरण के लिए, STACS का उपयोग सार्वजनिक और निजी कंटेनर रजिस्ट्रियों पर अपलोड की गई Docker इमेज में स्थैतिक क्रेडेंशियल खोजने के लिए किया जा सकता है। इसका उपयोग एक्ज़ीक्यूटेबल, मोबाइल उपकरणों के पैकेज और "एंटरप्राइज़ आर्काइव" - जैसे कि Java एप्लिकेशन सर्वर द्वारा उपयोग किए जाने वाले - में गलती से संकलित क्रेडेंशियल खोजने के लिए भी किया जा सकता है।
STACS "रूल पैक" का उपयोग करके स्थैतिक क्रेडेंशियल का पता लगाता है, जो चलाने पर STACS को प्रदान किए जाते हैं। ये रूल पैक STACS को प्रदान की गई फ़ाइलों के विरुद्ध चलाने के लिए YARA नियमों का एक सेट परिभाषित करते हैं। जब किसी नियम के विरुद्ध मिलान पाया जाता है, तो एक "फ़ाइंडिंग" उत्पन्न होती है। ये फ़ाइंडिंग किसी फ़ाइल के अंदर संभावित क्रेडेंशियल का प्रतिनिधित्व करती हैं, और डेवलपर द्वारा सुधार या "इग्नोर" करने के लिए रिपोर्ट की जाती हैं।
यदि फ़ाइंडिंग गलत सकारात्मक (false positive) पाई जाती है - अर्थात, वास्तविक क्रेडेंशियल के अलावा किसी अन्य चीज़ पर मिलान - तो डेवलपर "इग्नोर सूचियों" का एक सेट उत्पन्न कर सकता है ताकि यह सुनिश्चित हो सके कि ये मिलान भविष्य की रिपोर्टों में दिखाई न दें।
STACS की वास्तविक शक्ति नेस्टेड आर्काइव के स्वचालित पहचान और अनपैकिंग, और कम्पोज़ेबल इग्नोर सूचियों और रूल पैक से आती है।
लचीले और सहयोगी उपयोग की अनुमति देने के लिए, STACS कम्पोज़ेबल इग्नोर सूचियों का समर्थन करता है। यह एक इग्नोर सूची को अन्य इग्नोर सूचियों को शामिल करने की अनुमति देता है, जो संगठनात्मक दिशानिर्देशों के आधार पर "इग्नोर का वृक्ष" बनाने में सक्षम बनाता है। ये इग्नोर सूचियाँ विशेष रूप से उन संगठनों में उपयोगी होती हैं जहाँ कई समान फ्रेमवर्क या उत्पादों का उपयोग किया जाता है। यदि किसी टीम ने पहले ही किसी फ़ाइंडिंग को गलत सकारात्मक के रूप में चिह्नित कर दिया है, तो अन्य टीमों को उसी फ़ाइंडिंग को ट्राइएज न करने का लाभ मिलता है।
इग्नोर सूचियों के समान ही, रूल पैक भी कम्पोज़ेबल होते हैं। यह एक संगठन को सभी टीमों द्वारा उपयोग के लिए नियमों का एक आधार सेट परिभाषित करने में सक्षम बनाता है, जबकि टीमों को अपने उत्पादों के लिए विशिष्ट नियम सेट बनाए रखने की अनुमति भी देता है।
STACS का उपयोग करने का सबसे आसान तरीका Docker Hub पर प्रकाशित Docker इमेज का उपयोग करना है। हालाँकि, STACS को Python के PyPI से सीधे या इस रिपॉजिटरी को क्लोन करके भी स्थापित किया जा सकता है। आरंभ करने के लिए नीचे दिए गए प्रासंगिक अनुभाग देखें!
एक क्लाउड-आधारित सेवा जल्द ही आ रही है जो बिल्ड और रिलीज़ पाइपलाइनों में सीधे एकीकरण की अनुमति देगी ताकि रिलीज़ से पहले स्थैतिक क्रेडेंशियल का पता लगाया जा सके!
प्रकाशित इमेज का उपयोग करके, STACS का उपयोग आर्टिफैक्ट को तुरंत स्कैन करने के लिए किया जा सकता है! STACS Docker इमेज स्कैन कंटेनर में सीधे माउंट किए जाने वाली फ़ाइलों के लिए कई वॉल्यूम माउंट प्रदान करती है।
उदाहरण के लिए, वर्तमान फ़ोल्डर में सब कुछ स्कैन करने के लिए, निम्न कमांड चलाया जा सकता है (Docker स्थापित होना चाहिए)।
docker run \
--rm \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
यदि आप "सुंदर" पठनीय आउटपुट प्राप्त करना चाहते हैं, तो निम्न कमांड का उपयोग किया जाना चाहिए:
docker run \
--rm \
-e STACS_OUTPUT_PRETTY=1 \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
डिफ़ॉल्ट रूप से, STACS किसी भी फ़ाइंडिंग को SARIF प्रारूप में सीधे STDOUT पर आउटपुट करेगा और व्यवस्था बनाए रखने के लिए, सभी लॉग संदेश STDERR पर भेजे जाएँगे। अधिक उन्नत उपयोग के मामलों के लिए, कई अन्य वॉल्यूम माउंट प्रदान किए गए हैं। ये उपयोगकर्ता को रूल पैक, इग्नोर सूचियाँ और उपयोग करने के लिए कैश निर्देशिकाओं को नियंत्रित करने की अनुमति देते हैं।
STACS को Python के PyPi से सीधे भी स्थापित किया जा सकता है। यह एक stacs कमांड प्रदान करता है जिसका उपयोग डेवलपर्स अपने स्थानीय विकास वातावरण में सीधे प्रोजेक्ट को स्कैन करने के लिए कर सकते हैं।
STACS को PyPi से सीधे स्थापित किया जा सकता है:
pip install stacs
कृपया ध्यान दें: STACS के PyPi रिलीज़ में कोई नियम शामिल नहीं हैं। STACS के काम करने के लिए इन्हें सामुदायिक नियम रिपॉजिटरी से भी क्लोन करने की आवश्यकता होगी!
अभी तक नहीं। हालाँकि, STACS के एक होस्टेड संस्करण की योजना है जिसे मौजूदा बिल्ड सिस्टम में आसानी से एकीकृत किया जा सकता है, और जिसमें अतिरिक्त पूर्व-निर्मित रूल पैक और इग्नोर सूचियाँ शामिल हैं।
दुर्भाग्य से, स्थैतिक क्रेडेंशियल का पता लगाने के दौरान गलत सकारात्मक एक अपरिहार्य दुष्प्रभाव हैं। यदि नियम बहुत अधिक दानेदार हैं तो नियम रखरखाव एक बोझ बन जाता है और STACS क्रेडेंशियल को याद कर सकता है। यदि नियम बहुत मोटे हैं तो STACS बहुत अधिक गलत सकारात्मक उत्पन्न कर सकता है!
सहायता के लिए, STACS गलत सकारात्मक की संख्या को कम करने में सहायता के लिए कई उपकरण प्रदान करता है जो अंतिम रिपोर्ट में शामिल होते हैं।
मुख्य रूप से, STACS एक तंत्र प्रदान करता है जो उपयोगकर्ताओं को कम्पोज़ेबल इग्नोर सूचियाँ परिभाषित करने की अनुमति देता है जो फ़ाइंडिंग के एक सेट को "इग्नोर" करने की अनुमति देता है। ये नियम किसी पैटर्न के आधार पर सभी फ़ाइलों को इग्नोर करने जितने मोटे हो सकते हैं, या किसी फ़ाइल की किसी विशेष पंक्ति पर किसी विशिष्ट फ़ाइंडिंग जितने दानेदार हो सकते हैं।
यह जानकारी स्वचालित रूप से रिपोर्ट में प्रसारित हो जाती है, इसलिए "इग्नोर" की गई फ़ाइंडिंग SARIF आउटपुट में "दबाई गई" (suppressed) के रूप में चिह्नित की जाएँगी, साथ ही ट्रैकिंग के लिए आउटपुट में इग्नोर करने का कारण भी शामिल होगा।
यदि "सुंदर" आउटपुट (--pretty / STACS_OUTPUT_PRETTY) का उपयोग कर रहे हैं, तो परिणाम कंसोल पर मानव-पठनीय प्रारूप में मुद्रित होंगे।

यदि SARIF का उपयोग कर रहे हैं, तो कई व्यूअर उपलब्ध हैं जो इस डेटा को पढ़ने में आसान बनाते हैं, जैसे Microsoft का यह शानदार वेब-आधारित व्यूअर। Docker कंटेनर इमेज से फ़ाइंडिंग का एक उदाहरण नीचे शामिल किया गया है:

दुर्भाग्य से, यह Docker Desktop for Mac की एक सीमा के कारण प्रतीत होता है। बाइंड माउंट के लिए I/O वास्तव में, वास्तव में धीमा है।