Menyesuaikan aturan WAF yang telah dikonfigurasi sebelumnya oleh Google Cloud Armor

Google Cloud Armor menyediakan aturan WAF yang telah dikonfigurasi sebelumnya, yang masing-masing terdiri dari beberapa tanda tangan yang bersumber dari Kumpulan Aturan Inti ModSecurity (CRS). Setiap tanda tangan sesuai dengan aturan deteksi serangan dalam kumpulan aturan. Permintaan masuk dievaluasi berdasarkan aturan WAF yang telah dikonfigurasi sebelumnya. Permintaan cocok dengan aturan WAF yang telah dikonfigurasi sebelumnya jika permintaan cocok dengan salah satu tanda tangan yang terkait dengan aturan WAF yang telah dikonfigurasi sebelumnya. Kecocokan dibuat saat ekspresi evaluatePreconfiguredWaf() atau evaluatePreconfiguredExpr() menampilkan nilai true.

Memilih 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 keyakinan yang lebih tinggi, yang kurang mungkin menghasilkan positif palsu. Tingkat sensitivitas yang lebih tinggi meningkatkan keamanan, tetapi juga meningkatkan risiko menghasilkan positif palsu. Saat memilih tingkat sensitivitas untuk aturan WAF, Anda memilih untuk mengaktifkan tanda tangan pada tingkat sensitivitas yang kurang dari atau sama dengan tingkat sensitivitas yang dipilih. Pada contoh berikut, Anda akan menyesuaikan aturan WAF yang telah dikonfigurasi sebelumnya dengan memilih tingkat sensitivitas 1:

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

Tanda tangan aturan tidak ikut

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 tersebut dapat disesuaikan untuk menonaktifkan tanda tangan yang berisik atau tidak perlu. Untuk menonaktifkan tanda tangan dalam aturan WAF prakonfigurasi tertentu, 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 Anda memilih untuk tidak menggunakan 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.

Mengaktifkan tanda tangan aturan

Daripada memilih untuk tidak menggunakan tanda tangan aturan, Anda dapat memilih untuk menggunakan tanda tangan aturan di tingkat sensitivitas yang dinonaktifkan. Sebaiknya Anda mengaktifkan tanda tangan aturan jika ada lebih sedikit tanda tangan yang ingin Anda gunakan dalam level sensitivitas tertentu daripada aturan yang ingin Anda nonaktifkan. Untuk mengaktifkan tanda tangan aturan, tingkat sensitivitas harus 0. Contoh berikut menonaktifkan semua tanda tangan cve-canary di semua tingkat sensitivitas, lalu secara eksplisit mengaktifkan 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 di kolom permintaan (seperti header, cookie, parameter kueri, atau URI) yang cocok dengan tanda tangan dalam aturan WAF yang telah dikonfigurasi sebelumnya, tetapi Anda tahu bahwa konten tersebut sah. Dalam hal ini, Anda dapat mengurangi positif palsu dengan mengecualikan kolom permintaan tersebut dari pemeriksaan dengan mengaitkan daftar pengecualian untuk kolom permintaan dengan aturan kebijakan keamanan. Perhatikan bahwa jika Anda memiliki pengecualian kolom permintaan yang dilampirkan ke aturan WAF, Anda tidak dapat menggunakan tindakan allow.

Saat mengonfigurasi pengecualian kolom permintaan, Anda mengaitkannya dengan target, yang dapat berupa seluruh aturan WAF yang telah dikonfigurasi sebelumnya, atau daftar tanda tangan dalam 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 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.

Header permintaan

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

Pengecualian hanya berlaku untuk tanda tangan di target yang akan memeriksa nilai header permintaan secara asli. Ini mencakup tanda tangan yang terkait dengan flag permintaan berikut di Set Aturan Inti ModSecurity:

  • REQUEST_HEADERS

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

Meminta cookie

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

Pengecualian hanya berlaku untuk tanda tangan di target yang akan memeriksa nilai cookie permintaan secara asli. Hal ini mencakup tanda tangan yang dikaitkan dengan flag permintaan berikut di Set Aturan Inti ModSecurity:

  • REQUEST_COOKIES

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

Meminta parameter kueri

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

Pengecualian hanya berlaku untuk tanda tangan di target yang akan memeriksa parameter permintaan secara asli. Ini mencakup tanda tangan yang terkait dengan flag permintaan berikut di Set Aturan Inti ModSecurity:

  • ARGS
  • 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 adalah bagian dari URI dan baris permintaan, kolom ini akan dirakit ulang untuk diperiksa setelah mengecualikan parameter kueri yang ditentukan. Namun, untuk tanda tangan yang memeriksa seluruh isi permintaan (seperti tanda tangan yang terkait dengan tanda permintaan REQUEST_BODY), pengecualian untuk parameter kueri tidak diterapkan.

Misalnya, jika Anda 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 di target yang akan memeriksa URI permintaan secara asli. Ini mencakup tanda tangan yang terkait dengan flag permintaan berikut di Set Aturan Inti ModSecurity:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Saat mengecualikan salah satu kolom sebelumnya, kolom tersebut akan dikecualikan sepenuhnya dari pemeriksaan, dan tidak ada perakitan ulang yang dilakukan.

Nilai kolom

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

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

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

Saat menerapkan pengecualian untuk kolom permintaan ini, nilai kolom yang dikonfigurasi akan dibandingkan dengan nilai (tidak peka huruf besar/kecil, setelah transformasi) dari permintaan. Anda tidak perlu melakukan enkripsi tambahan jika ingin mengecualikan karakter tertentu yang tidak ada dalam kumpulan karakter yang diizinkan.

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

  • Skema diizinkan, tetapi hanya dibatasi 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, tidak termasuk string kueri. URI dari baris permintaan dapat bersifat relatif atau absolut. Pertimbangkan hal ini saat mengonfigurasi pengecualian untuk URI permintaan.

Contoh

Contoh pertama memperbarui aturan dalam kebijakan keamanan POLICY_1 di PRIORITY untuk 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 untuk menambahkan konfigurasi pengecualian untuk tanda tangan owasp-crs-v030301-id941140-xss dan owasp-crs-v030301-id941270-xss di bagian 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 untuk 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"

Menerapkan penguraian pada nilai header Content-Type kustom

Saat Google Cloud Armor mengevaluasi isi POST terhadap aturan WAF yang telah dikonfigurasi sebelumnya, header Content-Type 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 dengan aturan WAF yang telah dikonfigurasi sebelumnya. Namun, Anda dapat mengonfigurasi penguraian yang lebih akurat jika permintaan masuk memiliki encoding yang berbeda. Google Cloud Armor mendukung jenis encoding berikut:

  • JSON
  • GraphQL

Untuk informasi selengkapnya, lihat Pemrosesan konten isi POST.

Langkah selanjutnya