Cloud Armor از پیش پیکربندی شده WAF Rules Codelab

۱. مقدمه

سلام! به آزمایشگاه کدنویسی قوانین WAF از پیش پیکربندی شده Cloud Armor خوش آمدید!

گوگل کلود آرمور (Google Cloud Armor) راهکار امنیتی شبکه لبه سازمانی گوگل است که محافظت در برابر حملات DDOS، اجرای قوانین WAF و قابلیت مدیریت تطبیقی ​​را در مقیاس بزرگ ارائه می‌دهد.

Cloud Armor مجموعه قوانین از پیش پیکربندی شده WAF را برای کاهش آسیب‌پذیری‌های امنیتی برنامه‌های وب OWASP که جزو ۱۰ مورد برتر هستند، گسترش داده است. این مجموعه قوانین بر اساس مجموعه قوانین اصلی OWASP Modsecurity نسخه ۳.۰.۲ هستند تا در برابر برخی از رایج‌ترین خطرات امنیتی برنامه‌های وب از جمله شمول فایل محلی (lfi)، شمول فایل از راه دور (rfi)، اجرای کد از راه دور (rce) و بسیاری موارد دیگر محافظت کنند.

در این آزمایشگاه کد، یاد می‌گیرید که چگونه با استفاده از قوانین WAF گوگل کلود آرمور، برخی از آسیب‌پذیری‌های رایج را کاهش دهید.

آنچه یاد خواهید گرفت

  • نحوه راه‌اندازی یک گروه نمونه و یک متعادل‌کننده بار سراسری برای پشتیبانی از یک سرویس
  • نحوه پیکربندی سیاست‌های امنیتی Cloud Armor با قوانین WAF از پیش تنظیم‌شده برای محافظت در برابر حملات lfi، rce، اسکنرها، حملات پروتکل و تثبیت نشست
  • چگونه می‌توان با مشاهده‌ی لاگ‌ها، تأیید کرد که کلود آرمور حمله را کاهش داده است.

آنچه نیاز دارید

  • آشنایی اولیه با موتور محاسباتی گوگل ( codelab )
  • آشنایی اولیه با شبکه و TCP/IP
  • دانش پایه خط فرمان یونیکس/لینوکس
  • مفید است که یک دوره آموزشی شبکه‌سازی در GCP را با دوره Networking in the Google Cloud گذرانده باشید.
  • (اختیاری) آزمایشگاه Cloudnet20 Cloud Armor را برای یادگیری محافظت از بارهای کاری با تزریق SQL، قوانین مبتنی بر IP و مبتنی بر موقعیت جغرافیایی تکمیل کنید.

توپولوژی Codelab و مورد استفاده

۱۱۹e۱۳۳۱۲f۳cec۲۵.jpeg

شکل 1 - توپولوژی codelab قوانین WAF در Cloud Armor

برنامه OWASP Juice Shop برای آموزش و آگاهی‌بخشی امنیتی مفید است، زیرا شامل نمونه‌هایی از هر یک از 10 آسیب‌پذیری امنیتی برتر OWASP است - از نظر طراحی. یک مهاجم می‌تواند از آن برای اهداف آزمایشی سوءاستفاده کند. در این آزمایشگاه کد، ما از آن برای نشان دادن برخی از حملات به برنامه‌ها و به دنبال آن محافظت از برنامه با قوانین Cloud Armor WAF استفاده خواهیم کرد. این برنامه توسط یک Google Cloud Load Balancer ارائه می‌شود که سیاست‌ها و قوانین امنیتی Cloud Armor بر روی آن اعمال خواهد شد. این برنامه در اینترنت عمومی ارائه می‌شود، بنابراین تقریباً از هر جایی قابل دسترسی است و با استفاده از قوانین فایروال Cloud Armor و VPC محافظت می‌شود.

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب Gmail یا Google Workspace ندارید، باید یکی ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه‌های Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول GCP روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

bce75f34b2c53987.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

f6ef2b5f13479f3a.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه را می‌توان به سادگی با یک مرورگر انجام داد.

قبل از اینکه شروع کنی

داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است

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

فعال کردن APIها

فعال کردن تمام سرویس‌های لازم

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

۳. شبکه VPC را ایجاد کنید

ایجاد شبکه 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 خارجی وب‌سایت برنامه آزمایشی روی پورت ۳۰۰۰ استفاده می‌شود. قانون دوم فایروال برای اجازه دادن به بررسی سلامت از 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

قوانین FW را ایجاد کنید تا بررسی‌های سلامت از محدوده‌های بررسی سلامت گوگل امکان‌پذیر شود.

از پوسته ابری

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 Juice Shop را ایجاد کنید

از برنامه‌ی متن‌باز و شناخته‌شده‌ی 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].

پورت نامگذاری شده را روی پورت برنامه Juice Shop تنظیم کنید.

از پوسته ابری

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

حالا که گروه نمونه مدیریت نشده را ایجاد کردید، مرحله بعدی ایجاد بررسی سلامت، سرویس backend، نقشه URL، پروکسی هدف و قانون ارسال است.

راه‌اندازی کامپوننت متعادل‌کننده بار ابری: بررسی سلامت

بررسی سلامت پورت سرویس Juice Shop را ایجاد کنید.

از پوسته ابری

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

خروجی

Created 
NAME           PROTOCOL
tcp-port-3000  TCP

راه‌اندازی کامپوننت متعادل‌کننده بار ابری: سرویس backend

پارامترهای سرویس backend را ایجاد کنید.

از پوسته ابری

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 را به سرویس backend اضافه کنید.

از پوسته ابری

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

کامپوننت متعادل‌کننده بار Cl oud را تنظیم کنید: نقشه URL

نقشه URL را برای ارسال به backend ایجاد کنید.

از پوسته ابری

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

خروجی

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

کامپوننت متعادل‌کننده بار Cl oud را تنظیم کنید: target proxy

پروکسی هدف را برای قرار دادن در جلوی نقشه URL ایجاد کنید.

از پوسته ابری

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

تأیید کنید که سرویس Juice Shop آنلاین است

از پوسته ابری

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

اکنون آماده‌ایم تا آسیب‌پذیری‌های Juice Shop و نحوه محافظت در برابر آنها را با مجموعه قوانین Cloud Armor WAF بررسی کنیم.

۵. آسیب‌پذیری‌های شناخته‌شده را نشان دهید

برای صرفه‌جویی در زمان، حالت‌های قبل و بعد از انتشار قوانین WAF در Cloud Armor را در مراحل فشرده نشان خواهیم داد.

مشاهده یک آسیب‌پذیری 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

اجرای کد از راه دور شامل سناریوهای مختلف تزریق دستور در یونیکس و ویندوز است که به مهاجمان اجازه می‌دهد دستورات سیستم‌عامل را که معمولاً محدود به کاربران دارای امتیاز است، اجرا کنند. در ادامه، اجرای یک دستور ls ساده که ارسال شده است، نشان داده شده است.

از پوسته ابری

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

خروجی

HTTP/1.1 200 OK
<...>

برای مشاهده خروجی کامل، می‌توانید پرچم‌های curl را حذف کنید.

دسترسی یک اسکنر شناخته‌شده را زیر نظر بگیرید

هم برنامه‌های تجاری و هم برنامه‌های متن‌باز، برنامه‌های اسکن را برای اهداف مختلف، از جمله اسکن آسیب‌پذیری‌ها، انجام می‌دهند. این ابزارها از User-Agent و سایر Headersهای شناخته‌شده استفاده می‌کنند. توجه داشته باشید که curl با یک User-Agent Header شناخته‌شده کار می‌کند:

از پوسته ابری

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 مربوط به Cloud Armor را تعریف کنید

فهرست قوانین 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
<...>

ایجاد سیاست امنیتی Cloud Armor

از کلود شل:

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

به‌روزرسانی قانون پیش‌فرض سیاست امنیتی

توجه داشته باشید که اولویت پیش‌فرض قانون، مقدار عددی ۲۱۴۷۴۸۳۶۴۷ دارد.

از کلود شل:

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

از آنجایی که قانون پیش‌فرض با action deny پیکربندی شده است، باید اجازه دسترسی از طریق IP شما را بدهیم. لطفاً IP عمومی خود (curl، ipmonkey، whatismyip و غیره) را پیدا کنید.

از کلود شل:

MY_IP=$(curl ifconfig.me)

اولین قانون را برای اجازه دسترسی از IP خود اضافه کنید (IP خود را در زیر وارد کنید)

از کلود شل:

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، قوانینی را اعمال کنید که به دنبال rce باشند، از جمله تزریق دستور. دستورات معمول سیستم عامل شناسایی و مسدود می‌شوند.

از کلود شل:

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 را برای مسدود کردن اسکنرهای امنیتی شناخته شده، کلاینت‌های HTTP اسکریپت‌نویسی شده و خزنده‌های وب اعمال کنید.

از کلود شل:

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، قوانینی را اعمال کنید که به دنبال کاراکترهای 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

سیاست امنیتی را به سرویس backend متصل کنید

از کلود شل:

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

انتشار قوانین ممکن است مدتی طول بکشد (اما نه بیشتر از 10 دقیقه). پس از اطمینان از گذشت زمان کافی، آسیب‌پذیری‌هایی را که قبلاً نشان داده شده است، آزمایش کنید تا در مرحله بعدی، اجرای قوانین Cloud Armor WAF را تأیید کنید.

۷. محافظت Cloud Armor را با مجموعه قوانین اصلی OWASP ModSecurity رعایت کنید.

تأیید کنید که آسیب‌پذیری 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 نسخه ۳.۰.۲، حمله پروتکل به روش‌های زیر کاهش می‌یابد:

از پوسته ابری

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

۸. قوانین امنیتی Cloud Armor را مرور کنید

حالا که سیاست امنیتی را ایجاد کرده‌ایم، بیایید نگاهی به قوانین پیکربندی‌شده بیندازیم.

d00e4102f89e44f.png

قوانین بر اساس اولویت ارزیابی می‌شوند: اعداد پایین‌تر ابتدا ارزیابی می‌شوند و پس از اجرا، پردازش برای قوانینی با مقادیر اولویت بالاتر ادامه نمی‌یابد.

  • اولویت ۹۰۰۰ - مسدود کردن LFI (گنجاندن فایل محلی)
  • اولویت ۹۰۰۱ - مسدود کردن RCE (اجرای کد از راه دور/تزریق دستور)
  • اولویت ۹۰۰۲ - اسکنرهای بلوک شناسایی شدند
  • اولویت ۹۰۰۳ - حملات مسدودسازی پروتکل مانند تقسیم HTTP و قاچاق HTTP
  • اولویت ۹۰۰۴ - مسدود کردن حملات تثبیت نشست
  • اولویت ۱۰۰۰۰ - به IP خود اجازه دسترسی به وب‌سایت را بدهید
  • اولویت پیش‌فرض - رد کردن.

*توجه داشته باشید که قانون «اجازه دسترسی به IP شما» با بالاترین شماره اولویت پیکربندی شده است تا دسترسی به سایت را مجاز کند، اما هرگونه حمله‌ای را مسدود می‌کند.

۹. گزارش‌های مربوط به سیاست‌های امنیتی Cloud Armor را مشاهده کنید.

از صفحه کنسول Cloud Armor، می‌توانید جزئیات سیاست امنیتی را مشاهده کنید و روی تب Logs و سپس روی لینک View policy logs کلیک کنید تا به صفحه Cloud Logging هدایت شوید. این صفحه به طور خودکار بر اساس سیاست امنیتی مورد نظر، مثلاً resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs) فیلتر می‌شود. کدهای پاسخ خطای ۴۰۳ را مشاهده کنید و جزئیات گزارش را گسترش دهید تا نام سیاست امنیتی اعمال شده، مقدار فیلد منطبق و شناسه‌های عبارت از پیش پیکربندی شده (یا شناسه امضا) را مشاهده کنید. تصاویر زیر نمونه‌هایی از گزارش‌های مربوط به سیاست‌های امنیتی اعمال شده پیکربندی شده در این codelab را نشان می‌دهند.

گزارش LFI

۹۸۳a۶cab۰cff۹۴۰d.png

گزارش RCE

۹۸۸a3a571f9d9d45.png

گزارش تشخیص اسکنر

7ed661863ba27555.png

گزارش حمله پروتکل

17ee3cbe0bd98939.png

گزارش تثبیت جلسه

80d1ddfd0fe982e1.png

۱۰. پاکسازی آزمایشگاه

حالا که کار آزمایشگاه را تمام کرده‌اید، منابع را تمیز کنید.

این دستورات را اجرا کنید تا سیاست امنیتی Cloud Armor، متعادل‌کننده بار، نمونه‌ها، قوانین فایروال و شبکه VPC حذف شوند.

سیاست امنیتی Cloud Armor را از سرویس backend حذف کنید

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

سیاست امنیتی Cloud Armor را حذف کنید

حذف سیاست امنیتی، قوانین مرتبط با آن را نیز به طور خودکار حذف خواهد کرد.

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

منابع متعادل‌کننده بار را حذف کنید

این منابع متعادل‌کننده بار که باید حذف شوند شامل قانون ارسال، پروکسی‌های target-http، نقشه‌های آدرس اینترنتی، backend، بررسی‌های سلامت و گروه نمونه هستند.

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

۱۱. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کدنویسی قوانین WAF از پیش پیکربندی شده Cloud Armor را به پایان رساندید!

آنچه ما پوشش داده‌ایم

  • نحوه تنظیم یک گروه نمونه و یک متعادل کننده بار ابری سراسری
  • نحوه پیکربندی سیاست‌های امنیتی Cloud Armor با قوانین WAF از پیش تنظیم‌شده برای محافظت در برابر حملات lfi، rce، اسکنرها، حملات پروتکل و تثبیت نشست
  • چگونه می‌توان از طریق لاگ‌ها تأیید کرد که Cloud Armor برخی از 10 حمله برتر OWASP را کاهش داده است

مراحل بعدی