Menyesuaikan aturan WAF yang telah dikonfigurasi sebelumnya untuk Google Cloud Armor

Google Cloud Armor menyediakan aturan WAF yang telah dikonfigurasi sebelumnya, yang masing-masing terdiri dari beberapa tanda tangan yang bersumber dari ModSecurity Core Rule Set (CRS). Setiap tanda tangan berkaitan dengan aturan deteksi serangan dalam kumpulan aturan. Permintaan yang masuk dievaluasi berdasarkan aturan WAF yang telah dikonfigurasi sebelumnya. Permintaan cocok dengan aturan WAF yang telah dikonfigurasi sebelumnya jika permintaan tersebut cocok dengan salah satu tanda tangan yang terkait dengan aturan WAF yang telah dikonfigurasi sebelumnya. Pencocokan dilakukan saat ekspresi evaluatePreconfiguredWaf() atau evaluatePreconfiguredExpr() menampilkan nilai true.

Pilih tingkat sensitivitas

Setiap tanda tangan memiliki tingkat sensitivitas yang sesuai dengan tingkat paranoia ModSecurity. Anda dapat memilih sensitivitas antara 0 dan 4, meskipun tingkat sensitivitas 0 berarti tidak ada aturan yang diaktifkan secara default.

Tingkat sensitivitas yang lebih rendah menunjukkan tanda tangan keyakinan yang lebih tinggi, yang kecil kemungkinannya untuk menghasilkan positif palsu. Level sensitivitas yang lebih tinggi akan meningkatkan keamanan, tetapi juga meningkatkan risiko menghasilkan positif palsu. Saat memilih level sensitivitas untuk aturan WAF, Anda memilih untuk menggunakan tanda tangan pada tingkat sensitivitas yang kurang dari atau sama dengan level sensitivitas yang dipilih. Pada contoh berikut, Anda menyesuaikan aturan WAF yang telah dikonfigurasi sebelumnya dengan memilih tingkat sensitivitas 1:

evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 1})

Menonaktifkan tanda tangan aturan

Jika Anda memutuskan bahwa aturan WAF yang telah dikonfigurasi sebelumnya cocok dengan lebih banyak permintaan daripada yang diperlukan, atau jika aturan memblokir traffic yang perlu diizinkan, aturan dapat disesuaikan untuk menonaktifkan tanda tangan yang memiliki derau atau tanda tangan yang tidak perlu. Untuk menonaktifkan tanda tangan dalam aturan WAF tertentu yang telah dikonfigurasi, Anda memberikan daftar ID tanda tangan yang tidak diinginkan ke ekspresi evaluatePreconfiguredWaf().

Contoh berikut mengecualikan dua ID aturan CRS dari aturan WAF sqli-v33-stable (CRS 3.3) yang telah dikonfigurasi sebelumnya:

evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 4, 'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']})

Jika tidak memilih ID tanda tangan dari kumpulan aturan CRS yang telah dikonfigurasi sebelumnya, Anda harus mencocokkan versi ID tanda tangan dengan versi kumpulan aturan (CRS 3.0 atau 3.3) untuk menghindari error konfigurasi.

Anda juga dapat menonaktifkan ID tanda tangan menggunakan ekspresi lama evaluatePreconfigureExpr(). Untuk mengetahui informasi selengkapnya tentang ekspresi aturan WAF yang telah dikonfigurasi sebelumnya, lihat referensi bahasa aturan kustom.

Menyertakan tanda tangan aturan

Daripada menonaktifkan tanda tangan aturan, Anda dapat memilih untuk menggunakan tanda tangan aturan di tingkat sensitivitas yang telah dinonaktifkan. Sebaiknya Anda ikut serta menggunakan tanda tangan aturan jika jumlah tanda tangan yang ingin digunakan di tingkat sensitivitas tertentu lebih sedikit daripada aturan yang tidak ingin Anda ikut sertakan. Untuk mengikutsertakan tanda tangan aturan, level sensitivitasnya harus 0. Contoh berikut mengecualikan semua tanda tangan cve-canary di semua tingkat sensitivitas, lalu secara eksplisit memilih owasp-crs-v030001-id044228-cve dan owasp-crs-v030001-id144228-cve:

evaluatePreconfiguredWaf('cve-canary', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030001-id044228-cve', 'owasp-crs-v030001-id144228-cve']})

Mengecualikan kolom permintaan dari pemeriksaan

Aplikasi kustom Anda mungkin berisi konten dalam kolom permintaan (seperti header, cookie, parameter kueri, atau URI) yang cocok dengan tanda tangan dalam aturan WAF yang telah dikonfigurasi sebelumnya, tetapi Anda yakin hal ini sah. Dalam hal ini, Anda dapat mengurangi positif palsu (PP) dengan mengecualikan kolom permintaan tersebut dari pemeriksaan dengan mengaitkan daftar pengecualian untuk kolom permintaan dengan aturan kebijakan keamanan.

Saat mengonfigurasi pengecualian kolom permintaan, Anda harus mengaitkannya dengan target, yang dapat berupa seluruh aturan WAF yang telah dikonfigurasi sebelumnya, atau daftar tanda tangan berdasarkan aturan WAF yang telah dikonfigurasi sebelumnya. Anda dapat menentukan pencocokan persis atau pencocokan sebagian menggunakan operator kolom dan nilai kolom. Operator kolom yang tersedia adalah sebagai berikut:

  • EQUALS: Operator akan cocok jika nilai kolom sama dengan nilai yang ditentukan.
  • STARTS_WITH: Operator cocok jika nilai kolom diawali dengan nilai yang ditentukan.
  • ENDS_WITH: Operator cocok jika nilai kolom diakhiri dengan nilai yang ditentukan.
  • CONTAINS: Operator cocok jika nilai kolom berisi nilai yang ditentukan.
  • EQUALS_ANY: Operator cocok jika nilai kolom adalah nilai apa pun.

Bagian berikut memberikan informasi selengkapnya tentang kolom permintaan yang dapat Anda kecualikan dari pemeriksaan, diikuti dengan contoh-contohnya.

Header permintaan

Daftar nama header permintaan yang nilainya dikecualikan dari pemeriksaan selama evaluasi aturan WAF yang telah dikonfigurasi sebelumnya.

Pengecualian hanya berlaku untuk tanda tangan dalam target yang awalnya akan memeriksa nilai header permintaan. Hal ini mencakup tanda tangan yang terkait dengan flag permintaan berikut dalam Kumpulan Aturan Inti ModSecurity:

  • REQUEST_HEADERS

Hanya nilai header permintaan yang ditentukan yang dikecualikan dari pemeriksaan. Nama tersebut masih diperiksa.

Minta cookie

Daftar nama cookie permintaan yang nilainya dikecualikan dari pemeriksaan selama evaluasi aturan WAF yang telah dikonfigurasi sebelumnya.

Pengecualian hanya berlaku untuk tanda tangan dalam target yang pada awalnya akan memeriksa nilai cookie permintaan. Ini termasuk tanda tangan yang terkait dengan flag permintaan berikut dalam Kumpulan Aturan Inti ModSecurity:

  • REQUEST_COOKIES

Hanya nilai cookie permintaan yang ditentukan yang dikecualikan dari pemeriksaan. Nama tersebut masih diperiksa.

Parameter kueri permintaan

Daftar nama parameter kueri permintaan yang nilainya dikecualikan dari pemeriksaan selama evaluasi aturan WAF yang telah dikonfigurasi sebelumnya.

Pengecualian hanya berlaku untuk tanda tangan dalam target yang awalnya akan memeriksa parameter permintaan. Hal ini mencakup tanda tangan yang terkait dengan flag permintaan berikut dalam Kumpulan Aturan Inti ModSecurity:

  • ARG
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

Hanya nilai parameter kueri yang ditentukan yang dikecualikan dari pemeriksaan, yang dapat berada dalam string kueri atau isi POST. Nama masih diperiksa.

Karena parameter kueri merupakan bagian dari URI dan baris permintaan, kolom ini disusun ulang untuk diperiksa setelah mengecualikan parameter kueri yang ditentukan. Namun, untuk tanda tangan yang memeriksa seluruh isi permintaan (seperti tanda tangan yang terkait dengan flag permintaan REQUEST_BODY), pengecualian untuk parameter kueri tidak diterapkan.

Misalnya, jika mengecualikan parameter kueri bernama "args", Anda mungkin masih melihat kecocokan pada tanda tangan yang memeriksa seluruh isi permintaan jika permintaan memiliki parameter "args" dalam isi POST dan nilai "args" cocok.

URI Permintaan

Daftar URI dari baris permintaan yang mengecualikan data string kueri yang akan dikecualikan dari pemeriksaan selama evaluasi aturan WAF yang telah dikonfigurasi sebelumnya.

Pengecualian hanya berlaku untuk tanda tangan dalam target yang awalnya akan memeriksa URI permintaan. Hal ini mencakup tanda tangan yang terkait dengan tanda permintaan berikut dalam Kumpulan Aturan Inti ModSecurity:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Jika mengecualikan kolom sebelumnya, kolom tersebut akan dikecualikan sepenuhnya dari pemeriksaan, dan tidak dilakukan perakitan ulang.

Nilai kolom

Anda harus menentukan nilai kolom jika menggunakan operator kolom selain EQUALS_ANY.

Untuk header permintaan, cookie permintaan, dan parameter kueri permintaan, himpunan karakter yang diizinkan untuk nilai kolom mencakup karakter berikut:

  • !, #, $, %, &, *, +, -, ., ^, _, `, |, ~
  • Karakter alfa A sampai Z (huruf besar dan kecil)
  • Karakter digit 0 sampai 9

Saat menerapkan pengecualian untuk kolom permintaan ini, nilai kolom yang dikonfigurasi akan dibandingkan karena nilai tersebut terhadap nilai (tidak peka huruf besar/kecil, setelah transformasi) dari permintaan. Sebaiknya Anda tidak melakukan encoding tambahan jika ingin mengecualikan karakter tertentu yang tidak tercantum dalam kumpulan karakter yang diizinkan.

Untuk URI permintaan, nilai kolom harus diberikan dalam format URI sebagai berikut:

  • Skema diizinkan, tetapi dibatasi hanya untuk http atau https.
  • Host diizinkan, dan dapat berupa alamat IP.
  • Port diizinkan.
  • Jalur diizinkan.
  • Kueri tidak diizinkan.
  • Fragmen tidak diizinkan.

Saat menerapkan pengecualian untuk URI permintaan, nilai kolom yang dikonfigurasi akan dibandingkan dengan URI (tidak peka huruf besar/kecil, setelah transformasi) dari baris permintaan, kecuali string kueri. URI dari baris permintaan bisa relatif atau absolut. Pertimbangkan hal ini saat mengonfigurasi pengecualian untuk URI permintaan.

Contoh

Contoh pertama memperbarui aturan dalam kebijakan keamanan POLICY_1 di PRIORITY guna menambahkan konfigurasi pengecualian untuk semua tanda tangan di bawah aturan WAF sqli-v33-stable, untuk mengecualikan semua cookie permintaan dari pemeriksaan:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "sqli-v33-stable" \
    --request-cookie-to-exclude "op=EQUALS_ANY"

Contoh kedua memperbarui aturan dalam kebijakan keamanan POLICY_2 di PRIORITY guna menambahkan konfigurasi pengecualian untuk tanda tangan owasp-crs-v030301-id941140-xss dan owasp-crs-v030301-id941270-xss di bawah aturan WAF xss-v33-stable, untuk mengecualikan header permintaan yang diawali dengan abc atau diakhiri dengan xyz dari pemeriksaan:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_2 \
    --target-rule-set "xss-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id941140-xss" "owasp-crs-v030301-id941270-xss" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

Contoh ketiga memperbarui aturan dalam kebijakan keamanan POLICY_3 di PRIORITY guna menghapus semua pengecualian kolom permintaan untuk ID aturan owasp-crs-v030301-id942110-sqli dan owasp-crs-v030301-id942120-sqli di bagian sqli-v33-stable.

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_3 \
    --target-rule-set "sqli-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"

Terapkan penguraian pada nilai header Content-Type kustom

Saat Google Cloud Armor mengevaluasi isi POST berdasarkan aturan WAF yang telah dikonfigurasi sebelumnya, header Content-Type akan menunjukkan format data dalam isi permintaan. Secara default, Google Cloud Armor memperlakukan konten isi POST sebagai satu string, yang semuanya memenuhi syarat untuk diperiksa dan dicocokkan pada aturan WAF yang telah dikonfigurasi sebelumnya. Namun, Anda dapat mengonfigurasi penguraian yang lebih tepat jika permintaan masuk memiliki encoding yang berbeda. Google Cloud Armor mendukung jenis encoding berikut:

  • JSON
  • GraphQL

Untuk mengonfigurasi daftar nilai header Content-Type kustom yang menerapkan penguraian alternatif, gunakan contoh berikut. Contoh ini memperbarui kebijakan keamanan POLICY_NAME untuk mengaktifkan penguraian JSON, dan menentukan jenis konten application/json, application/vnd.api+json, application/vnd.collection+json, dan application/vnd.hyper+json:

gcloud compute security-policies update POLICY_NAME \
    --json-parsing STANDARD \
    --json-custom-content-types "application/json,application/vnd.api+json,application/vnd.collection+json,application/vnd.hyper+json"

Atau, jika kebijakan keamanan Anda melindungi aplikasi yang menggunakan GraphQL atau menerima konten yang dienkode GraphQL, Anda dapat menggunakan argumen STANDARD_WITH_GRAPHQL untuk mengurai konten isi POST sebagai konten GraphQL, seperti dalam contoh berikut:

gcloud compute security-policies update POLICY_NAME \
    --json-parsing STANDARD_WITH_GRAPHQL

Pemeriksaan isi POST dibatasi hingga 8 KB pertama. Untuk mengetahui informasi selengkapnya, lihat Batasan kebijakan keamanan.

  • Jika konten JSON lebih besar dari 8 KB, Google Cloud Armor akan menerapkan penguraian JSON ke konten berukuran 8 KB pertama yang digunakan dan diperiksa oleh aturan WAF yang telah dikonfigurasi sebelumnya.

  • Jika parser JSON tidak menampilkan hasil, penguraian URI mungkin akan dicoba. Jika parser URI tidak menampilkan parameter nilai nama atau hanya menampilkan sebagian parameter nilai nama, seluruh atau sebagian string mungkin akan diperlakukan sebagai nama parameter untuk pemeriksaan.

Langkah selanjutnya