Cloud Armor से, पहले से कॉन्फ़िगर किए गए WAF नियमों के लिए कोडलैब (कोड बनाना सीखना)

1. परिचय

नमस्कार! Cloud Armor के पहले से कॉन्फ़िगर किए गए WAF नियमों के कोडलैब में आपका स्वागत है!

Google Cloud Armor, Google का एंटरप्राइज़ एज नेटवर्क सुरक्षा समाधान है. यह डीडीओएस से सुरक्षा, WAF के नियमों को लागू करने, और बड़े पैमाने पर अडैप्टिव मैनेज करने की सुविधा देता है.

Cloud Armor ने पहले से कॉन्फ़िगर किए गए WAF नियम सेट को बढ़ा दिया है, ताकि OWASP Top 10 वेब ऐप्लिकेशन की सुरक्षा से जुड़ी कमियों को कम किया जा सके. नियमों के ये सेट, OWASP Modsecurity core rule set के वर्शन 3.0.2 पर आधारित हैं. इनका इस्तेमाल, वेब ऐप्लिकेशन की सुरक्षा से जुड़े कुछ सामान्य जोखिमों से बचाने के लिए किया जाता है. जैसे, लोकल फ़ाइल इन्क्लूज़न (एलएफ़आई), रिमोट फ़ाइल इन्क्लूज़न (आरएफ़आई), रिमोट कोड एक्ज़ीक्यूशन (आरसीई) वगैरह.

इस कोडलैब में, Google Cloud Armor WAF के नियमों का इस्तेमाल करके, कुछ सामान्य कमज़ोरियों को कम करने का तरीका बताया गया है.

आपको क्या सीखने को मिलेगा

  • किसी सेवा के लिए, इंस्टेंस ग्रुप और ग्लोबल लोड बैलेंसर को सेट अप करने का तरीका
  • एलएफ़आई, आरसीई, स्कैनर, प्रोटोकॉल अटैक, और सेशन फ़िक्सेशन से बचाने के लिए, पहले से कॉन्फ़िगर किए गए WAF नियमों के साथ Cloud Armor की सुरक्षा नीतियां कॉन्फ़िगर करने का तरीका
  • यह पुष्टि कैसे करें कि Cloud Armor ने लॉग देखकर किसी हमले को कम किया है.

आपको इन चीज़ों की ज़रूरत होगी

  • Google Compute Engine के बारे में बुनियादी जानकारी ( कोड लैब)
  • नेटवर्किंग और टीसीपी/आईपी की बुनियादी जानकारी
  • Unix/Linux कमांड लाइन की बुनियादी जानकारी
  • यह ज़रूरी है कि आपने Google Cloud में नेटवर्किंग के साथ GCP में नेटवर्किंग का टूर पूरा कर लिया हो
  • (वैकल्पिक) SQL इंजेक्शन, आईपी पते के आधार पर, और भौगोलिक जगह के आधार पर बनाए गए नियमों का इस्तेमाल करके वर्कलोड को सुरक्षित रखने के बारे में जानने के लिए, Cloudnet20 Cloud Armor लैब को पूरा करें.

कोडलैब टोपोलॉजी और इस्तेमाल के उदाहरण

119e13312f3cec25.jpeg

पहली इमेज - Cloud Armor WAF की नियमों से जुड़ी कोडलैब टोपोलॉजी

OWASP Juice Shop ऐप्लिकेशन, सुरक्षा से जुड़ी ट्रेनिंग और जागरूकता के लिए फ़ायदेमंद है. ऐसा इसलिए, क्योंकि इसमें OWASP Top 10 की सुरक्षा से जुड़ी हर कमज़ोरी के उदाहरण शामिल हैं. हमलावर इसका इस्तेमाल टेस्टिंग के लिए कर सकता है. इस कोडलैब में, हम इसका इस्तेमाल कुछ ऐप्लिकेशन पर होने वाले हमलों के बारे में बताने के लिए करेंगे. इसके बाद, Cloud Armor WAF के नियमों का इस्तेमाल करके ऐप्लिकेशन को सुरक्षित किया जाएगा. ऐप्लिकेशन को Google Cloud Load Balancer के ज़रिए फ़्रंट किया जाएगा. इस पर Cloud Armor की सुरक्षा नीति और नियम लागू होंगे. इसे सार्वजनिक इंटरनेट पर उपलब्ध कराया जाएगा. इसलिए, इसे लगभग कहीं से भी ऐक्सेस किया जा सकता है. साथ ही, इसे Cloud Armor और वीपीसी फ़ायरवॉल के नियमों का इस्तेमाल करके सुरक्षित किया जाएगा.

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. "सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें. इसमें बताया गया है कि संसाधनों को कैसे बंद किया जाए, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद Cloud Shell आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

f6ef2b5f13479f3a.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, यह Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस लैब में मौजूद सभी टास्क को सिर्फ़ ब्राउज़र की मदद से पूरा किया जा सकता है.

शुरू करने से पहले

Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो

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 

3. वीपीसी नेटवर्क बनाना

VPC नेटवर्क बनाना

Cloud Shell से

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

सबनेट बनाना

Cloud Shell से

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 और सबनेट बनाने के बाद, अब आपको फ़ायरवॉल के कुछ नियम सेट अप करने होंगे. पहले फ़ायरवॉल नियम का इस्तेमाल, सभी आईपी को पोर्ट 3000 पर टेस्ट ऐप्लिकेशन की वेबसाइट के बाहरी आईपी को ऐक्सेस करने की अनुमति देने के लिए किया जाएगा. दूसरे फ़ायरवॉल नियम का इस्तेमाल, लोड बैलेंसर के सोर्स आईपी से हेल्थ-चेक की अनुमति देने के लिए किया जाएगा.

Cloud Shell से

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

Google की हेल्थ-चेक रेंज से हेल्थ-चेक की अनुमति देने के लिए, फ़ायरवॉल के नियम बनाएं.

Cloud Shell से

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

4. टेस्ट ऐप्लिकेशन सेट अप करना

अगला चरण, टेस्ट ऐप्लिकेशन बनाना है. इस मामले में, OWASP Juice Shop वेब सर्वर.

कंप्यूट इंस्टेंस बनाते समय, हम कंटेनर इमेज का इस्तेमाल कर रहे हैं. इससे यह पक्का किया जा सकेगा कि सर्वर में ज़रूरी सेवाएं मौजूद हों. इस सर्वर को us-central1-c में डिप्लॉय किया जाएगा. इसमें एक नेटवर्क टैग होगा, जिससे हेल्थ चेक किए जा सकेंगे.

OWASP Juice Shop ऐप्लिकेशन बनाना

ओपन सोर्स OWASP Juice Shop ऐप्लिकेशन का इस्तेमाल करें. यह एक ऐसा ऐप्लिकेशन है जिसमें सुरक्षा से जुड़ी कमियां हैं. इस ऐप्लिकेशन का इस्तेमाल, OWASP की सुरक्षा से जुड़ी चुनौतियों को पूरा करने के लिए भी किया जा सकता है. इसके लिए, आपको उनकी वेबसाइट पर जाना होगा.

Cloud Shell से

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

Cloud Load Balancer कॉम्पोनेंट: इंस्टेंस ग्रुप सेट अप करना

अनमैनेज्ड इंस्टेंस ग्रुप बनाएं.

Cloud Shell से

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 इंस्टेंस को अनमैनेज्ड इंस्टेंस ग्रुप में जोड़ें.

Cloud Shell से

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].

नेम पोर्ट को Juice Shop ऐप्लिकेशन के पोर्ट पर सेट करें.

Cloud Shell से

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].

अनमैनेज्ड इंस्टेंस ग्रुप बनाने के बाद, अगला चरण हेल्थ चेक, बैकएंड सेवा, यूआरएल मैप, टारगेट प्रॉक्सी, और फ़ॉरवर्डिंग नियम बनाना है.

क्लाउड लोड बैलेंसर कॉम्पोनेंट सेट अप करना: हेल्थ चेक

Juice Shop सेवा के पोर्ट के लिए हेल्थ-चेक बनाएं.

Cloud Shell से

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

आउटपुट

Created 
NAME           PROTOCOL
tcp-port-3000  TCP

क्लाउड लोड बैलेंसर कॉम्पोनेंट: बैकएंड सेवा सेट अप करना

बैकएंड सेवा के पैरामीटर बनाएं.

Cloud Shell से

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

बैकएंड सेवा में Juice Shop इंस्टेंस ग्रुप जोड़ें.

Cloud Shell से

 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].

Cloud load balancer component: URL map सेट अप करना

बैकएंड को भेजने के लिए, यूआरएल मैप बनाएं.

Cloud Shell से

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

आउटपुट

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

Cloud load balancer कॉम्पोनेंट: टारगेट प्रॉक्सी सेट अप करना

यूआरएल मैप के सामने टारगेट प्रॉक्सी बनाएं.

Cloud Shell से

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

आउटपुट

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

Cloud Load Balancer कॉम्पोनेंट सेट अप करना: फ़ॉरवर्डिंग का नियम

लोड बैलेंसर के लिए फ़ॉरवर्ड करने का नियम बनाएं.

Cloud Shell से

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].

पुष्टि करें कि Juice Shop सेवा ऑनलाइन है

Cloud Shell से

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

Cloud Shell से

echo $PUBLIC_SVC_IP

आउटपुट

<public VIP of service>

आगे बढ़ने से पहले कुछ मिनट इंतज़ार करें. ऐसा न करने पर, आपको HTTP/1.1 404 Not Found रिस्पॉन्स मिल सकता है.

Cloud Shell से

curl -Ii http://$PUBLIC_SVC_IP

आउटपुट

HTTP/1.1 200 OK
<...>

Juice Shop देखने के लिए, ब्राउज़र पर भी जाया जा सकता है!

428c18eee6708c28.png

अब हम Juice Shop की कमियों और Cloud Armor WAF के नियम सेट की मदद से, उनसे बचने के तरीके के बारे में जानेंगे.

5. ज्ञात जोखिमों की संभावनाओं के बारे में जानकारी देना

समय बचाने के लिए, हम Cloud Armor WAF के नियमों को लागू करने से पहले और बाद की स्थितियों को कम शब्दों में दिखाएंगे.

एलएफ़आई की समस्या का पता लगाना: पाथ ट्रेवर्सल

लोकल फ़ाइल इन्क्लूज़न, सर्वर पर मौजूद फ़ाइलों को देखने की प्रोसेस है. इसमें अनुरोध में इनपुट की पुष्टि न होने का फ़ायदा उठाया जाता है, ताकि संवेदनशील डेटा को संभावित रूप से दिखाया जा सके. यहां सिर्फ़ यह दिखाया गया है कि पाथ ट्रैवर्सल किया जा सकता है. अपने ब्राउज़र में या कर्ल की मदद से, ऐप्लिकेशन से दिखाए जा रहे मौजूदा पाथ को देखें.

Cloud Shell से

curl -Ii http://$PUBLIC_SVC_IP/ftp

आउटपुट

HTTP/1.1 200 OK
<...>

यह भी देखें कि पाथ ट्रैवर्सल भी काम करता है:

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

आरसीई की गड़बड़ी का पता लगाना

रिमोट कोड एक्ज़ीक्यूशन में, UNIX और Windows कमांड इंजेक्शन के अलग-अलग तरीके शामिल होते हैं. इनकी मदद से हमलावर, ओएस कमांड को एक्ज़ीक्यूट कर सकते हैं. आम तौर पर, इन कमांड को सिर्फ़ खास अधिकार वाले उपयोगकर्ता ही एक्ज़ीक्यूट कर सकते हैं. यहां ls कमांड को पास करके, उसे एक्ज़ीक्यूट करने का एक आसान उदाहरण दिखाया गया है.

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

पूरा आउटपुट देखने के लिए, कर्ल फ़्लैग हटाए जा सकते हैं.

किसी जाने-माने स्कैनर के ऐक्सेस की निगरानी करना

अलग-अलग कामों के लिए, कमर्शियल और ओपन सोर्स, दोनों तरह के स्कैन ऐप्लिकेशन. इनमें कमियों का पता लगाने के लिए स्कैन करना भी शामिल है. ये टूल, जाने-माने User-Agent और अन्य हेडर का इस्तेमाल करते हैं. देखें कि curl, जाने-माने User-Agent हेडर के साथ काम करता है या नहीं:

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

प्रोटोकॉल पर होने वाले हमले के बारे में जानकारी: एचटीटीपी स्प्लिटिंग

कुछ वेब ऐप्लिकेशन, जवाबों में हेडर जनरेट करने के लिए उपयोगकर्ता से मिले इनपुट का इस्तेमाल करते हैं. अगर ऐप्लिकेशन, इनपुट को सही तरीके से फ़िल्टर नहीं करता है, तो हमलावर इनपुट पैरामीटर को %0d%0a (सीआरएलएफ़ सीक्वेंस, जिसका इस्तेमाल अलग-अलग लाइनों को अलग करने के लिए किया जाता है) से खराब कर सकता है. इसके बाद, जवाब को पार्स करने वाले किसी भी सिस्टम के लिए, इसे दो जवाब के तौर पर समझा जा सकता है. जैसे, इंटरमीडियरी प्रॉक्सी सर्वर. इससे बाद के अनुरोधों में गलत कॉन्टेंट दिखाया जा सकता है. इनपुट पैरामीटर में %0d%0a सीक्वेंस डालें. इससे गुमराह करने वाला पेज दिखाया जा सकता है.

Cloud Shell से

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
<...>

सेशन फ़िक्सेशन का पता लगाना

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

6. Cloud Armor WAF के नियम तय करना

पहले से कॉन्फ़िगर किए गए WAF नियमों की सूची बनाएं:

Cloud Shell से

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

आउटपुट

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

Cloud Armor की सुरक्षा नीति बनाना

Cloud Shell से:

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

सुरक्षा नीति के डिफ़ॉल्ट नियम को अपडेट करना

ध्यान दें कि नियम की डिफ़ॉल्ट प्राथमिकता की संख्यात्मक वैल्यू 2147483647 होती है

Cloud Shell से:

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

डिफ़ॉल्ट नियम में 'अनुमति नहीं है' कार्रवाई कॉन्फ़िगर की गई है. इसलिए, हमें आपके आईपी पते से ऐक्सेस करने की अनुमति देनी होगी. कृपया अपना सार्वजनिक आईपी पता (curl, ipmonkey, whatismyip वगैरह) ढूंढें.

Cloud Shell से:

MY_IP=$(curl ifconfig.me)

अपने आईपी पते (नीचे अपना आईपी पता डालें) से ऐक्सेस करने की अनुमति देने के लिए, पहला नियम जोड़ें

Cloud Shell से:

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"

एलएफ़आई हमलों को रोकने के लिए, सुरक्षा नीति को अपडेट करना

OWASP ModSecurity Core Rule Set लागू करें. इससे लोकल फ़ाइलें शामिल करने के लिए, पाथ ट्रैवर्सल को रोका जा सकता है.

Cloud Shell से:

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

सुरक्षा नीति को अपडेट करके, रिमोट कोड एक्ज़ीक्यूशन (आरसीई) को ब्लॉक करें

OWASP ModSecurity Core Rule Set के मुताबिक, ऐसे नियम लागू करें जो आरसीई का पता लगाते हैं. इनमें कमांड इंजेक्शन भी शामिल है. ओएस के सामान्य निर्देशों का पता लगाया जाता है और उन्हें ब्लॉक किया जाता है.

Cloud Shell से:

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

सुरक्षा स्कैनर को ब्लॉक करने के लिए, सुरक्षा नीति को अपडेट करना

OWASP ModSecurity Core Rule Set लागू करें, ताकि जाने-माने सुरक्षा स्कैनर, स्क्रिप्टिंग एचटीटीपी क्लाइंट, और वेब क्रॉलर को ब्लॉक किया जा सके.

Cloud Shell से:

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 के मुताबिक, ऐसे नियम लागू करें जो कैरिज रिटर्न (सीआर) %0d और लाइनफ़ीड (एलएफ़) %0a वर्णों और एचटीटीपी अनुरोध स्मगलिंग जैसे अन्य तरह के प्रोटोकॉल हमलों का पता लगाते हैं.

Cloud Shell से:

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 Core Rule Set के मुताबिक, ऐसे नियम लागू करें जो...

Cloud Shell से:

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

बैकएंड सेवा से सुरक्षा नीति अटैच करना

Cloud Shell से:

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

नियमों को लागू होने में कुछ समय लग सकता है. हालांकि, इसमें 10 मिनट से ज़्यादा समय नहीं लगता. जब आपको लगे कि काफ़ी समय बीत चुका है, तब उन कमज़ोरियों की जांच करें जिनके बारे में पहले बताया गया था. इससे यह पुष्टि की जा सकेगी कि अगले चरण में Cloud Armor WAF के नियम लागू किए गए हैं.

7. OWASP ModSecurity Core Rule Set की मदद से, Cloud Armor की सुरक्षा की निगरानी करना

पुष्टि करें कि एलएफ़आई की समस्या ठीक हो गई है

Cloud Shell से

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

आउटपुट

HTTP/1.1 403 Forbidden
<...>

पुष्टि करें कि आरसीई हमले को कम कर दिया गया है

Cloud Shell से

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

आउटपुट

HTTP/1.1 403 Forbidden
<..>

स्कैनर का पता लगाने की सुविधा के बारे में पुष्टि करना

Cloud Shell से

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

आउटपुट

HTTP/1.1 403 Forbidden
<..>

पुष्टि करें कि प्रोटोकॉल के हमले को कम कर दिया गया है

OWASP ModSecurity Core Rule Set ver.3.0.2 के मुताबिक, प्रोटोकॉल पर होने वाले हमले को इन तरीकों से कम किया जा सकता है

Cloud Shell से

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
<..>

पुष्टि करें कि सेशन फ़िक्सेशन के अनुरोध ब्लॉक किए गए हैं

Cloud Shell से

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

आउटपुट

HTTP/1.1 403 Forbidden
<..>

8. Cloud Armor के सुरक्षा नियमों की समीक्षा करना

सुरक्षा नीति बनाने के बाद, आइए अब देखते हैं कि कौनसे नियम कॉन्फ़िगर किए गए हैं.

d00e4102fc89e44f.png

नियमों का आकलन प्राथमिकता के हिसाब से किया जाता है: कम संख्या वाले नियमों का आकलन पहले किया जाता है. नियम लागू होने के बाद, ज़्यादा प्राथमिकता वाले नियमों को प्रोसेस नहीं किया जाता.

  • प्राथमिकता 9000 - एलएफ़आई (लोकल फ़ाइल इन्क्लूज़न) को ब्लॉक करें
  • प्राथमिकता 9001 - आरसीई (रिमोट कोड एक्ज़ीक्यूशन/कमांड इंजेक्शन) को ब्लॉक करें
  • प्राथमिकता 9002 - स्कैनर का पता चला
  • प्राथमिकता 9003 - एचटीटीपी स्प्लिटिंग और एचटीटीपी स्मगलिंग जैसे प्रोटोकॉल हमलों को ब्लॉक करना
  • प्राथमिकता 9004 - ब्लॉक सेशन फ़िक्सेशन अटैक
  • प्राथमिकता 10000 - अपने आईपी पते को वेबसाइट ऐक्सेस करने की अनुमति दें
  • डिफ़ॉल्ट प्राथमिकता - अनुमति नहीं है.

*ध्यान दें कि "अपने आईपी पते को अनुमति दें" नियम को सबसे ज़्यादा प्राथमिकता वाले नंबर के साथ कॉन्फ़िगर किया गया है, ताकि साइट को ऐक्सेस करने की अनुमति दी जा सके. हालांकि, यह किसी भी हमले को ब्लॉक कर देता है.

9. Cloud Armor की सुरक्षा नीति के लॉग देखना

Cloud Armor Console पेज पर, सुरक्षा नीति की जानकारी देखी जा सकती है. साथ ही, Cloud Logging पेज पर जाने के लिए, Logs टैब और फिर View policy logs लिंक पर क्लिक किया जा सकता है. यह आपकी दिलचस्पी वाली सुरक्षा नीति के आधार पर अपने-आप फ़िल्टर हो जाएगा. जैसे, resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs). 403 गड़बड़ी के रिस्पॉन्स कोड देखें. साथ ही, लागू की गई सुरक्षा नीति का नाम, मैच की गई फ़ील्ड वैल्यू, और पहले से कॉन्फ़िगर किए गए एक्सप्रेशन आईडी (या हस्ताक्षर आईडी) देखने के लिए, लॉग की जानकारी को बड़ा करें. यहां दिए गए स्क्रीनशॉट में, इस कोडलैब में लागू की गई सुरक्षा नीतियों के लॉग के उदाहरण दिखाए गए हैं.

LFI लॉग

983a6cab0cff940d.png

आरसीई लॉग

988a3a571f9d9d45.png

स्कैनर का पता लगाने से जुड़ा लॉग

7ed661863ba27555.png

प्रोटोकॉल पर हुए हमले का लॉग

17ee3cbe0bd98939.png

सेशन फ़िक्सेशन लॉग

80d1ddfd0fe982e1.png

10. Lab Cleanup

लैब पूरा करने के बाद, अब संसाधनों को हटा दें.

Cloud Armor की सुरक्षा नीति, लोड बैलेंसर, इंस्टेंस, फ़ायरवॉल के नियम, और वीपीसी नेटवर्क को मिटाने के लिए, इन कमांड को चलाएं.

बैकएंड सेवा से Cloud Armor की सुरक्षा नीति हटाना

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

Cloud Armor की सुरक्षा नीति मिटाना

सुरक्षा नीति को मिटाने पर, इससे जुड़े नियम अपने-आप मिट जाएंगे.

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

11. बधाई हो!

Cloud Armor के पहले से कॉन्फ़िगर किए गए WAF नियमों से जुड़े कोडलैब को पूरा करने पर बधाई!

हमने क्या-क्या बताया

  • इंस्टेंस ग्रुप और ग्लोबल क्लाउड लोड बैलेंसर को सेट अप करने का तरीका
  • एलएफ़आई, आरसीई, स्कैनर, प्रोटोकॉल अटैक, और सेशन फ़िक्सेशन से बचाने के लिए, पहले से कॉन्फ़िगर किए गए WAF नियमों के साथ Cloud Armor की सुरक्षा नीतियां कॉन्फ़िगर करने का तरीका
  • यह पुष्टि कैसे करें कि Cloud Armor ने लॉग के ज़रिए, OWASP के टॉप 10 हमलों में से कुछ को कम कर दिया है

अगले चरण