Bagikan melalui


Gunakan Pemfilteran Permintaan

oleh Tim IIS

Pengantar

UrlScan, alat keamanan, disediakan sebagai add-on untuk versi Internet Information Services (IIS) yang lebih lama sehingga administrator dapat memberlakukan kebijakan keamanan yang lebih ketat di server Web mereka. Dalam IIS 7 ke atas, semua fitur inti URLScan telah dimasukkan ke dalam modul yang disebut Pemfilteran Permintaan, dan fitur Segmen Tersembunyi telah ditambahkan. Artikel ini menjelaskan setiap fitur Pemfilteran Permintaan dan memberikan contoh bagaimana fitur dapat diterapkan di lingkungan Anda.

Perhatikan bahwa IIS juga menyertakan modul untuk penulisan ulang URL. Ada perbedaan antara kedua modul ini: Pemfilteran permintaan dirancang dan dioptimalkan untuk skenario keamanan, sementara penulisan ulang URL dapat diterapkan untuk serangkaian skenario yang luas (skenario keamanan hanyalah subset dari ini). Untuk informasi selengkapnya tentang perbedaannya, lihat IIS 7.0 dan Di Atas Pemfilteran Permintaan dan Penulisan Ulang URL.

Filter Permintaan Double-Encoded

Fitur ini mencegah serangan yang mengandalkan permintaan yang dikodekan ganda dan berlaku jika penyerang mengirimkan permintaan yang dikodekan ganda yang dibuat dengan hati-hati ke IIS. Ketika filter permintaan yang dikodekan ganda diaktifkan, IIS menormalkan URL dua kali; jika normalisasi pertama berbeda dari yang kedua, permintaan ditolak dan kode kesalahan yang dicatat adalah 404.11. Filter permintaan yang dikodekan ganda adalah opsi VerifyNormalization di UrlScan.

Jika Anda tidak ingin IIS mengizinkan permintaan berkode ganda dilayani, gunakan hal berikut:

<configuration>
 <system.webServer> 
  <security>
   <requestFiltering
                  allowDoubleEscaping="false">
   </requestFiltering> 
  </security>
 </system.webServer>
</configuration>

Filter Karakter Bit Tinggi

Fitur ini memungkinkan atau menolak semua permintaan ke IIS yang berisi karakter non-ASCII dan mencatat kode kesalahan 404.12. UrlScan yang setara adalah AllowHighBitCharacters.

Misalnya, Anda ingin mengizinkan karakter bit tinggi untuk satu aplikasi tetapi tidak untuk seluruh server. Atur allowHighBitCharacters="false" dalam file ApplicationHost.config; tetapi dalam akar aplikasi, buat file Web.config yang memungkinkan aplikasi tunggal tersebut menerima karakter non-ASCII. Dalam file Web.config, gunakan:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering
                  allowHighBitCharacters="true"
            >
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filter Berdasarkan Ekstensi File

Fitur ini mendefinisikan sekumpulan ekstensi file yang diizinkan yang dilayani IIS. Ketika IIS menolak permintaan berdasarkan ekstensi file, kode kesalahan yang dicatat adalah 404.7. Opsi AllowExtensions dan DenyExtensions setara urlScan.

Misalnya, Anda ingin mengizinkan setiap jenis file kecuali file ASP. Atur opsi allowUnlisted untuk fileExtensions ke "true", lalu tentukan entri ekstensi file untuk secara eksplisit menolak ASP:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".asp" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filter Berdasarkan Batas Permintaan

Filter ini menggabungkan tiga fitur (yang memiliki nama yang sama di UrlScan):

  • maxAllowedContentLength–batas atas pada ukuran konten
  • maxUrl–upper bound pada panjang URL
  • maxQueryString–batas atas pada panjang string kueri

Ketika IIS menolak permintaan berdasarkan batas permintaan, kode kesalahan yang dicatat adalah:

  • 413.1 jika konten terlalu panjang.
  • 404.14 jika URL terlalu besar.
  • 404.15 jika string kueri terlalu panjang.

Misalnya, sangat umum bagi perusahaan untuk membeli perangkat lunak yang mereka tidak memiliki akses kode sumber. Seiring waktu, mereka mungkin menemukan kerentanan dalam kode tersebut. Mendapatkan pembaruan untuk kode yang terpengaruh seringkali tidak mudah. Masalah sering disebabkan oleh URL atau string kueri yang terlalu panjang atau oleh kelebihan konten yang dikirim ke aplikasi. Setelah menentukan batas atas yang aman, Anda dapat menerapkan batas menggunakan konfigurasi di bawah ini, tanpa harus menambal biner aplikasi:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="260"
       maxQueryString="25" 
                  />
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filter menurut Kata Kerja

Fitur ini mendefinisikan daftar kata kerja yang diterima IIS sebagai bagian dari permintaan. Ketika IIS menolak permintaan berdasarkan fitur ini, kode kesalahan yang dicatat adalah 404.6. Ini sesuai dengan opsi UseAllowVerbs, AllowVerbs, dan DenyVerbs di UrlScan.

Misalnya, Anda hanya ingin mengizinkan kata kerja GET saja. Untuk mengatur ini, Anda harus terlebih dahulu mengunci konfigurasi sehingga tidak ada kata kerja yang diizinkan dengan mengatur opsi allowUnlisted="false". Selanjutnya, cantumkan kata kerja yang ingin Anda izinkan secara eksplisit, dalam hal ini, GET.

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <verbs
       allowUnlisted="false"
                  >
     <add verb="GET" allowed="true" />
    </verbs>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filter Berdasarkan Urutan URL

Fitur ini mendefinisikan daftar urutan yang ditolak IIS saat merupakan bagian dari permintaan. Ketika IIS menolak permintaan untuk fitur ini, kode kesalahan yang dicatat adalah 404.5.Ini sesuai dengan fitur DenyUrlSequences di UrlScan.

Ini adalah fitur yang sangat kuat. Dengan menggunakan kode berikut, Anda dapat mencegah urutan karakter tertentu dilayani oleh IIS:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <denyUrlSequences>
     <add sequence=".."/>
    </denyUrlSequences>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Dalam contoh sebelumnya, '..' urutan ditolak. Misalkan Anda membeli aplikasi dari vendor yang keluar dari bisnis dan Anda menemukan bahwa aplikasi rentan ketika urutan karakter tertentu dikirim ke dalamnya. Dengan menggunakan fitur ini, Anda dapat melindungi aplikasi tersebut hanya dengan menambahkan urutan URL tersebut ke daftar yang ditolak tanpa harus menambal kode aplikasi.

Filter Segmen Tersembunyi

Fitur ini memungkinkan Anda menentukan segmen mana yang "servable." Ketika IIS menolak permintaan berdasarkan fitur ini, kode kesalahan yang dicatat adalah 404.8. Fitur ini baru menggunakan IIS 7 ke atas; itu bukan bagian dari UrlScan.

Pertimbangkan contoh berikut di mana ada dua URL di server:

http://site.com/bin

http://site.com/binary

Misalkan Anda ingin mengizinkan konten di direktori biner, tetapi bukan konten di direktori bin. Jika Anda menggunakan urutan URL dan menolak urutan "bin", Anda menolak akses ke kedua URL. Dengan menggunakan konfigurasi yang ditunjukkan di bawah ini, Anda dapat menolak akses ke bin, tetapi masih memiliki konten dalam biner yang disajikan:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="BIN"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Kode Kesalahan IIS 7 dan Di Atas

Di versi sebelumnya, Anda dapat menggunakan UrlScan di tingkat global untuk menentukan kebijakan keamanan yang ingin Anda terapkan pada sistem Anda. Dengan IIS 7 ke atas, Anda masih dapat menerapkan polisi tersebut di tingkat global, tetapi juga per URL. Oleh karena itu, Anda dapat memanfaatkan semua manfaat yang diberikan model delegasi kaya baru.

Tabel berikut adalah ringkasan kode kesalahan log IIS:

Kesalahan Kode Status
Situs tidak ditemukan 404.1
Ditolak oleh kebijakan 404.2
Ditolak oleh peta mime 404.3
Tidak ada handler 404.4
Pemfilteran Permintaan: Urutan URL ditolak 404.5
Pemfilteran Permintaan: Kata kerja ditolak 404.6
Pemfilteran Permintaan: Ekstensi file ditolak 404.7
Pemfilteran Permintaan: Ditolak oleh segmen tersembunyi 404.8
Ditolak karena atribut file tersembunyi telah diatur 404.9
Pemfilteran Permintaan: Ditolak karena URL lolos dua kali lipat 404.11
Pemfilteran Permintaan: Ditolak karena karakter bit tinggi 404.12
Pemfilteran Permintaan: Ditolak karena URL terlalu panjang 404.14
Pemfilteran Permintaan: Ditolak karena string kueri terlalu panjang 404.15
Pemfilteran Permintaan: Ditolak karena panjang konten terlalu besar 413.1
Pemfilteran Permintaan: Ditolak karena header permintaan terlalu panjang 431