الدرس التطبيقي حول ترميز قواعد WAF في Cloud Armor

1. مقدمة

مرحبًا، مرحبًا بك في برنامج codelab لقواعد WAF المُعدّة مسبقًا في Cloud Armor.

‫Google Cloud Armor هو حلّ أمان شبكة متطوّر للمؤسسات يوفّر حماية من الهجمات الموزّعة لحجب الخدمة، وفرض قواعد جدار حماية تطبيقات الويب، وإمكانية إدارة تكيفية على نطاق واسع.

وسّعت Cloud Armor مجموعات قواعد جدار حماية تطبيقات الويب (WAF) المُعدّة مسبقًا للحدّ من الثغرات الأمنية في تطبيقات الويب التي تمثّل أهم 10 مخاطر أمنية وفقًا لمشروع OWASP. تستند مجموعات القواعد إلى الإصدار 3.0.2 من مجموعة قواعد OWASP Modsecurity الأساسية للحماية من بعض مخاطر أمان تطبيقات الويب الأكثر شيوعًا، بما في ذلك إدراج الملفات المحلية (lfi) وإدراج الملفات عن بُعد (rfi) وتنفيذ الرموز البرمجية عن بُعد (rce) وغير ذلك الكثير.

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية تخفيف الأثر لبعض الثغرات الأمنية الشائعة باستخدام قواعد "جدار الحماية لتطبيقات الويب" في Google Cloud Armor.

ما ستتعلمه

  • كيفية إعداد مجموعة أجهزة افتراضية وموازنة تحميل عالمية لدعم إحدى الخدمات
  • كيفية ضبط سياسات أمان Cloud Armor باستخدام قواعد جدار حماية تطبيقات الويب (WAF) المُعدّة مسبقًا للحماية من هجمات تضمين الملفات المحلية (LFI) وتنفيذ التعليمات البرمجية عن بُعد (RCE) وعمليات الفحص وهجمات البروتوكول وتثبيت الجلسات
  • كيفية التحقّق من أنّ Cloud Armor خفّف من حدّة هجوم من خلال مراقبة السجلات

المتطلبات

  • معرفة أساسية بخدمة Google Compute Engine ( codelab)
  • معرفة أساسية بالشبكات وبروتوكول TCP/IP
  • معرفة أساسية بسطر الأوامر في نظامَي Unix وLinux
  • من المفيد أن تكون قد أكملت جولة في الشبكات في Google Cloud Platform باستخدام الشبكات في Google Cloud.
  • (اختياري) أكمل مختبر Cloudnet20 Cloud Armor للتعرّف على كيفية حماية أحمال العمل باستخدام قواعد تستند إلى عناوين IP والموقع الجغرافي وهجمات SQL injection.

طوبولوجيا الدرس التطبيقي حول الترميز وحالة الاستخدام

119e13312f3cec25.jpeg

الشكل 1 - بنية تطبيق Cloud Armor WAF rules codelab

يُعدّ تطبيق OWASP Juice Shop مفيدًا في التدريب على الأمان والتوعية به، لأنّه يتضمّن أمثلة على كل الثغرات الأمنية المدرَجة في قائمة OWASP Top 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. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.

لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا تتحمّل رسومًا تتجاوز هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من وحدة تحكّم Google Cloud Platform، انقر على رمز 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

إنشاء شبكة 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 والشبكة الفرعية، عليك الآن إعداد بعض قواعد جدار الحماية. سيتم استخدام قاعدة جدار الحماية الأولى للسماح لجميع عناوين IP بالوصول إلى عنوان IP الخارجي لموقع الويب الخاص بالتطبيق التجريبي على المنفذ 3000. سيتم استخدام قاعدة جدار الحماية الثانية للسماح بالتحقّق من الصحة من عنوان IP المصدر لموازنات التحميل.

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

بعد إنشاء مجموعة الأجهزة الافتراضية غير المُدارة، تتمثّل الخطوة التالية في إنشاء التحقق من الصحة وخدمة الخلفية وخريطة عناوين URL ووكيل مستهدف وقاعدة إعادة توجيه.

إعداد مكوّن موازنة الحمل على السحابة الإلكترونية: التحقّق من الصحة

أنشئ عملية التحقّق من الصحة لمنفذ خدمة 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].

إعداد مكوّن موازنة الحمل في السحابة: ربط عناوين URL

أنشئ خريطة عناوين URL لإرسالها إلى الخلفية.

من 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: خادم وكيل مستهدف

أنشئ خادمًا وكيلاً مستهدفًا لعرض خريطة عناوين URL.

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

التأكّد من أنّ خدمة 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 وكيفية الحماية منها باستخدام مجموعات قواعد جدار حماية تطبيقات الويب (WAF) في Cloud Armor.

5- عرض الثغرات الأمنية المعروفة

بهدف توفير الوقت، سنوضّح الحالات قبل وبعد نشر قواعد Cloud Armor WAF في خطوات مختصرة.

مراقبة ثغرة أمنية في LFI: ثغرة path traversal

يشير مصطلح Local File Inclusion إلى عملية مراقبة الملفات المتوفرة على الخادم من خلال استغلال عدم التحقّق من صحة الإدخال في الطلب بهدف الكشف عن البيانات الحسّاسة. يوضّح المثال التالي ببساطة أنّه يمكن تنفيذ ثغرة path traversal. في المتصفّح أو باستخدام curl، راقِب مسارًا حاليًا يعرضه التطبيق.

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

يمكنك إزالة علامات curl للاطّلاع على الناتج الكامل.

مراقبة وصول برنامج فحص معروف

تتوفّر تطبيقات مسح ضوئي تجارية ومفتوحة المصدر لأغراض مختلفة، بما في ذلك البحث عن الثغرات الأمنية. تستخدم هذه الأدوات User-Agent معروفًا وعناوين أخرى. لاحظ أنّ curl يعمل مع عنوان وكيل مستخدم معروف:

من Cloud Shell

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

الناتج

HTTP/1.1 200 OK
<...>

مراقبة هجوم على البروتوكول: تقسيم HTTP

تستخدم بعض تطبيقات الويب الإدخالات من المستخدم لإنشاء العناوين في الردود. إذا لم يفلتر التطبيق الإدخال بشكل صحيح، يمكن للمهاجم أن يفسد مَعلمة الإدخال باستخدام التسلسل %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. تحديد قواعد WAF في Cloud Armor

أدرِج قواعد 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"

بما أنّ القاعدة التلقائية تم ضبطها على الإجراء "رفض"، يجب أن نسمح بالوصول من عنوان IP الخاص بك. يُرجى العثور على عنوان IP العام (curl أو ipmonkey أو whatismyip أو غير ذلك).

من Cloud Shell:

MY_IP=$(curl ifconfig.me)

أضِف القاعدة الأولى للسماح بالوصول من عنوان IP الخاص بك (أدرِج عنوان IP أدناه)

من 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 الأساسية التي تمنع ثغرة path traversal لتضمين الملفات المحلية

من 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)

وفقًا لمجموعة قواعد ModSecurity الأساسية من OWASP، طبِّق القواعد التي تبحث عن تنفيذ التعليمات البرمجية عن بُعد، بما في ذلك إدخال التعليمات البرمجية. يتم رصد أوامر نظام التشغيل النموذجية وحظرها.

من 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 الأساسية لحظر برامج فحص الأمان المعروفة وعملاء HTTP الذين يستخدمون البرامج النصية وبرامج الزحف على الويب.

من 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 الأساسية، طبِّق القواعد التي تبحث عن أحرف إرجاع السطر (CR) %0d وتغذية السطر (LF) %0a وأنواع أخرى من هجمات البروتوكولات، مثل HTTP Request Smuggling.

من 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. مراقبة حماية Cloud Armor باستخدام مجموعة قواعد OWASP ModSecurity الأساسية

التأكّد من الحدّ من ثغرة LFI

من 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 الأساسية الإصدار 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 - حظر هجمات البروتوكولات، مثل تقسيم HTTP وتهريب HTTP
  • الأولوية 9004 - حظر هجمات تثبيت الجلسة
  • الأولوية 10000 - السماح لعنوان IP الخاص بك بالوصول إلى الموقع الإلكتروني
  • الإعداد التلقائي للأولوية - الرفض

*لاحظ أنّ قاعدة "السماح لعنوان IP الخاص بك" تم ضبطها على رقم الأولوية الأعلى للسماح بالوصول إلى الموقع الإلكتروني، ولكنها تحظر أي هجوم.

9- مراقبة سجلّات سياسة الأمان في Cloud Armor

من صفحة Cloud Armor Console، يمكنك الاطّلاع على تفاصيل سياسة الأمان والنقر على علامة التبويب Logs ثم على الرابط View policy logs للانتقال إلى صفحة Cloud Logging. سيتم الفلترة تلقائيًا استنادًا إلى سياسة الأمان المعنيّة، مثل resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs). راقِب رموز الاستجابة 403 الخاصة بالخطأ، ووسِّع تفاصيل السجلّ لمراقبة اسم سياسة الأمان المفروضة وقيمة الحقل المطابِق، ثم انتقِل إلى أسفل معرّفات التعبيرات المُعدّة مسبقًا (أو معرّف التوقيع). تعرض لقطات الشاشة التالية أمثلة على السجلات الخاصة بسياسات الأمان المفروضة التي تم ضبطها في هذا الدرس العملي.

سجلّ LFI

983a6cab0cff940d.png

سجلّ RCE

988a3a571f9d9d45.png

سجلّ رصد الماسح الضوئي

7ed661863ba27555.png

سجلّ هجمات البروتوكول

17ee3cbe0bd98939.png

سجلّ تثبيت الجلسة

80d1ddfd0fe982e1.png

10. تنظيف المختبر

نظِّف الموارد الآن بعد الانتهاء من الدرس التطبيقي.

نفِّذ هذه الأوامر لحذف سياسة الأمان في Cloud Armor وموازن التحميل والأجهزة الافتراضية وقواعد جدار الحماية وشبكة 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 المستهدفين، وخرائط عناوين URL، والخلفية، وعمليات التحقّق من الصحة، ومجموعة المثيلات.

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. تهانينا!

تهانينا على إكمال برنامج codelab الخاص بقواعد WAF المُعدّة مسبقًا في Cloud Armor.

المواضيع التي تناولناها

  • كيفية إعداد مجموعة مثيلات وموازنة تحميل عالمية في Cloud
  • كيفية ضبط سياسات أمان Cloud Armor باستخدام قواعد جدار حماية تطبيقات الويب (WAF) المُعدّة مسبقًا للحماية من هجمات تضمين الملفات المحلية (LFI) وتنفيذ التعليمات البرمجية عن بُعد (RCE) وعمليات الفحص وهجمات البروتوكول وتثبيت الجلسات
  • كيفية التأكّد من أنّ Cloud Armor خفّف من بعض الهجمات العشر الأكثر شيوعًا من OWASP من خلال السجلّات

الخطوات التالية