সুরক্ষিত সোর্স কোড

1. ওভারভিউ

সিকিউর সোর্স কোড কৌশল হল একগুচ্ছ অভ্যাস যা সোর্স কোডের নিরাপত্তা উন্নত করতে ব্যবহার করা যেতে পারে। এই কৌশলগুলি সোর্স কোডের দুর্বলতাগুলি সনাক্ত করতে এবং ঠিক করতে, সোর্স কোডে অননুমোদিত অ্যাক্সেস রোধ করতে এবং সোর্স কোডকে সংশোধন করা থেকে রক্ষা করতে সহায়তা করতে পারে।

কিছু সাধারণ নিরাপদ সোর্স কোড কৌশল অন্তর্ভুক্ত:

  • লিন্টিং: লিন্টিং হল ত্রুটি এবং শৈলীগত সমস্যাগুলির জন্য সোর্স কোড পরীক্ষা করার প্রক্রিয়া। এটি একটি লিন্ট টুল ব্যবহার করে করা হয়, যা একটি প্রোগ্রাম যা সোর্স কোড বিশ্লেষণ করে এবং সম্ভাব্য সমস্যা চিহ্নিত করে। সিনট্যাক্স ত্রুটি, শব্দার্থগত ত্রুটি, শৈলী ত্রুটি এবং সুরক্ষা দুর্বলতা সহ বিভিন্ন ত্রুটি পরীক্ষা করতে লিন্ট সরঞ্জামগুলি ব্যবহার করা যেতে পারে।
  • স্ট্যাটিক অ্যাপ্লিকেশান সিকিউরিটি টেস্টিং (SAST): SAST হল এক ধরনের নিরাপত্তা পরীক্ষা যা নিরাপত্তা দুর্বলতা সনাক্ত করতে সোর্স কোড, বাইনারি কোড বা বাইট কোড বিশ্লেষণ করে। Go, Java, Python, C++ এবং C# সহ বিভিন্ন প্রোগ্রামিং ভাষার দুর্বলতা খুঁজে পেতে SAST টুল ব্যবহার করা যেতে পারে।
  • লাইসেন্স স্ক্যানিং: লাইসেন্স স্ক্যানিং হল একটি সফ্টওয়্যার অ্যাপ্লিকেশনে ব্যবহৃত তৃতীয় পক্ষের সফ্টওয়্যার উপাদানগুলির লাইসেন্স সনাক্ত করার প্রক্রিয়া। এটি গুরুত্বপূর্ণ কারণ এটি নিশ্চিত করতে সাহায্য করে যে আবেদনটি লাইসেন্সের শর্তাবলী মেনে চলছে, যা আইনি সমস্যা এড়াতে সাহায্য করতে পারে।

এই কৌশলগুলি সফ্টওয়্যার বিকাশের জীবন চক্রের সমস্ত পর্যায়ে সোর্স কোডের নিরাপত্তা উন্নত করতে ব্যবহার করা যেতে পারে। বিকাশ প্রক্রিয়ার প্রথম দিকে ত্রুটি সনাক্ত করতে লিন্টিং ব্যবহার করা যেতে পারে, কোড সংকলন বা স্থাপন করার আগে দুর্বলতা খুঁজে বের করতে SAST ব্যবহার করা যেতে পারে, এবং অ্যাপ্লিকেশনটি লাইসেন্সের শর্তাবলী মেনে চলছে তা নিশ্চিত করতে লাইসেন্স স্ক্যানিং ব্যবহার করা যেতে পারে।

এই কৌশলগুলি ব্যবহার করে সোর্স কোডের নিরাপত্তা উন্নত করতে এবং নিরাপত্তা লঙ্ঘনের ঝুঁকি কমাতে সাহায্য করতে পারে।

যা শিখবেন

এই ল্যাবটি সফ্টওয়্যার সোর্স কোড সুরক্ষিত করার সরঞ্জাম এবং কৌশলগুলিতে ফোকাস করবে।

  • লিন্টিং
  • স্ট্যাটিক অ্যাপ্লিকেশন নিরাপত্তা পরীক্ষা
  • লাইসেন্স স্ক্যানিং

এই ল্যাবে ব্যবহৃত সমস্ত সরঞ্জাম এবং কমান্ড ক্লাউড শেলে সঞ্চালিত হবে।

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল এডিটর শুরু করুন

এই ল্যাবটি ডিজাইন করা হয়েছে এবং Google ক্লাউড শেল এডিটরের সাথে ব্যবহারের জন্য পরীক্ষা করা হয়েছে। সম্পাদক অ্যাক্সেস করতে,

  1. https://console.cloud.google.com- এ আপনার গুগল প্রকল্প অ্যাক্সেস করুন।
  2. উপরের ডানদিকের কোণায় ক্লাউড শেল এডিটর আইকনে ক্লিক করুন

8560cc8d45e8c112.png

  1. আপনার উইন্ডোর নীচে একটি নতুন ফলক খুলবে
  2. Open Editor বাটনে ক্লিক করুন

9e504cb98a6a8005.png

  1. সম্পাদকটি ডানদিকে একটি এক্সপ্লোরার এবং কেন্দ্রীয় অঞ্চলে সম্পাদকের সাথে খুলবে৷
  2. স্ক্রিনের নীচে একটি টার্মিনাল ফলকও পাওয়া উচিত
  3. টার্মিনাল খোলা না থাকলে একটি নতুন টার্মিনাল উইন্ডো খুলতে `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. লিন্টিং

সিনট্যাক্স সম্পর্কিত সাধারণ শৈলী-ভিত্তিক ভুল বা ত্রুটিগুলি পরীক্ষা করতে লিন্টিং ব্যবহার করা হয়। লিন্টিং একাধিক দল জুড়ে একটি সাধারণ সিনট্যাক্স প্যাটার্ন প্রদান করে নিরাপত্তা সহায়তা করে যা দ্রুত কোড পর্যালোচনা, জ্ঞান ভাগ করে নেওয়া এবং কোডের স্বচ্ছতার দিকে নিয়ে যায়।

অতিরিক্তভাবে, লিন্টিং সাধারণ সিনট্যাক্স ভুলগুলি সনাক্ত করে যা সাধারণ দুর্বলতার কারণ হতে পারে যেমন লাইব্রেরি বা মূল API-এর অনুপযুক্ত বা কম দক্ষ ব্যবহার।

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-এর নীচের লাইনটি মন্তব্য করুন - main() পদ্ধতির ভিতরে LINTING - Step 1 , লিডিং স্ল্যাশগুলি যোগ করে( // )।
  • LINTING - Step 2 main() পদ্ধতির ভিতরে, লিডিং স্ল্যাশগুলি সরিয়ে।

প্রকল্প রুট ডিরেক্টরিতে staticcheck পুনরায় চালান

staticcheck

কমান্ডের কোনো ফলাফল দেওয়া উচিত নয় (যেমন একটি খালি লাইন।)

কমান্ডের প্রস্থান অবস্থা পরিদর্শন করুন।

  echo $?

এই ক্ষেত্রে, যেহেতু কমান্ডের ফলে কোনো ত্রুটি ঘটেনি, তাই প্রস্থান অবস্থা শূন্য হবে।

4. স্ট্যাটিক অ্যাপ্লিকেশন নিরাপত্তা পরীক্ষা

AST/স্ট্যাটিক নিরাপত্তা পরীক্ষা - সাধারণ দুর্বলতা এবং এক্সপোজার ( CWEs ) খুঁজছেন স্ট্যাটিক কোড বিশ্লেষণ প্রদান করে

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

"BSD-3-Clause" কে deny তালিকা থেকে allow তালিকায় স্থানান্তর করতে পলিসি ফাইল policies/license-policy.hcl পরিবর্তন করুন।

লাইসেন্স চেক পুনরায় চালান

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. অভিনন্দন

অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন!

আপনি যা শিখেছেন

  • সোর্স কোড সুরক্ষিত করার জন্য টুল এবং কৌশল

-

শেষ আপডেট: 3/23/23