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
sampaiZ
(huruf besar dan kecil) - Karakter digit
0
sampai9
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
- Pelajari lebih lanjut cara mengonfigurasi kebijakan keamanan.
- Pelajari lebih lanjut tanda tangan aturan yang tersedia untuk aturan WAF yang telah dikonfigurasi sebelumnya.
- Pelajari lebih lanjut aturan WAF yang telah dikonfigurasi sebelumnya menggunakan referensi bahasa aturan kustom.