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 berasal dari OWASP Core Rule Set (CRS). Setiap tanda tangan sesuai dengan aturan deteksi serangan dalam set 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() menampilkan nilai true.

Memilih tingkat sensitivitas

Setiap tanda tangan memiliki tingkat sensitivitas yang sesuai dengan tingkat paranoia OWASP. 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 cenderung lebih kecil kemungkinannya menghasilkan positif palsu. Tingkat sensitivitas yang lebih tinggi meningkatkan keamanan, tetapi juga meningkatkan risiko menghasilkan positif palsu. Saat Anda memilih tingkat sensitivitas untuk aturan WAF, Anda memilih untuk menggunakan tanda tangan pada tingkat sensitivitas yang kurang dari atau sama dengan tingkat 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 pra-konfigurasi cocok dengan lebih banyak permintaan daripada yang diperlukan, atau jika aturan tersebut memblokir traffic yang perlu diizinkan, aturan tersebut dapat disesuaikan untuk menonaktifkan tanda tangan yang tidak relevan atau tidak diperlukan. Untuk menonaktifkan tanda tangan dalam aturan WAF pra-konfigurasi 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']
  }
)

Saat memilih untuk tidak menggunakan ID tanda tangan dari set aturan CRS yang telah dikonfigurasi sebelumnya, Anda harus mencocokkan versi ID tanda tangan dengan versi set 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.

Tanda tangan aturan keikutsertaan

Daripada menonaktifkan tanda tangan aturan, Anda dapat mengaktifkan tanda tangan aturan di tingkat sensitivitas yang dinonaktifkan. Sebaiknya Anda mengaktifkan tanda tangan aturan jika jumlah tanda tangan yang ingin Anda gunakan dalam tingkat sensitivitas tertentu lebih sedikit daripada jumlah aturan yang ingin Anda nonaktifkan. Untuk ikut serta dalam tanda tangan aturan, tingkat sensitivitas harus 0. Contoh berikut membatalkan keikutsertaan 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 dengan 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 evaluasi aturan WAF yang telah dikonfigurasi sebelumnya.

Pengecualian hanya berlaku untuk tanda tangan di target yang awalnya akan memeriksa nilai header permintaan. Hal ini mencakup tanda tangan yang terkait dengan tanda permintaan berikut dalam OWASP Core Rule Set:

  • REQUEST_HEADERS

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

Cookie permintaan

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

Pengecualian hanya berlaku untuk tanda tangan di target yang awalnya akan memeriksa nilai cookie permintaan. Hal ini mencakup tanda tangan yang terkait dengan tanda permintaan berikut dalam OWASP Core Rule Set:

  • REQUEST_COOKIES

Hanya nilai cookie permintaan yang ditentukan yang dikecualikan dari pemeriksaan. Nama 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 di target yang awalnya akan memeriksa parameter permintaan. Hal ini mencakup tanda tangan yang terkait dengan tanda permintaan berikut dalam OWASP Core Rule Set:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

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

Karena parameter kueri adalah bagian dari URI dan baris permintaan, kolom ini dirakit ulang untuk pemeriksaan 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 Anda mengecualikan parameter kueri bernama "args", Anda mungkin masih melihat kecocokan pada tanda tangan yang memeriksa seluruh isi permintaan jika permintaan memiliki parameter "args" di isi POST dan nilai "args" cocok.

URI Permintaan

Daftar URI dari baris permintaan, tidak termasuk 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 awalnya akan memeriksa URI permintaan. Hal ini mencakup tanda tangan yang terkait dengan tanda permintaan berikut dalam OWASP Core Rule Set:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Saat mengecualikan salah satu kolom di atas, kolom tersebut akan sepenuhnya dikecualikan dari pemeriksaan, dan tidak ada penggabungan 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 huruf besar)
  • Karakter digit 0 hingga 9

Saat menerapkan pengecualian untuk kolom permintaan ini, nilai kolom yang dikonfigurasi dibandingkan apa adanya dengan nilai (tidak peka huruf besar/kecil, setelah transformasi) dari permintaan. Anda tidak perlu melakukan encoding tambahan jika ingin mengecualikan karakter tertentu yang tidak ada dalam set 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 dibandingkan apa adanya dengan URI (tidak peka huruf besar/kecil, setelah transformasi) dari baris permintaan, tidak termasuk string kueri. URI dari baris permintaan dapat berupa 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 bagi semua tanda tangan di 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 bagi tanda tangan owasp-crs-v030301-id941140-xss dan owasp-crs-v030301-id941270-xss dalam aturan WAF xss-v33-stable, untuk mengecualikan header permintaan yang dimulai 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 menambahkan konfigurasi pengecualian bagi semua tanda tangan dalam aturan WAF sqli-v33-stable. Hal ini mengecualikan parameter kueri permintaan (diuraikan dari string kueri URI atau payload isi) yang sama dengan bad-param dari pemeriksaan:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_3 \
    --target-rule-set "sqli-v33-stable" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param"

Contoh keempat memperbarui aturan dalam kebijakan keamanan POLICY_4 di PRIORITY untuk menambahkan konfigurasi pengecualian untuk tanda tangan owasp-crs-v030301-id930100-lfi dalam aturan WAF lfi-v33-stable. Hal ini mengecualikan URI permintaan yang berisi /bad-path dari pemeriksaan:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_4 \
    --target-rule-set "lfi-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id930100-lfi" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

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

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_5 \
    --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 isi body POST sebagai satu string, yang semuanya memenuhi syarat untuk diperiksa dan dicocokkan dengan aturan WAF yang telah dikonfigurasi sebelumnya. Namun, Anda dapat mengonfigurasi parsing yang lebih presisi jika permintaan masuk Anda memiliki encoding yang berbeda. Google Cloud Armor mendukung jenis encoding berikut:

  • JSON
  • GraphQL

Untuk mengetahui informasi selengkapnya, lihat Penguraian konten isi POST.

Langkah berikutnya