Daftar pengecualian Web Application Firewall

Web Application Firewall (WAF) Azure Application Gateway memberikan perlindungan untuk aplikasi web. Artikel ini menjelaskan konfigurasi untuk daftar pengecualian WAF. Setelan ini berada di kebijakan WAF yang terkait dengan Application Gateway anda. Untuk mempelajari Kebijakan WAF lebih lanjut, lihat Azure Web Application Firewall di Azure Application Gateway dan Buat kebijakan Web Application Firewall untuk Application Gateway.

Terkadang WAF mungkin memblokir permintaan yang diizinkan untuk aplikasi Anda. Daftar pengecualian WAF memungkinkan Anda menghilangkan atribut permintaan tertentu dari evaluasi WAF. Permintaan lainnya dievaluasi seperti biasa.

Misalnya, Direktori Aktif menyisipkan token yang digunakan untuk autentikasi. Saat digunakan dalam header permintaan, token ini dapat berisi karakter khusus yang mungkin memicu deteksi positif palsu dari aturan WAF. Dengan menambahkan header ke daftar pengecualian, Anda dapat mengonfigurasi WAF untuk mengabaikan header, tetapi WAF masih mengevaluasi sisa permintaan.

Anda dapat mengonfigurasi pengecualian untuk diterapkan saat aturan WAF tertentu dievaluasi, atau diterapkan secara global ke evaluasi semua aturan WAF. Aturan pengecualian berlaku untuk seluruh aplikasi web Anda.

Mengidentifikasi atribut permintaan yang akan dikecualikan

Saat mengonfigurasi pengecualian WAF, Anda harus menentukan atribut permintaan yang harus dikecualikan dari evaluasi WAF. Anda dapat mengonfigurasi pengecualian WAF untuk atribut permintaan berikut:

  • Header permintaan
  • Cookie permintaan
  • Nama atribut permintaan (arg) dapat ditambahkan sebagai elemen pengecualian, seperti:
    • Nama bidang isian borang
    • Entitas JSON
    • Arg string kueri URL

Anda dapat menentukan kecocokan atribut header permintaan, isi, cookie, atau string kueri yang tepat. Atau, Anda dapat menentukan pencocokan parsial. Gunakan operator berikut untuk mengonfigurasi pengecualian:

  • Sama dengan: Operator ini digunakan untuk pencocokan yang tepat. Sebagai contoh, untuk memilih header bernama bearerToken, gunakan operator yang sama dengan pemilih yang ditetapkan sebagai bearerToken.
  • Dimulai dengan: Operator ini cocok dengan semua bidang yang dimulai dengan nilai pemilih yang ditentukan.
  • Akhiri dengan: Operator ini mencocokkan semua bidang permintaan yang diakhiri dengan nilai pemilih yang ditentukan.
  • Berisi: Operator ini cocok dengan semua bidang yang dimulai dengan nilai pemilih yang ditentukan.
  • Sama dengan: Operator ini cocok dengan semua kolom permintaan. * akan menjadi nilai pemilih. Misalnya, Anda akan menggunakan operator ini ketika Anda tidak mengetahui nilai yang tepat untuk variabel kecocokan tertentu tetapi ingin memastikan bahwa lalu lintas permintaan masih dikecualikan dari evaluasi aturan.

Saat memproses pengecualian, mesin WAF melakukan kecocokan peka huruf besar/tidak sensitif berdasarkan tabel di bawah ini. Selain itu, ekspresi reguler tidak diizinkan karena pemilih dan badan permintaan XML tidak didukung.

Bagian Isi Permintaan CRS 3.1 dan Yang Lebih Lama CRS 3.2 dan yang lebih baru
Header* Case Insensitive Case Insensitive
Cookie* Case Insensitive Peka Huruf Besar/Kecil
String Kueri* Case Insensitive Peka Huruf Besar/Kecil
Isi Berkode URL Case Insensitive Peka Huruf Besar/Kecil
Isi JSON Case Insensitive Peka Huruf Besar/Kecil
Isi XML Tidak Didukung Tidak Didukung
Isi Multipihak Case Insensitive Peka Huruf Besar/Kecil

*Tergantung pada aplikasi, nama, dan nilai, header, cookie, dan arg kueri Anda dapat peka huruf besar/kecil atau tidak peka huruf besar/kecil.

Catatan

Untuk informasi selengkapnya dan bantuan pemecahan masalah, lihat Pemecahan masalah WAF.

Meminta atribut berdasarkan kunci dan nilai

Saat mengonfigurasi pengecualian, Anda perlu menentukan apakah ingin mengecualikan kunci atau nilai dari evaluasi WAF.

Misalnya, permintaan Anda menyertakan header ini:

My-Header: 1=1

Nilai header (1=1) mungkin dideteksi sebagai serangan oleh WAF. Tetapi jika Anda mendapatinya sebagai nilai yang sah untuk skenario Anda, Anda dapat mengonfigurasi pengecualian untuk nilai header. Untuk melakukannya, Anda menggunakan variabel pencocokan RequestHeaderValues, operator berisi, dan pemilih (My-Header). Konfigurasi ini menghentikan evaluasi semua nilai untuk header My-Header.

Catatan

Atribut permintaan berdasarkan kunci dan nilai hanya tersedia di CRS 3.2 atau yang lebih baru dan Bot Manager 1.0 atau yang lebih baru.

Atribut permintaan berdasarkan nama berfungsi sama seperti atribut permintaan berdasarkan nilai, dan disertakan untuk kompatibilitas mundur dengan CRS 3.1 dan versi yang lebih lama. Sebaiknya Anda menggunakan atribut permintaan berdasarkan nilai, bukan atribut berdasarkan nama. Misalnya, gunakan RequestHeaderValues, bukan RequestHeaderNames.

Sebaliknya, jika WAF Anda mendeteksi nama header (My-Header) sebagai serangan, Anda dapat mengonfigurasi pengecualian untuk kunci header dengan menggunakan atribut permintaan RequestHeaderKeys. Atribut RequestHeaderKeys hanya tersedia di CRS 3.2 atau yang lebih baru dan Bot Manager 1.0 atau yang lebih baru.

Contoh atribut permintaan

Tabel di bawah ini memperlihatkan beberapa contoh bagaimana Anda dapat menyusun pengecualian untuk variabel kecocokan tertentu.

Atribut untuk Dikecualikan matchVariable selectorMatchOperator Contoh pemilih Contoh permintaan Apa yang dikecualikan
Untai kueri RequestArgKeys Sama dengan /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Untai kueri RequestArgKeys EqualsAny T/A Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd dan .htaccess
Untai kueri RequestArgNames Sama dengan text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Untai kueri RequestArgNames EqualsAny T/A Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd dan .cshrc
Untai kueri RequestArgValues Sama dengan text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Untai kueri RequestArgValues EqualsAny T/A Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd dan .cshrc
Isi permintaan RequestArgKeys Contains sleep Isi permintaan: {"sleep(5)": "test"} sleep(5)
Isi permintaan RequestArgKeys EqualsAny T/A Isi permintaan: {".zshrc": "value", "sleep(5)":"value2"} .zshrc dan sleep(5)
Isi permintaan RequestArgNames Sama dengan test Isi permintaan: {"test": ".zshrc"} .zshrc
Isi permintaan RequestArgNames EqualsAny T/A Isi permintaan: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc dan sleep(5)
Isi permintaan RequestArgValues Sama dengan test Isi permintaan: {"test": ".zshrc"} .zshrc
Isi permintaan RequestArgValues EqualsAny T/A Isi permintaan: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc dan sleep(5)
Header RequestHeaderKeys Sama dengan X-Scanner Header: {"X-Scanner": "test"} X-scanner
Header RequestHeaderKeys EqualsAny T/A Header: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner dan x-ratproxy-loop
Header RequestHeaderNames Sama dengan head1 Header: {"head1": "X-Scanner"} X-scanner
Header RequestHeaderNames EqualsAny T/A Header: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 dan (hydra)
Header RequestHeaderValues Sama dengan head1 Header: {"head1": "X-Scanner"} X-scanner
Header RequestHeaderValues EqualsAny T/A Header: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 dan (hydra)
Kuki RequestCookieKeys Contains /etc/passwd Header: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Kuki RequestCookieKeys EqualsAny T/A Header: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest dan .htaccess
Kuki RequestCookieNames Sama dengan arg1 Header: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Kuki RequestCookieNames EqualsAny T/A Header: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd dan .cshrc
Kuki RequestCookieValues Sama dengan arg1 Header: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Kuki RequestCookieValues EqualsAny T/A Header: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd dan .cshrc

Catatan

Jika Anda membuat pengecualian menggunakan selectorMatchOperator EqualsAny, apa pun yang Anda masukkan ke bidang pemilih akan dikonversi ke "*" oleh backend saat pengecualian dibuat.

Cakupan pengecualian

Pengecualian dapat dikonfigurasi untuk diterapkan ke serangkaian aturan WAF tertentu, ke set aturan, atau secara global di semua aturan.

Tip

Ini adalah praktik yang tepat untuk membuat pengecualian sesempit dan sekhusus mungkin, agar tidak meninggalkan ruang secara tidak sengaja bagi penyerang untuk mengeksploitasi sistem Anda. Jika Anda perlu menambahkan aturan pengecualian, gunakan pengecualian per aturan sedapat mungkin.

Pengecualian per aturan

Anda dapat mengonfigurasi pengecualian untuk aturan tertentu, grup aturan, atau seperangkat aturan. Anda harus menentukan aturan atau beberapa aturan tempat pengecualian diterapkan. Anda juga perlu menentukan atribut permintaan yang harus dikecualikan dari evaluasi WAF. Untuk mengecualikan sekelompok aturan lengkap, hanya berikan parameter ruleGroupName, parameter rules hanya berguna saat Anda ingin membatasi pengecualian untuk aturan grup tertentu.

Pengecualian per aturan tersedia saat Anda menggunakan ruleset OWASP (CRS) versi 3.2 atau yang lebih baru atau ruleset Bot Manager versi 1.0 atau yang lebih baru.

Contoh

Misalkan Anda menginginkan WAF mengabaikan nilai header permintaan User-Agent. Header User-Agent berisi string karakteristik yang memungkinkan rekan protokol jaringan untuk mengidentifikasi jenis aplikasi, sistem operasi, vendor perangkat lunak, atau versi perangkat lunak agen pengguna perangkat lunak yang meminta. Untuk informasi selengkapnya, lihat Agen Pengguna.

Ada sejumlah alasan untuk menonaktifkan evaluasi header ini. Mungkin ada string yang dilihat WAF dan menganggapnya berbahaya. Misalnya, header User-Agent mungkin menyertakan serangan injeksi SQL klasik x=x dalam string. Dalam beberapa kasus, ini bisa menjadi lalu lintas yang sah. Jadi Anda mungkin perlu mengecualikan header ini dari evaluasi WAF.

Anda dapat menggunakan pendekatan berikut untuk mengecualikan header User-Agent dari evaluasi oleh semua aturan injeksi SQL:

Untuk mengonfigurasi pengecualian per aturan dengan menggunakan portal Azure, ikuti langkah-langkah berikut:

  1. Navigasikan ke kebijakan WAF, dan pilih Aturan terkelola.

  2. Pilih Tambahkan pengecualian.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. Di Berlaku untuk, pilih seperangkat aturan CRS untuk menerapkan pengecualian, seperti OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Pilih Tambahkan aturan, dan pilih aturan yang ingin Anda terapkan pengecualiannya.

  5. Konfigurasikan variabel kecocokan, operator, dan pemilih. Kemudian pilih Simpan.

Anda dapat mengonfigurasi beberapa pengecualian.

Anda juga dapat mengecualikan header User-Agent dari evaluasi hanya dengan aturan 942270:

Ikuti langkah-langkah yang dijelaskan dalam contoh sebelumnya, dan pilih aturan 942270 di langkah 4.

Pengecualian global

Anda dapat mengonfigurasi pengecualian untuk diterapkan di semua aturan WAF.

Contoh

Misalkan Anda ingin mengecualikan nilai dalam parameter pengguna yang diteruskan dalam permintaan melalui URL. Misalnya, argumen string kueri user di lingkungan Anda umumnya berisi string yang dilihat WAF sebagai konten berbahaya, sehingga WAF memblokirnya. Anda dapat mengecualikan semua argumen string kueri di mana nama dimulai dengan kata user, sehingga WAF tidak mengevaluasi nilai bidang.

Contoh berikut menunjukkan cara mengecualikan argumen string kueri user dari evaluasi:

Untuk mengonfigurasi pengecualian global dengan menggunakan portal Azure, ikuti langkah-langkah berikut:

  1. Navigasikan ke kebijakan WAF, dan pilih Aturan terkelola.

  2. Pilih Tambahkan pengecualian.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. Di Berlaku untuk, pilih Global

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Konfigurasikan variabel kecocokan, operator, dan pemilih. Kemudian pilih Simpan.

Anda dapat mengonfigurasi beberapa pengecualian.

Jadi jika URL http://www.contoso.com/?user%3c%3e=joe dipindai oleh WAF, URL tidak akan mengevaluasi joe string, tetapi masih mengevaluasi pengguna nama parameter%3c%3e.

Langkah berikutnya