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

1. परिचय

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

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

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

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

आपको इनके बारे में जानकारी मिलेगी

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

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

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

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

119e13312f3cec25.jpeg

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

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

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 कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

f6ef2b5f13479f3a.png

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

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 फ़ायरवॉल के नियम बनाना

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 की, स्वास्थ्य जांच की रेंज से, स्वास्थ्य की जांच करने की अनुमति देने के लिए, FW के नियम बनाएं.

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 लोड बैलेंसर कॉम्पोनेंट सेट अप करना: इंस्टेंस ग्रुप

मैनेज नहीं किया जा रहा इंस्टेंस ग्रुप बनाएं.

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

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

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 लोड बैलेंसर कॉम्पोनेंट को सेट अप करना: यूआरएल मैप

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

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

Clआउट लोड बैलेंसर कॉम्पोनेंट सेट अप करना: टारगेट प्रॉक्सी

यूआरएल मैप को फ़्रंट दिखाने के लिए टारगेट प्रॉक्सी बनाएं.

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

पुष्टि करें कि जूस शॉप की सेवा ऑनलाइन है

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>

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

Cloud Shell से

curl -Ii http://$PUBLIC_SVC_IP

आउटपुट

HTTP/1.1 200 OK
<...>

आप जूस शॉप देखने के लिए ब्राउज़र पर भी जा सकते हैं!

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 कमांड इंजेक्शन शामिल होते हैं. इनकी मदद से हमलावर, ओएस कमांड चला सकते हैं. ये निर्देश आम तौर पर, कुछ खास लोगों के लिए ही होते हैं. नीचे दिए गए उदाहरण में, एक सामान्य एलएस कमांड को एक्ज़ीक्यूट किया गया है.

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

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

किसी जाने-माने स्कैनर का ऐक्सेस देखें

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

Cloud Shell से

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

आउटपुट

HTTP/1.1 200 OK
<...>

प्रोटोकॉल अटैक पर नज़र रखना: एचटीटीपी को बांटना

कुछ वेब ऐप्लिकेशन, जवाबों में हेडर जनरेट करने के लिए, उपयोगकर्ता के इनपुट का इस्तेमाल करते हैं. अगर ऐप्लिकेशन इनपुट को ठीक से फ़िल्टर नहीं करता है, तो कोई हमलावर %0d%0a अनुक्रम (CRLF क्रम जिसका इस्तेमाल अलग-अलग लाइनों को अलग करने के लिए किया जाता है) वाले इनपुट पैरामीटर में ज़हर पैदा कर सकता है. इसके बाद, किसी भी रिस्पॉन्स को पार्स करने के दौरान, इस रिस्पॉन्स को दो रिस्पॉन्स माना जा सकता है. जैसे, इंटरमीडियरी प्रॉक्सी सर्वर, जो बाद के अनुरोधों में गलत कॉन्टेंट दिखा सकता है. इनपुट पैरामीटर में %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 का मुख्य नियम सेट लागू करें, जो लोकल फ़ाइल शामिल किए जाने के लिए पाथ ट्रेवर्सल को रोकता है.

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

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

OWASP ModSecurity के मुख्य नियम के सेट के मुताबिक, rce खोजने वाले नियम लागू करें, जिसमें कमांड इंजेक्शन भी शामिल है. सामान्य ओएस निर्देशों का पता लगाकर उन्हें ब्लॉक कर दिया जाता है.

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 कोर नियम सेट लागू करें.

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

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 के कोर नियम सेट के अनुसार, ऐसे नियम लागू करें जो...

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 के मुख्य नियम सेट की मदद से, 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 कोर नियम सेट 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 - LFI को ब्लॉक करें (स्थानीय फ़ाइल शामिल करें)
  • प्राथमिकता 9001 - RCE ब्लॉक करें (रिमोट कोड एक्ज़ीक्यूशन/कमांड इंजेक्शन)
  • प्राथमिकता 9002 - ब्लॉक स्कैनर का पता चला
  • प्राथमिकता 9003 - एचटीटीपी स्प्लिट करने और एचटीटीपी तस्करी जैसे प्रोटोकॉल हमलों को ब्लॉक करें
  • प्राथमिकता 9004 - सेशन ठीक करने के हमलों को ब्लॉक करें
  • प्राथमिकता 10000 - अपने आईपी को वेबसाइट ऐक्सेस करने की अनुमति देना
  • प्राथमिकता डिफ़ॉल्ट - अस्वीकार करें.

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

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

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

एलएफ़आई लॉग

983a6cab0cff940d.png

आरसीई लॉग

988a3a571f9d9d45.png

स्कैनर की पहचान करने वाला लॉग

7ed661863ba27555.png

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

17ee3cbe0bd98939.png

सेशन को ठीक करने के तरीके का लॉग

80d1ddfd0fe982e1.png

10. लैब क्लीनअप

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

क्लाउड आर्मर की सुरक्षा नीति, लोड बैलेंसर, इंस्टेंस, फ़ायरवॉल के नियमों, और VPC नेटवर्क को मिटाने के लिए, इन निर्देशों को चलाएं.

बैकएंड सेवा से 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

लोड बैलेंसर से जुड़े संसाधनों को मिटाना

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

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

फ़ायरवॉल के नियम, सबनेट, और VPC को मिटाना

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 नियमों के कोडलैब का कोडलैब पूरा करने के लिए बधाई!

इसमें हमने इन विषयों के बारे में बताया

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

अगले चरण