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, सुरक्षा में मदद करता है. यह कई टीमों के लिए एक जैसा सिंटैक्स पैटर्न उपलब्ध कराता है. इससे कोड की समीक्षाएं तेज़ी से होती हैं, जानकारी शेयर की जाती है, और कोड को आसानी से समझा जा सकता है.
इसके अलावा, 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) का पता चलता है
AST टूल इंस्टॉल करना (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