ক্লাউড আর্মার প্রি-কনফিগার করা WAF নিয়ম কোডল্যাব

১. ভূমিকা

নমস্কার! ক্লাউড আর্মার প্রি-কনফিগারড WAF রুলস কোডল্যাবে আপনাকে স্বাগতম!

গুগল ক্লাউড আর্মার হলো গুগলের এন্টারপ্রাইজ এজ নেটওয়ার্ক নিরাপত্তা সমাধান, যা বৃহৎ পরিসরে ডিডিওএস সুরক্ষা, ডব্লিউএএফ নিয়ম প্রয়োগ এবং অভিযোজিত পরিচালনাযোগ্যতা প্রদান করে।

ক্লাউড আর্মার OWASP টপ ১০ ওয়েব অ্যাপ্লিকেশন নিরাপত্তা দুর্বলতাগুলো প্রশমিত করার জন্য পূর্ব-কনফিগার করা WAF রুল সেটগুলোকে সম্প্রসারিত করেছে। এই রুল সেটগুলো OWASP Modsecurity কোর রুল সেট সংস্করণ 3.0.2-এর উপর ভিত্তি করে তৈরি, যা লোকাল ফাইল ইনক্লুশন (lfi), রিমোট ফাইল ইনক্লুশন (rfi), রিমোট কোড এক্সিকিউশন (rce) এবং আরও অনেক সাধারণ ওয়েব অ্যাপ্লিকেশন নিরাপত্তা ঝুঁকি থেকে সুরক্ষা প্রদান করে।

এই কোডল্যাবে আপনি শিখবেন কীভাবে গুগল ক্লাউড আর্মার WAF রুলস ব্যবহার করে কিছু সাধারণ দুর্বলতা প্রশমিত করা যায়।

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

  • একটি সার্ভিসকে সাপোর্ট করার জন্য কীভাবে একটি ইনস্ট্যান্স গ্রুপ এবং একটি গ্লোবাল লোড ব্যালেন্সার সেট আপ করবেন
  • LFI, RCE, স্ক্যানার, প্রোটোকল অ্যাটাক এবং সেশন ফিক্সেশন থেকে সুরক্ষা দিতে প্রি-কনফিগার করা WAF রুল ব্যবহার করে ক্লাউড আর্মার সিকিউরিটি পলিসি কীভাবে কনফিগার করবেন
  • লগ পর্যবেক্ষণ করে কীভাবে যাচাই করবেন যে ক্লাউড আর্মার কোনো আক্রমণ প্রতিহত করেছে।

আপনার যা যা লাগবে

  • গুগল কম্পিউট ইঞ্জিন ( কোডল্যাব ) সম্পর্কে প্রাথমিক জ্ঞান
  • নেটওয়ার্কিং এবং TCP/IP সম্পর্কে প্রাথমিক জ্ঞান
  • ইউনিক্স/লিনাক্স কমান্ড লাইনের প্রাথমিক জ্ঞান
  • "Networking in the Google Cloud" বইটির মাধ্যমে GCP-তে নেটওয়ার্কিং-এর একটি সংক্ষিপ্ত পরিচিতি সম্পন্ন করা সহায়ক।
  • (ঐচ্ছিক) SQL ইনজেকশন, IP-ভিত্তিক, এবং ভূ-ভিত্তিক নিয়ম ব্যবহার করে ওয়ার্কলোড সুরক্ষিত করতে শেখার জন্য Cloudnet20 Cloud Armor ল্যাবটি সম্পূর্ণ করুন।

কোডল্যাব টপোলজি এবং ব্যবহারের ক্ষেত্র

119e13312f3cec25.jpeg

চিত্র ১ - ক্লাউড আর্মার WAF নিয়ম কোডল্যাব টপোলজি

OWASP জুস শপ অ্যাপ্লিকেশনটি নিরাপত্তা প্রশিক্ষণ এবং সচেতনতার জন্য উপযোগী, কারণ এটিতে পরিকল্পিতভাবেই OWASP-এর শীর্ষ ১০টি নিরাপত্তা দুর্বলতার প্রত্যেকটির উদাহরণ রয়েছে। একজন আক্রমণকারী পরীক্ষার উদ্দেশ্যে এটিকে কাজে লাগাতে পারে। এই কোডল্যাবে, আমরা কিছু অ্যাপ্লিকেশন আক্রমণ প্রদর্শন করার জন্য এটি ব্যবহার করব এবং এরপর ক্লাউড আর্মার WAF রুলস দিয়ে অ্যাপ্লিকেশনটিকে সুরক্ষিত করব। অ্যাপ্লিকেশনটির সামনে একটি গুগল ক্লাউড লোড ব্যালেন্সার থাকবে, যার উপর ক্লাউড আর্মার নিরাপত্তা নীতি এবং নিয়মগুলো প্রয়োগ করা হবে। এটি পাবলিক ইন্টারনেটে পরিবেশিত হবে, ফলে প্রায় যেকোনো জায়গা থেকে এটি অ্যাক্সেসযোগ্য হবে এবং ক্লাউড আর্মার ও VPC ফায়ারওয়াল রুলস দ্বারা সুরক্ষিত থাকবে।

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

GCP কনসোল থেকে উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনে ক্লিক করুন:

bce75f34b2c53987.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

f6ef2b5f13479f3a.png

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

শুরু করার আগে

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেট আপ করা আছে।

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

এপিআই সক্ষম করুন

সমস্ত প্রয়োজনীয় পরিষেবা সক্রিয় করুন

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com 

৩. ভিপিসি নেটওয়ার্ক তৈরি করুন

একটি VPC নেটওয়ার্ক তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute networks create ca-lab-vpc --subnet-mode custom

আউটপুট

Created
NAME        SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
ca-lab-vpc  CUSTOM       REGIONAL

একটি সাবনেট তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute networks subnets create ca-lab-subnet \
        --network ca-lab-vpc --range 10.0.0.0/24 --region us-central1

আউটপুট

Created 
NAME           REGION       NETWORK       RANGE
ca-lab-subnet  us-central1  ca-lab-vpc    10.0.0.0/24

VPC ফায়ারওয়াল নিয়ম তৈরি করুন

VPC এবং সাবনেট তৈরি করার পর, এখন আপনাকে কয়েকটি ফায়ারওয়াল নিয়ম সেট আপ করতে হবে। প্রথম ফায়ারওয়াল নিয়মটি সমস্ত IP-কে টেস্ট অ্যাপ্লিকেশনের ওয়েবসাইটের এক্সটার্নাল IP-কে পোর্ট 3000-এ অ্যাক্সেস করার অনুমতি দিতে ব্যবহৃত হবে। দ্বিতীয় ফায়ারওয়াল নিয়মটি লোড ব্যালেন্সারগুলির সোর্স IP থেকে হেলথ-চেক করার অনুমতি দিতে ব্যবহৃত হবে।

ক্লাউড শেল থেকে

gcloud compute firewall-rules create allow-js-site --allow tcp:3000 --network ca-lab-vpc

আউটপুট

Creating firewall...done.
NAME           NETWORK     DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
allow-js-site  ca-lab-vpc  INGRESS    1000      tcp:3000        False

গুগল হেলথ-চেক রেঞ্জ থেকে হেলথ-চেক অনুমোদনের জন্য ফায়ারওয়াল নিয়ম তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute firewall-rules create allow-health-check \
    --network=ca-lab-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-healthcheck \
    --rules=tcp

আউটপুট

Creating firewall...done.
NAME                NETWORK     DIRECTION  PRIORITY  ALLOW  DENY  DISABLED
allow-health-check  ca-lab-vpc  INGRESS    1000      tcp          False

৪. পরীক্ষার অ্যাপ্লিকেশনটি সেট আপ করুন।

পরবর্তী ধাপ হলো টেস্ট অ্যাপ্লিকেশনটি তৈরি করা, এক্ষেত্রে OWASP Juice Shop ওয়েব সার্ভারটি।

কম্পিউট ইনস্ট্যান্স তৈরি করার সময়, সার্ভারে উপযুক্ত পরিষেবাগুলো নিশ্চিত করতে আমরা একটি কন্টেইনার ইমেজ ব্যবহার করছি। এই সার্ভারটি us-central1-c-তে ডেপ্লয় করা হবে এবং এতে একটি নেটওয়ার্ক ট্যাগ থাকবে যা হেলথ চেক করার সুযোগ দেবে।

OWASP জুস শপ অ্যাপ্লিকেশনটি তৈরি করুন

দুর্বল অ্যাপ্লিকেশন হিসেবে সুপরিচিত ওপেন সোর্স OWASP Juice Shop অ্যাপ্লিকেশনটি ব্যবহার করুন। এছাড়াও, আপনি তাদের ওয়েবসাইটের মাধ্যমে OWASP নিরাপত্তা চ্যালেঞ্জগুলো করার জন্য এই অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন।

ক্লাউড শেল থেকে

gcloud compute instances create-with-container owasp-juice-shop-app --container-image bkimminich/juice-shop \
     --network ca-lab-vpc \
     --subnet ca-lab-subnet \
     --private-network-ip=10.0.0.3 \
     --machine-type n1-standard-2 \
     --zone us-central1-c \
     --tags allow-healthcheck

আউটপুট

NAME                  ZONE           MACHINE_TYPE   PREEMPTIBLE  
owasp-juice-shop-app  us-central1-c  n1-standard-2               

INTERNAL_IP  EXTERNAL_IP     STATUS
10.0.0.3     <public IP>     RUNNING

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: ইনস্ট্যান্স গ্রুপ

অব্যবস্থাপিত ইনস্ট্যান্স গ্রুপটি তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute instance-groups unmanaged create juice-shop-group \
    --zone=us-central1-c

আউটপুট

NAME              LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
juice-shop-group  us-central1-c  zone                     0

Juice Shop GCE ইনস্ট্যান্সটিকে আনম্যানেজড ইনস্ট্যান্স গ্রুপে যুক্ত করুন।

ক্লাউড শেল থেকে

gcloud compute instance-groups unmanaged add-instances juice-shop-group \
    --zone=us-central1-c \
    --instances=owasp-juice-shop-app

আউটপুট

Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].

নামযুক্ত পোর্টটি জুস শপ অ্যাপ্লিকেশনের পোর্টে সেট করুন।

ক্লাউড শেল থেকে

gcloud compute instance-groups unmanaged set-named-ports \
juice-shop-group \
   --named-ports=http:3000 \
   --zone=us-central1-c

আউটপুট

Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].

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

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: স্বাস্থ্য পরীক্ষা

জুস শপ সার্ভিস পোর্টের জন্য হেলথ-চেক তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute health-checks create tcp tcp-port-3000 \
        --port 3000

আউটপুট

Created 
NAME           PROTOCOL
tcp-port-3000  TCP

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: ব্যাকএন্ড পরিষেবা

ব্যাকএন্ড পরিষেবা প্যারামিটারগুলো তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute backend-services create juice-shop-backend \
        --protocol HTTP \
        --port-name http \
        --health-checks tcp-port-3000 \
        --enable-logging \
        --global 

আউটপুট

NAME                BACKENDS  PROTOCOL
juice-shop-backend            HTTP

ব্যাকএন্ড সার্ভিসে জুস শপ ইনস্ট্যান্স গ্রুপটি যুক্ত করুন।

ক্লাউড শেল থেকে

 gcloud compute backend-services add-backend juice-shop-backend \
        --instance-group=juice-shop-group \
        --instance-group-zone=us-central1-c \
        --global

আউটপুট

Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: ইউআরএল ম্যাপ

ব্যাকএন্ডে পাঠানোর জন্য ইউআরএল ম্যাপটি তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute url-maps create juice-shop-loadbalancer \
        --default-service juice-shop-backend

আউটপুট

NAME                     DEFAULT_SERVICE
juice-shop-loadbalancer  backendServices/juice-shop-backend

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: টার্গেট প্রক্সি

ইউআরএল ম্যাপের সামনে টার্গেট প্রক্সি তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute target-http-proxies create juice-shop-proxy \
        --url-map juice-shop-loadbalancer

আউটপুট

NAME              URL_MAP
juice-shop-proxy  juice-shop-loadbalancer

ক্লাউড লোড ব্যালেন্সার কম্পোনেন্ট সেট আপ করুন: ফরওয়ার্ডিং নিয়ম

লোড ব্যালান্সারের জন্য ফরওয়ার্ডিং নিয়মটি তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute forwarding-rules create juice-shop-rule \
        --global \
        --target-http-proxy=juice-shop-proxy \
        --ports=80

আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].

জুস শপ পরিষেবাটি অনলাইন আছে কিনা যাচাই করুন।

ক্লাউড শেল থেকে

PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule  --global --format="value(IPAddress)")"

ক্লাউড শেল থেকে

echo $PUBLIC_SVC_IP

আউটপুট

<public VIP of service>

এগিয়ে যাওয়ার আগে কয়েক মিনিট অপেক্ষা করুন, অন্যথায় আপনি একটি HTTP/1.1 404 Not Found প্রতিক্রিয়া পেতে পারেন।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP

আউটপুট

HTTP/1.1 200 OK
<...>

জুস শপটি দেখার জন্য আপনি ব্রাউজারেও যেতে পারেন!

428c18eee6708c28.png

আমরা এখন জুস শপের দুর্বলতাগুলো এবং ক্লাউড আর্মার WAF রুল সেট ব্যবহার করে কীভাবে সেগুলোর বিরুদ্ধে সুরক্ষা দেওয়া যায়, তা খতিয়ে দেখতে প্রস্তুত।

৫. জ্ঞাত দুর্বলতাগুলো প্রদর্শন করুন

সময় বাঁচানোর স্বার্থে, আমরা ক্লাউড আর্মার WAF নিয়মগুলো প্রচার করার আগের ও পরের অবস্থাগুলো সংক্ষিপ্ত ধাপে প্রদর্শন করব।

একটি LFI দুর্বলতা পর্যবেক্ষণ করুন: পাথ ট্র্যাভার্সাল

লোকাল ফাইল ইনক্লুশন হলো অনুরোধে ইনপুট যাচাইকরণের অভাবকে কাজে লাগিয়ে সার্ভারে উপস্থিত ফাইলগুলো পর্যবেক্ষণ করার একটি প্রক্রিয়া, যার মাধ্যমে সংবেদনশীল তথ্য ফাঁস হওয়ার সম্ভাবনা থাকে। নিচে কেবল দেখানো হলো কীভাবে একটি পাথ ট্র্যাভার্সাল সম্ভব। আপনার ব্রাউজারে বা কার্ল (curl) ব্যবহার করে, অ্যাপ্লিকেশন দ্বারা পরিবেশিত একটি বিদ্যমান পাথ পর্যবেক্ষণ করুন।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/ftp

আউটপুট

HTTP/1.1 200 OK
<...>

এবং আরও লক্ষ্য করুন যে, পথ অতিক্রমণও কাজ করে:

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/ftp/../

আউটপুট

HTTP/1.1 200 OK
<...>

একটি RCE দুর্বলতা পর্যবেক্ষণ করুন

রিমোট কোড এক্সিকিউশনের মধ্যে বিভিন্ন UNIX এবং Windows কমান্ড ইনজেকশন পরিস্থিতি অন্তর্ভুক্ত রয়েছে, যা আক্রমণকারীদেরকে এমন সব OS কমান্ড কার্যকর করার সুযোগ দেয় যা সাধারণত বিশেষাধিকারপ্রাপ্ত ব্যবহারকারীদের জন্য সীমাবদ্ধ থাকে। নিচে একটি সাধারণ ls কমান্ডের কার্যকরীকরণ দেখানো হলো।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls

আউটপুট

HTTP/1.1 200 OK
<...>

সম্পূর্ণ আউটপুট দেখার জন্য আপনি কার্ল ফ্ল্যাগগুলো সরিয়ে দিতে পারেন।

একটি সুপরিচিত স্ক্যানারের অ্যাক্সেস পর্যবেক্ষণ করুন।

বাণিজ্যিক এবং ওপেন সোর্স উভয় ধরনের স্ক্যান অ্যাপ্লিকেশনই বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়, যার মধ্যে দুর্বলতা খোঁজা অন্যতম। এই টুলগুলো সুপরিচিত ইউজার-এজেন্ট এবং অন্যান্য হেডার ব্যবহার করে। লক্ষ্য করুন, `curl` একটি সুপরিচিত ইউজার-এজেন্ট হেডারের সাথে কাজ করে:

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"

আউটপুট

HTTP/1.1 200 OK
<...>

একটি প্রোটোকল আক্রমণ পর্যবেক্ষণ করুন: HTTP স্প্লিটিং

কিছু ওয়েব অ্যাপ্লিকেশন রেসপন্সের হেডার তৈরি করার জন্য ব্যবহারকারীর ইনপুট ব্যবহার করে। যদি অ্যাপ্লিকেশনটি ইনপুটটি সঠিকভাবে ফিল্টার না করে, তবে একজন আক্রমণকারী ইনপুট প্যারামিটারটিকে %0d%0a সিকোয়েন্স (বিভিন্ন লাইন আলাদা করতে ব্যবহৃত CRLF সিকোয়েন্স) দিয়ে বিষাক্ত করে দিতে পারে। এরপর কোনো মধ্যবর্তী প্রক্সি সার্ভারের মতো যে কোনো পার্সিং টুল রেসপন্সটিকে দুটি ভিন্ন রেসপন্স হিসেবে ব্যাখ্যা করতে পারে, যার ফলে পরবর্তী রিকোয়েস্টগুলোতে ভুল কন্টেন্ট পরিবেশিত হতে পারে। ইনপুট প্যারামিটারে %0d%0a সিকোয়েন্সটি যুক্ত করলে একটি বিভ্রান্তিকর পেজ পরিবেশিত হতে পারে।

ক্লাউড শেল থেকে

curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"

আউটপুট

HTTP/1.1 200 OK
<...>

সেশন ফিক্সেশন পর্যবেক্ষণ করুন

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP -H session_id=X

আউটপুট

HTTP/1.1 200 OK
<...>

৬. ক্লাউড আর্মার WAF নিয়মাবলী সংজ্ঞায়িত করুন

পূর্ব-কনফিগার করা WAF নিয়মগুলি তালিকাভুক্ত করুন:

ক্লাউড শেল থেকে

gcloud compute security-policies list-preconfigured-expression-sets

আউটপুট

EXPRESSION_SET
Sqli-canary
RULE_ID
    owasp-crs-v030001-id942110-sqli
    owasp-crs-v030001-id942120-sqli
<...>

ক্লাউড আর্মার নিরাপত্তা নীতি তৈরি করুন

ক্লাউড শেল থেকে:

gcloud compute security-policies create block-with-modsec-crs \
    --description "Block with OWASP ModSecurity CRS"

নিরাপত্তা নীতির ডিফল্ট নিয়ম আপডেট করুন

উল্লেখ্য যে, ডিফল্ট রুল প্রায়োরিটির সাংখ্যিক মান হলো 2147483647।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules update 2147483647 \
    --security-policy block-with-modsec-crs \
    --action "deny-403"

যেহেতু ডিফল্ট নিয়মটি ‘অ্যাকশন ডিনাই’ দিয়ে কনফিগার করা আছে, তাই আমাদের অবশ্যই আপনার আইপি থেকে অ্যাক্সেসের অনুমতি দিতে হবে। অনুগ্রহ করে আপনার পাবলিক আইপি খুঁজে বের করুন (curl, ipmonkey, whatismyip, ইত্যাদি)।

ক্লাউড শেল থেকে:

MY_IP=$(curl ifconfig.me)

আপনার আইপি থেকে অ্যাক্সেসের অনুমতি দিতে প্রথম নিয়মটি যোগ করুন (নিচে আপনার আইপি লিখুন)।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 10000 \
    --security-policy  block-with-modsec-crs  \
    --description "allow traffic from my IP" \
    --src-ip-ranges "$MY_IP/32" \
    --action "allow"

LFI আক্রমণ প্রতিরোধ করতে নিরাপত্তা নীতি আপডেট করুন।

OWASP ModSecurity কোর রুল সেটটি প্রয়োগ করুন যা লোকাল ফাইল ইনক্লুশনের জন্য পাথ ট্র্যাভার্সাল প্রতিরোধ করে।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 9000 \
    --security-policy block-with-modsec-crs  \
    --description "block local file inclusion" \
     --expression "evaluatePreconfiguredExpr('lfi-stable')" \
    --action deny-403

রিমোট কোড এক্সিকিউশন (rce) ব্লক করতে নিরাপত্তা নীতি আপডেট করুন।

OWASP ModSecurity Core Rule Set অনুযায়ী, rce (রিমোট কন্ট্রোলড এক্সামিনেশন) শনাক্তকারী নিয়মগুলো প্রয়োগ করুন, যার মধ্যে কমান্ড ইনজেকশনও অন্তর্ভুক্ত। সাধারণ OS কমান্ডগুলো শনাক্ত ও ব্লক করা হয়।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 9001 \
    --security-policy block-with-modsec-crs  \
    --description "block rce attacks" \
     --expression "evaluatePreconfiguredExpr('rce-stable')" \
    --action deny-403

নিরাপত্তা স্ক্যানার ব্লক করতে নিরাপত্তা নীতি আপডেট করুন

সুপরিচিত নিরাপত্তা স্ক্যানার, স্ক্রিপ্টিং HTTP ক্লায়েন্ট এবং ওয়েব ক্রলার ব্লক করতে OWASP ModSecurity কোর রুল সেট প্রয়োগ করুন।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 9002 \
    --security-policy block-with-modsec-crs  \
    --description "block scanners" \
     --expression "evaluatePreconfiguredExpr('scannerdetection-stable')" \
    --action deny-403

প্রোটোকল আক্রমণ প্রতিরোধ করতে নিরাপত্তা নীতি আপডেট করুন।

OWASP ModSecurity Core Rule Set অনুযায়ী, Carriage Return (CR) %0d ও Linefeed (LF) %0a ক্যারেক্টার এবং HTTP Request Smuggling-এর মতো অন্যান্য ধরনের প্রোটোকল অ্যাটাক শনাক্ত করার জন্য রুল প্রয়োগ করুন।

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 9003 \
    --security-policy block-with-modsec-crs  \
    --description "block protocol attacks" \
     --expression "evaluatePreconfiguredExpr('protocolattack-stable')" \
    --action deny-403

সেশন ফিক্সেশন ব্লক করতে নিরাপত্তা নীতি আপডেট করুন।

OWASP ModSecurity কোর রুল সেট অনুসারে, এমন নিয়মগুলো প্রয়োগ করুন যা...

ক্লাউড শেল থেকে:

gcloud compute security-policies rules create 9004 \
    --security-policy block-with-modsec-crs  \
    --description "block session fixation attacks" \
     --expression "evaluatePreconfiguredExpr('sessionfixation-stable')" \
    --action deny-403

ব্যাকএন্ড সার্ভিসে নিরাপত্তা নীতিটি সংযুক্ত করুন।

ক্লাউড শেল থেকে:

gcloud compute backend-services update juice-shop-backend \
    --security-policy block-with-modsec-crs \
    --global

নিয়মগুলো কার্যকর হতে কিছুটা সময় লাগতে পারে (তবে ১০ মিনিটের বেশি নয়)। পর্যাপ্ত সময় পার হয়েছে বলে নিশ্চিত হওয়ার পর, পরবর্তী ধাপে ক্লাউড আর্মার WAF নিয়মের প্রয়োগ নিশ্চিত করতে পূর্বে প্রদর্শিত দুর্বলতাগুলো পরীক্ষা করুন।

৭. OWASP ModSecurity Core Rule Set ব্যবহার করে ক্লাউড আর্মার সুরক্ষা পর্যবেক্ষণ করুন।

LFI দুর্বলতা প্রশমিত হয়েছে কিনা তা নিশ্চিত করুন।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/?a=../

আউটপুট

HTTP/1.1 403 Forbidden
<...>

RCE আক্রমণ প্রশমিত করা হয়েছে কিনা তা নিশ্চিত করুন।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls

আউটপুট

HTTP/1.1 403 Forbidden
<..>

সুপরিচিত স্ক্যানার সনাক্তকরণ নিশ্চিত করুন

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"

আউটপুট

HTTP/1.1 403 Forbidden
<..>

প্রোটোকল আক্রমণ প্রশমিত হয়েছে কিনা তা নিশ্চিত করুন।

OWASP ModSecurity Core Rule Set ver.3.0.2 অনুসারে, প্রোটোকল আক্রমণটি প্রশমিত করা হয়

ক্লাউড শেল থেকে

curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"

আউটপুট

HTTP/1.1 403 Forbidden
<..>

সেশন ফিক্সেশন প্রচেষ্টা অবরুদ্ধ করা হয়েছে তা নিশ্চিত করুন।

ক্লাউড শেল থেকে

curl -Ii http://$PUBLIC_SVC_IP/?session_id=a

আউটপুট

HTTP/1.1 403 Forbidden
<..>

৮. ক্লাউড আর্মার নিরাপত্তা নিয়মাবলী পর্যালোচনা করুন

এখন যেহেতু আমরা নিরাপত্তা নীতি তৈরি করে ফেলেছি, চলুন দেখে নেওয়া যাক ঠিক কী কী নিয়ম কনফিগার করা হয়েছে।

d00e4102fc89e44f.png

নিয়মগুলো অগ্রাধিকার অনুসারে মূল্যায়ন করা হয়: কম সংখ্যার নিয়মগুলো প্রথমে মূল্যায়ন করা হয় এবং একবার সক্রিয় হলে, উচ্চতর অগ্রাধিকার মানের নিয়মগুলোর জন্য প্রক্রিয়াকরণ আর অগ্রসর হয় না।

  • অগ্রাধিকার ৯০০০ - ব্লক এলএফআই (স্থানীয় ফাইল অন্তর্ভুক্তি)
  • অগ্রাধিকার ৯০০১ - আরসিই (রিমোট কোড এক্সিকিউশন/কমান্ড ইনজেকশন) ব্লক করা
  • অগ্রাধিকার ৯০০২ - ব্লক স্ক্যানার সনাক্ত করা হয়েছে
  • অগ্রাধিকার ৯০০৩ - HTTP স্প্লিটিং এবং HTTP স্মাগলিং-এর মতো প্রোটোকল আক্রমণ ব্লক করুন
  • অগ্রাধিকার ৯০০৪ - সেশন ফিক্সেশন অ্যাটাক ব্লক করুন
  • অগ্রাধিকার ১০০০০ - আপনার আইপি-কে ওয়েবসাইটে প্রবেশের অনুমতি দিন
  • ডিফল্ট অগ্রাধিকার - অস্বীকৃত।

লক্ষ্য করুন, "allow your IP" নিয়মটি সাইটে প্রবেশের অনুমতি দেওয়ার জন্য সর্বোচ্চ অগ্রাধিকার নম্বর দিয়ে কনফিগার করা হয়েছে, তবে এটি যেকোনো ধরনের আক্রমণ প্রতিরোধ করে।

৯. ক্লাউড আর্মার নিরাপত্তা নীতি লগ পর্যবেক্ষণ করুন

ক্লাউড আর্মার কনসোল পৃষ্ঠা থেকে, আপনি নিরাপত্তা নীতির বিবরণ দেখতে পারেন এবং ক্লাউড লগিং পৃষ্ঠায় যেতে Logs ট্যাবে ক্লিক করে View policy logs লিঙ্কে ক্লিক করতে পারেন। এটি স্বয়ংক্রিয়ভাবে আপনার কাঙ্ক্ষিত নিরাপত্তা নীতির উপর ভিত্তি করে ফিল্টার করবে, যেমন resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs) । ৪০৩ এরর রেসপন্স কোডগুলো লক্ষ্য করুন এবং লগের বিবরণ প্রসারিত করে এনফোর্সড নিরাপত্তা নীতির নাম, মিলে যাওয়া ফিল্ড ভ্যালু এবং আরও নিচে আগে থেকে কনফিগার করা এক্সপ্রেশন আইডি (বা সিগনেচার আইডি) দেখুন। নিম্নলিখিত স্ক্রিনশটগুলোতে এই কোডল্যাবে কনফিগার করা এনফোর্সড নিরাপত্তা নীতিগুলোর লগের উদাহরণ দেখানো হয়েছে।

এলএফআই লগ

983a6cab0cff940d.png

আরসিই লগ

988a3a571f9d9d45.png

স্ক্যানার সনাক্তকরণ লগ

7ed661863ba27555.png

প্রোটোকল আক্রমণ লগ

17ee3cbe0bd98939.png

সেশন ফিক্সেশন লগ

80d1ddfd0fe982e1.png

১০. ল্যাব পরিষ্কার করা

ল্যাবের কাজ শেষ হওয়ায় এখন উপকরণগুলো গুছিয়ে নিন।

ক্লাউড আর্মার নিরাপত্তা নীতি, লোড ব্যালেন্সার, ইনস্ট্যান্সসমূহ, ফায়ারওয়াল নিয়মসমূহ এবং ভিপিসি নেটওয়ার্ক মুছে ফেলার জন্য এই কমান্ডগুলো চালান।

ব্যাকএন্ড পরিষেবা থেকে ক্লাউড আর্মার নিরাপত্তা নীতিটি সরিয়ে ফেলুন

gcloud -q compute backend-services update juice-shop-backend --security-policy "" --global

ক্লাউড আর্মার নিরাপত্তা নীতি মুছে ফেলুন

নিরাপত্তা নীতি মুছে ফেললে এর সাথে যুক্ত নিয়মগুলোও স্বয়ংক্রিয়ভাবে মুছে যাবে।

gcloud -q compute security-policies delete block-with-modsec-crs

লোড ব্যালেন্সার রিসোর্সগুলি মুছে ফেলুন

যেসব লোড ব্যালেন্সার রিসোর্স মুছে ফেলা হবে, সেগুলোর মধ্যে রয়েছে ফরওয়ার্ডিং রুল, টার্গেট-এইচটিটিপি-প্রক্সি, ইউআরএল-ম্যাপ, ব্যাকএন্ড, হেলথ-চেক এবং ইনস্ট্যান্স গ্রুপ।

gcloud -q compute forwarding-rules delete juice-shop-rule --global

gcloud -q compute target-http-proxies delete juice-shop-proxy

gcloud -q compute url-maps delete juice-shop-loadbalancer

gcloud -q compute backend-services delete juice-shop-backend \
    --global

gcloud -q compute health-checks delete tcp-port-3000

gcloud -q compute instance-groups unmanaged delete juice-shop-group --zone=us-central1-c

ইনস্ট্যান্সটি মুছে ফেলুন

gcloud -q compute instances delete owasp-juice-shop-app --zone us-central1-c

ফায়ারওয়াল নিয়ম, সাবনেট এবং ভিপিসি মুছে ফেলুন

gcloud -q compute firewall-rules delete allow-health-check
gcloud -q compute firewall-rules delete allow-js-site
gcloud -q compute networks subnets delete ca-lab-subnet --region us-central1
gcloud -q compute networks delete ca-lab-vpc

১১. অভিনন্দন!

ক্লাউড আর্মার প্রি-কনফিগারড WAF রুলস কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য অভিনন্দন!

আমরা যা আলোচনা করেছি

  • কীভাবে একটি ইনস্ট্যান্স গ্রুপ এবং একটি গ্লোবাল ক্লাউড লোড ব্যালেন্সার সেট আপ করবেন
  • LFI, RCE, স্ক্যানার, প্রোটোকল অ্যাটাক এবং সেশন ফিক্সেশন থেকে সুরক্ষা দিতে প্রি-কনফিগার করা WAF রুল ব্যবহার করে ক্লাউড আর্মার সিকিউরিটি পলিসি কীভাবে কনফিগার করবেন
  • লগের মাধ্যমে কীভাবে যাচাই করবেন যে ক্লাউড আর্মার OWASP-এর শীর্ষ ১০টি আক্রমণের মধ্যে কয়েকটি প্রতিরোধ করতে পেরেছে

পরবর্তী পদক্ষেপ