
गो कोड को सुरक्षित करने के लिए एक स्थैतिक विश्लेषण उपकरण
GoKart Go भाषा के लिए एक स्थैतिक विश्लेषण उपकरण है जो Go स्रोत कोड के SSA (एकल स्थैतिक असाइनमेंट) रूप का उपयोग करके कमजोरियाँ ढूँढता है। यह चर और फ़ंक्शन तर्कों के स्रोत का पता लगाने में सक्षम है ताकि यह निर्धारित किया जा सके कि इनपुट स्रोत सुरक्षित हैं या नहीं, जो अन्य Go सुरक्षा स्कैनर की तुलना में झूठी सकारात्मकता (false positives) की संख्या को कम करता है। उदाहरण के लिए, एक SQL क्वेरी जो एक चर के साथ संयोजित (concatenated) की गई है, उसे पारंपरिक रूप से SQL इंजेक्शन के रूप में चिह्नित किया जा सकता है; हालाँकि, GoKart यह पता लगा सकता है कि वह चर वास्तव में एक स्थिरांक (constant) या स्थिरांक के बराबर है, जिस स्थिति में कोई कमजोरी नहीं है।
GoKart Chariot को भी सशक्त बनाने में मदद करता है, जो Praetorian का सुरक्षा प्लेटफ़ॉर्म है जो आपके स्रोत कोड और क्लाउड वातावरण में कमजोरियाँ खोजने, प्रबंधित करने और ठीक करने में सहायता करता है। Chariot आपके स्रोत कोड पर स्वचालित, निरंतर GoKart स्कैन चलाना आसान बनाता है। यदि आप GoKart आज़माना चाहते हैं, तो आप यहाँ क्लिक करके मिनटों में एक मुफ्त Chariot खाता सेट कर सकते हैं।
स्थैतिक विश्लेषण स्रोत कोड में कमजोरियाँ खोजने की एक शक्तिशाली तकनीक है। हालाँकि, इस दृष्टिकोण में शोर (noise) की समस्या रही है - अर्थात, कई स्थैतिक विश्लेषण उपकरण काफी कुछ "कमजोरियाँ" ढूँढ़ लेते हैं जो वास्तव में वास्तविक नहीं होती हैं। इससे डेवलपर्स में घर्षण (friction) पैदा हुआ है क्योंकि उपयोगकर्ता बार-बार "भेड़िया रोने" वाले उपकरणों से थक जाते हैं।
GoKart का उद्देश्य यह संबोधित करना था: क्या हम मौजूदा उपकरणों की तुलना में काफी कम झूठी सकारात्मकता दर (false positive rate) वाला स्कैनर बना सकते हैं? हमारे प्रयोगों के आधार पर उत्तर हाँ है। स्रोत-से-सिंक (source-to-sink) ट्रेसिंग और SSA का लाभ उठाकर, GoKart चर असाइनमेंट के बीच वेरिएबल टैन्ट को ट्रैक करने में सक्षम है, जिससे निष्कर्षों की सटीकता में काफी सुधार होता है। हमारा ध्यान उपयोगिता पर है: व्यावहारिक रूप से, इसका मतलब है कि हमने झूठे अलार्म को कम करने के लिए अपने दृष्टिकोण को अनुकूलित किया है।
अधिक जानकारी के लिए, कृपया हमारा ब्लॉग पोस्ट पढ़ें।
आप नीचे दिए गए किसी भी विकल्प का उपयोग करके GoKart को स्थानीय रूप से इंस्टॉल कर सकते हैं।
go install के साथ इंस्टॉल करें$ go install github.com/praetorian-inc/gokart@latest
रिलीज़ पेज से अपने OS के लिए बाइनरी डाउनलोड करें।
(वैकल्पिक) आर्काइव की अखंडता को सत्यापित करने के लिए checksums.txt फ़ाइल डाउनलोड करें
# डाउनलोड किए गए आर्काइव के चेकसम की जाँच करें
$ shasum -a 256 gokart_${VERSION}_${ARCH}.tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_${VERSION}_${ARCH}.tar.gz
$ cat gokart_${VERSION}_${ARCH}_checksums.txt | grep gokart_${VERSION}_${ARCH}.tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_${VERSION}_${ARCH}.tar.gz
$ tar -xvf gokart_${VERSION}_${ARCH}.tar.gz
gokart बाइनरी को अपने पथ में ले जाएँ:$ mv ./gokart /usr/local/bin/
# GoKart रिपॉजिटरी को क्लोन करें
$ git clone https://github.com/praetorian-inc/gokart.git
# रिपॉजिटरी डायरेक्टरी में जाएँ और बिल्ड करें
$ cd gokart
$ go build
# gokart बाइनरी को अपने पथ में ले जाएँ
$ mv ./gokart /usr/local/bin
डॉकर इमेज बनाएँ
docker build -t gokart .
स्थानीय स्कैन के साथ कंटेनर चलाएँ (स्थानीय स्कैन डायरेक्टरी को कंटेनर इमेज में माउंट करना होगा)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dir
रिमोट स्कैन के साथ कंटेनर चलाएँ (प्रमाणीकरण के लिए निजी कुंजी निर्दिष्ट करते समय, उसे भी कंटेनर में माउंट करना होगा)
docker run gokart scan -r https://github.com/praetorian-inc/gokart
# निजी रिपॉजिटरी SSH प्रमाणीकरण के लिए निजी कुंजी निर्दिष्ट करना
docker run -v /path/to/key-dir/:/key-dir gokart scan -r [email protected]:praetorian-inc/gokart.git -k /key-dir/ssh_key
# बिना डायरेक्टरी निर्दिष्ट किए चलाने पर डिफ़ॉल्ट रूप से '.' लिया जाता है
gokart scan <flags>
gokart scan <directory> <flags>
gokart help
आप GoKart को Go Test Bench पर चलाने के लिए नीचे दिए गए चरणों का पालन कर सकते हैं, जो Contrast Security टीम का एक जानबूझकर कमजोर बनाया गया Go एप्लिकेशन है।
# नमूना कमजोर एप्लिकेशन को क्लोन करें
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/
आउटपुट में कुछ पहचानी गई कमजोरियाँ दिखनी चाहिए, प्रत्येक में एक कमजोर फ़ंक्शन (Vulnerable Function) और उपयोगकर्ता इनपुट का स्रोत (Source of User Input) पहचाना गया होगा।
कुछ अतिरिक्त GoKart सुविधाओं का परीक्षण करने के लिए, आप नीचे सुझाए गए CLI फ़्लैग के साथ स्कैन कर सकते हैं।
# पूर्ण ट्रेस दिखाने के लिए वर्बोज़ फ़्लैग का उपयोग करें
gokart scan go-test-bench/ -v
# व्हाइटलिस्ट किए गए स्रोतों को अनदेखा करने के लिए globalsTainted फ़्लैग का उपयोग करें
# इससे झूठी सकारात्मकता बढ़ सकती है
gokart scan go-test-bench/ -v -g
# आंतरिक विश्लेषण जानकारी प्रदर्शित करने के लिए डीबग फ़्लैग का उपयोग करें
# जो विकास और डीबगिंग के लिए उपयोगी है
gokart scan go-test-bench/ -d
# सारिफ फ़ॉर्मेट में परिणाम आउटपुट करें
gokart scan go-test-bench/ -s
# फ़ाइल में परिणाम आउटपुट करें
gokart scan go-test-bench/ -o gokart-go-test-bench.txt
# सारिफ परिणाम फ़ाइल में आउटपुट करें
gokart scan go-test-bench/ -o gokart-go-test-bench.txt -s
# रिमोट सार्वजनिक रिपॉजिटरी स्कैन करें
# रिपॉजिटरी को स्थानीय रूप से क्लोन किया जाएगा, स्कैन किया जाएगा और बाद में हटा दिया जाएगा
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -v
# स्कैन करने के लिए रिमोट ब्रांच निर्दिष्ट करें
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -b actions_fix
# SSH के माध्यम से रिमोट निजी रिपॉजिटरी स्कैन करें
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git
# रिमोट निजी रिपॉजिटरी स्कैन करें और वैकल्पिक रूप से SSH प्रमाणीकरण के लिए एक कुंजी निर्दिष्ट करें
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git -k /home/gokart/.ssh/github_rsa_key
# निर्बाध सुरक्षा समीक्षाओं के लिए रिमोट स्कैन और आउटपुट फ़्लैग एक साथ उपयोग करें
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -v
# CI/CD में निर्बाध एकीकरण के लिए रिमोट स्कैन, आउटपुट और सारिफ फ़्लैग का उपयोग करें
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -s
GoKart की विस्तारशीलता का परीक्षण करने के लिए, आप GoKart द्वारा उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइल को संशोधित करके विश्लेषण में एक नया कमजोर सिंक (vulnerable sink) शामिल कर सकते हैं। शामिल डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल util/analyzers.yml में एक टेस्ट सिंक एनालाइज़र परिभाषित है। टेस्ट सिंक एनालाइज़र पर टिप्पणियाँ हटाने के लिए util/analyzers.yml को संशोधित करें और फिर GoKart को संशोधित कॉन्फ़िगरेशन फ़ाइल का उपयोग करने के लिए -i फ़्लैग के साथ निर्देशित करें।
# संशोधित analyzers.yml फ़ाइल का उपयोग करके स्कैन करें और पूर्ण ट्रेस आउटपुट करें
gokart scan go-test-bench/ -v -i <path-to-gokart>/util/analyzers.yml
आउटपुट में अब अतिरिक्त कमजोरियाँ शामिल होनी चाहिए, जिनमें नई "Test Sink reachable by user input" कमजोरियाँ शामिल हैं।
आप निम्न कमांड के साथ शामिल परीक्षण (tests) चला सकते हैं, जिसे GoKart रूट डायरेक्टरी से चलाया जाना चाहिए।
go test -v ./...