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 में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
क्लाउड शेल एडिटर चालू करें
इस लैब को 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. लिंटिंग
लिंटिंग का इस्तेमाल, सिंटैक्स से जुड़ी सामान्य गलतियों या खराबियों की जांच करने के लिए किया जाता है. लिंटिंग, अलग-अलग टीमों के लिए एक जैसा सिंटैक्स पैटर्न उपलब्ध कराता है, जिससे सुरक्षा में मदद मिलती है. इससे कोड की समीक्षा तेज़ी से होती है, जानकारी शेयर की जा सकती है, और कोड को साफ़ तौर पर समझने में मदद मिलती है.
इसके अलावा, लिंटिंग, सिंटैक्स से जुड़ी आम गलतियों की पहचान करता है. इनसे आम तौर पर जोखिम की आशंकाएं पैदा होती हैं. जैसे, लाइब्रेरी या मुख्य एपीआई का गलत तरीके से या कम इस्तेमाल करना.
staticcheck लिंक करने वाला टूल इंस्टॉल करें
go get honnef.co/go/tools/cmd/staticcheck@latest
प्रोजेक्ट रूट डायरेक्ट्री में Go Linter (स्टैटिकचेक) चलाएं
staticcheck
आउटपुट की समीक्षा करें
main.go:42:29: unnecessary use of fmt.Sprintf (S1039)
आपको गड़बड़ी का मैसेज इसलिए मिलता है, क्योंकि http.ListenAndServe() स्ट्रिंग स्वीकार करता है. मौजूदा कोड, स्ट्रिंग में वैरिएबल पास किए बिना Sprintf का इस्तेमाल करता है
निर्देश से बाहर निकलने के स्टेटस की समीक्षा करें.
echo $?
इस मामले में, क्योंकि निर्देश की वजह से कोई गड़बड़ी हुई है, इसलिए एग्ज़िट की स्थिति 1 या उससे बड़ी होगी. यह एक तरीका है, जिसका इस्तेमाल सीआई/सीडी पाइपलाइन में करके, टूल के सही या फ़ेल होने का पता लगाया जा सकता है.
main.go फ़ाइल में बदलाव करें और कोड को ठीक करें:
- लीडिंग स्लैश(
//) जोड़कर,main()तरीके मेंLINTING - Step 1के नीचे की लाइन को टिप्पणी करें. main()तरीके में,LINTING - Step 2के ठीक नीचे की दो लाइनों पर टिप्पणी हटाएं. इसके लिए, शुरुआती स्लैश को हटाएं.
प्रोजेक्ट की रूट डायरेक्ट्री में staticcheck को फिर से चलाएं
staticcheck
कमांड से कोई नतीजा नहीं मिलना चाहिए (जैसे कि एक खाली लाइन.)
निर्देश के एग्ज़िट स्टेटस की जांच करें.
echo $?
इस मामले में, क्योंकि निर्देश की वजह से कोई गड़बड़ी नहीं हुई है, इसलिए एग्ज़िट की स्थिति शून्य होगी.
4. स्थैतिक ऐप्लिकेशन सुरक्षा परीक्षण
एएसटी/स्टैटिक सिक्योरिटी टेस्टिंग - यह स्टैटिक कोड विश्लेषण करता है, ताकि आम कमियों और एक्सपोज़र को खोजा जा सके ( सीडब्ल्यूई)
एएसटी टूल (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. लाइसेंस स्कैन करना
लाइसेंस, सुरक्षा के लिए अहम होते हैं. ऐसा इसलिए, क्योंकि इनसे आपको ऐसा सोर्स कोड दिखाना कानूनी तौर पर ज़रूरी हो सकता है जिसे आप सार्वजनिक न करना चाहें. इस अवधारणा को " copyleft" जिनके लिए आपको सोर्स कोड की ज़रूरत होती है. ऐसा तब होता है, जब उन लाइसेंस के साथ डिपेंडेंसी का इस्तेमाल किया जाता है.
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- क्लॉज़" की अनुमति नहीं देती लाइसेंस
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
"BSD-3-खंड" ले जाने के लिए, नीति फ़ाइल policies/license-policy.hcl में बदलाव करें 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