1. खास जानकारी
सुरक्षित सोर्स कोड तकनीकें, कुछ ऐसी प्रोसेस होती हैं जिनका इस्तेमाल सोर्स कोड की सुरक्षा को बेहतर बनाने के लिए किया जा सकता है. इन तकनीकों की मदद से, सोर्स कोड में मौजूद कमज़ोरियों का पता लगाया जा सकता है और उन्हें ठीक किया जा सकता है. साथ ही, सोर्स कोड को बिना अनुमति के ऐक्सेस करने से रोका जा सकता है और सोर्स कोड में बदलाव होने से बचाया जा सकता है.
सुरक्षित सोर्स कोड के लिए इस्तेमाल की जाने वाली कुछ सामान्य तकनीकें यहां दी गई हैं:
- लिंटिंग: लिंटिंग, सोर्स कोड में गड़बड़ियों और स्टाइल से जुड़ी समस्याओं की जांच करने की प्रोसेस है. इसके लिए, लिंट टूल का इस्तेमाल किया जाता है. यह एक ऐसा प्रोग्राम है जो सोर्स कोड का विश्लेषण करता है और संभावित समस्याओं की पहचान करता है. लिंट टूल का इस्तेमाल, कई तरह की गड़बड़ियों का पता लगाने के लिए किया जा सकता है. जैसे, सिंटैक्स से जुड़ी गड़बड़ियां, सिमैंटिक से जुड़ी गड़बड़ियां, स्टाइल से जुड़ी गड़बड़ियां, और सुरक्षा से जुड़े जोखिम.
- स्टैटिक ऐप्लिकेशन सिक्योरिटी टेस्टिंग (एसएएसटी): एसएएसटी, सुरक्षा की जांच करने का एक तरीका है. इसमें सोर्स कोड, बाइनरी कोड या बाइट कोड का विश्लेषण करके, सुरक्षा से जुड़े जोखिमों का पता लगाया जाता है. SAST टूल का इस्तेमाल, अलग-अलग प्रोग्रामिंग भाषाओं में मौजूद जोखिमों का पता लगाने के लिए किया जा सकता है. जैसे, Go, Java, Python, C++, और C#.
- लाइसेंस स्कैन करना: लाइसेंस स्कैन करने का मतलब है, किसी सॉफ़्टवेयर ऐप्लिकेशन में इस्तेमाल किए गए तीसरे पक्ष के सॉफ़्टवेयर कॉम्पोनेंट के लाइसेंस की पहचान करना. यह ज़रूरी है, क्योंकि इससे यह पक्का करने में मदद मिलती है कि ऐप्लिकेशन, लाइसेंस की शर्तों का पालन करता हो. इससे कानूनी समस्याओं से बचा जा सकता है.
इन तकनीकों का इस्तेमाल, सॉफ़्टवेयर डेवलपमेंट लाइफ़ साइकल के सभी चरणों में सोर्स कोड की सुरक्षा को बेहतर बनाने के लिए किया जा सकता है. लिंटिंग का इस्तेमाल, डेवलपमेंट प्रोसेस के शुरुआती चरण में गड़बड़ियों का पता लगाने के लिए किया जा सकता है. SAST का इस्तेमाल, कोड को कंपाइल या डिप्लॉय करने से पहले कमज़ोरियों का पता लगाने के लिए किया जा सकता है. साथ ही, लाइसेंस स्कैनिंग का इस्तेमाल यह पक्का करने के लिए किया जा सकता है कि ऐप्लिकेशन, लाइसेंस की शर्तों का पालन करता हो.
इन तकनीकों का इस्तेमाल करके, सोर्स कोड की सुरक्षा को बेहतर बनाया जा सकता है. साथ ही, सुरक्षा से जुड़े उल्लंघनों के जोखिम को कम किया जा सकता है.
आपको क्या सीखने को मिलेगा
इस लैब में, सॉफ़्टवेयर के सोर्स कोड को सुरक्षित रखने के टूल और तकनीकों पर फ़ोकस किया जाएगा.
- लिंटिंग
- स्टैटिक ऐप्लिकेशन सिक्योरिटी टेस्टिंग
- लाइसेंस स्कैन करना
इस लैब में इस्तेमाल किए गए सभी टूल और कमांड, Cloud Shell में लागू किए जाएंगे.
2. सेटअप और ज़रूरी शर्तें
अपनी स्पीड से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.



- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_IDके तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.
Cloud Shell Editor शुरू करना
इस लैब को Google Cloud Shell Editor के साथ इस्तेमाल करने के लिए डिज़ाइन और टेस्ट किया गया है. एडिटर को ऐक्सेस करने के लिए,
- https://console.cloud.google.com पर जाकर, अपने Google प्रोजेक्ट को ऐक्सेस करें.
- सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell एडिटर आइकॉन पर क्लिक करें

- आपकी विंडो में सबसे नीचे एक नया पैनल खुलेगा
- 'एडिटर खोलें' बटन पर क्लिक करें

- एडिटर खुलेगा. इसमें दाईं ओर एक्सप्लोरर और बीच में एडिटर दिखेगा
- स्क्रीन पर सबसे नीचे एक टर्मिनल पैन भी उपलब्ध होना चाहिए
- अगर टर्मिनल खुला नहीं है, तो नई टर्मिनल विंडो खोलने के लिए `ctrl+`` कीबोर्ड शॉर्टकट का इस्तेमाल करें
एनवायरमेंट सेटअप करना
इस लैब में इस्तेमाल की जाने वाली कमांड को आसान बनाने के लिए, GOPATH को किसी एक डायरेक्ट्री पर सेट करें.
export GOPATH=$HOME/gopath
अपने काम को सेव करने के लिए एक डायरेक्ट्री बनाएं
mkdir -p workspace
cd workspace
सोर्स कोड रिपॉज़िटरी को क्लोन करना
git clone https://gitlab.com/gcp-solutions-public/shift-left-security-workshop/source-code-lab.git
cd source-code-lab
export WORKDIR=$(pwd)
3. लिंटिंग
लिंटिंग का इस्तेमाल, स्टाइल से जुड़ी सामान्य गड़बड़ियों या सिंटैक्स से जुड़ी कमियों की जांच करने के लिए किया जाता है. लिंटिंग, सुरक्षा में मदद करती है. यह कई टीमों के लिए एक जैसा सिंटैक्स पैटर्न उपलब्ध कराती है. इससे कोड की समीक्षाएं तेज़ी से होती हैं, जानकारी शेयर की जाती है, और कोड को आसानी से समझा जा सकता है.
इसके अलावा, Linting सिंटैक्स से जुड़ी आम गलतियों की पहचान करता है. इनकी वजह से, सामान्य कमज़ोरियां हो सकती हैं. जैसे, लाइब्रेरी या कोर एपीआई का सही तरीके से या कम असरदार तरीके से इस्तेमाल करना.
staticcheck लिंकिंग टूल इंस्टॉल करना
go get honnef.co/go/tools/cmd/staticcheck@latest
प्रोजेक्ट की रूट डायरेक्ट्री में Go Linter (staticcheck) चलाएं
staticcheck
आउटपुट की समीक्षा करना
main.go:42:29: unnecessary use of fmt.Sprintf (S1039)
आपको यह गड़बड़ी इसलिए मिली है, क्योंकि http.ListenAndServe() एक स्ट्रिंग स्वीकार करता है. वहीं, मौजूदा कोड में स्ट्रिंग को वैरिएबल पास किए बिना Sprintf का इस्तेमाल किया गया है
कमांड के एक्ज़िट स्टेटस की समीक्षा करें.
echo $?
इस मामले में, कमांड से गड़बड़ी हुई है. इसलिए, एग्ज़िट स्टेटस 1 या इससे ज़्यादा होगा. यह एक ऐसा तरीका है जिसका इस्तेमाल CI/CD पाइपलाइन में किया जा सकता है. इससे टूल के काम करने या न करने के बारे में पता चलता है.
main.go फ़ाइल में बदलाव करें और कोड ठीक करें:
- नीचे दी गई लाइन
LINTING - Step 1कोmain()तरीके के अंदर, लीडिंग स्लैश(//) जोड़कर कमेंट आउट करें. LINTING - Step 2तरीके के अंदर मौजूदmain()के ठीक नीचे मौजूद दो लाइनों से, शुरुआती स्लैश हटाकर उन्हें अनकमेंट करें.
प्रोजेक्ट की रूट डायरेक्ट्री में staticcheck को फिर से चलाएं
staticcheck
इस कमांड से कोई नतीजा नहीं मिलना चाहिए. इसका मतलब है कि कोई लाइन खाली नहीं होनी चाहिए.
कमांड के एक्ज़िट स्टेटस की जांच करें.
echo $?
इस मामले में, निर्देश से कोई गड़बड़ी नहीं हुई है. इसलिए, एग्ज़िट स्टेटस शून्य होगा.
4. स्टैटिक ऐप्लिकेशन सिक्योरिटी टेस्टिंग
एएसटी/स्टैटिक सुरक्षा जांच - यह स्टैटिक कोड का विश्लेषण करती है. इससे सामान्य कमज़ोरियों और एक्सपोज़र ( CWE) का पता चलता है
एएसटी टूल इंस्टॉल करना (gosec)
export GOSEC_VERSION="2.15.0"
curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | \
sh -s -- -b $(go env GOPATH)/bin v${GOSEC_VERSION}
सोर्स कोड के ख़िलाफ़ नीति फ़ाइल के साथ gosec को चलाएं
gosec -conf policies/gosec-policy.json -fmt=json ./...
आउटपुट ऐसा होना चाहिए
{
"Golang errors": {},
"Issues": [
{
"severity": "HIGH",
"confidence": "LOW",
"cwe": {
"ID": "798",
"URL": "https://cwe.mitre.org/data/definitions/798.html"
},
"rule_id": "G101",
"details": "Potential hardcoded credentials",
"file": "/home/random-user-here/shift-left-security-workshop/labs/source-code-lab/main.go",
"code": "31: \t// STEP 2: Change this and the reference below to something different (ie, not \"pawsword\" or \"password\")\n32: \tvar pawsword = \"im-a-cute-puppy\"\n33: \tfmt.Println(\"Something a puppy would use: \", username, pawsword)\n",
"line": "32",
"column": "6"
}
],
"Stats": {
"files": 1,
"lines": 89,
"nosec": 0,
"found": 1
}
}
इस टूल को एक संभावित समस्या का पता चला है: Potential hardcoded credentials
5. लाइसेंस स्कैन करना
सुरक्षा के लिए लाइसेंस ज़रूरी होते हैं, क्योंकि कानूनी तौर पर यह ज़रूरी हो सकता है कि आप सोर्स कोड को सार्वजनिक करें. हालांकि, ऐसा हो सकता है कि आप सोर्स कोड को सार्वजनिक न करना चाहें. इस कॉन्सेप्ट को " कॉपीलेफ़्ट" लाइसेंस कहा जाता है. अगर इन लाइसेंस के साथ डिपेंडेंसी का इस्तेमाल किया जाता है, तो आपको सोर्स कोड दिखाना होगा.
golicense इंस्टॉल करें
mkdir -p /tmp/golicense
wget -O /tmp/golicense/golicense.tar.gz https://github.com/mitchellh/golicense/releases/download/v0.2.0/golicense_0.2.0_linux_x86_64.tar.gz
pushd /tmp/golicense
tar -xzf golicense.tar.gz
chmod +x golicense
mv golicense $(go env GOPATH)/bin/golicense
popd
बाइनरी फ़ाइल बनाना
go build
मौजूदा नीति फ़ाइल के साथ लाइसेंस की जांच करें. इस फ़ाइल में "BSD-3-Clause" लाइसेंस की अनुमति नहीं है
golicense policies/license-policy.hcl hello-world
ध्यान दें: यह इसी तरह के आउटपुट के साथ काम नहीं करना चाहिए:
🚫 rsc.io/sampler BSD 3-Clause "New" or "Revised" License 🚫 rsc.io/quote BSD 3-Clause "New" or "Revised" License 🚫 golang.org/x/text BSD 3-Clause "New" or "Revised" License
नीति फ़ाइल policies/license-policy.hcl में बदलाव करके, "BSD-3-Clause" को deny सूची से allow सूची में ले जाएं.
लाइसेंस की जांच फिर से करें
golicense policies/license-policy.hcl hello-world
ध्यान दें: इससे मिलता-जुलता आउटपुट मिलना चाहिए:
✅ rsc.io/quote BSD 3-Clause "New" or "Revised" License
✅ rsc.io/sampler BSD 3-Clause "New" or "Revised" License
✅ golang.org/x/text BSD 3-Clause "New" or "Revised" License
6. बधाई हो
बधाई हो, आपने कोडलैब पूरा कर लिया है!
आपने क्या सीखा
- सोर्स कोड को सुरक्षित रखने के लिए टूल और तकनीकें
—
पिछला अपडेट: 23/3/23