Bagikan melalui


Mengkustomisasi header respons keamanan HTTP dengan AD FS 2019

Layanan Federasi Direktori Aktif (AD FS) 2019 menambahkan fungsionalitas untuk menyesuaikan header respons keamanan HTTP yang dikirim oleh Layanan Federasi Direktori Aktif. Alat-alat ini membantu administrator melindungi dari kerentanan keamanan umum dan memungkinkan mereka memanfaatkan kemajuan terbaru dalam mekanisme perlindungan berbasis browser. Fitur ini berasal dari pengenalan dua cmdlet baru: Get-AdfsResponseHeaders dan Set-AdfsResponseHeaders.

Catatan

Fungsionalitas untuk mengkustomisasi header respons keamanan HTTP (kecuali Header CORS) dengan menggunakan cmdlet: Get-AdfsResponseHeaders dan Set-AdfsResponseHeaders didukung ke LAYANAN Federasi Direktori Aktif 2016. Anda dapat menambahkan fungsionalitas ke Layanan Federasi Direktori Aktif 2016 dengan menginstal KB4493473 dan KB4507459.

Artikel ini membahas header respons keamanan yang umum digunakan untuk menunjukkan cara menyesuaikan header yang dikirim oleh Layanan Federasi Direktori Aktif 2019.

Catatan

Artikel ini mengasumsikan bahwa Anda menginstal Layanan Federasi Direktori Aktif 2019.

Skenario

Skenario berikut menunjukkan admin yang diperlukan mungkin harus menyesuaikan header keamanan.

  • Administrator mengaktifkan HTTP Strict-Transport-Security (HSTS) untuk melindungi pengguna yang mungkin mengakses aplikasi web dengan menggunakan HTTP dari titik akses wifi publik yang mungkin diretas. HSTS memaksa semua koneksi melalui enkripsi HTTPS. Mereka ingin lebih memperkuat keamanan dengan mengaktifkan HSTS untuk subdomain.
  • Administrator mengonfigurasi header respons X-Frame-Options untuk melindungi halaman web agar tidak di-clickjack. X-Frame-Options mencegah penyajian halaman web apa pun di iFrame. Namun, mereka perlu menyesuaikan nilai header karena persyaratan bisnis baru untuk menampilkan data (di iFrame) dari aplikasi dengan asal (domain) yang berbeda.
  • Administrator mengaktifkan X-XSS-Protection untuk membersihkan dan memblokir halaman jika browser mendeteksi serangan skrip silang. X-XSS-Protection mencegah serangan skrip silang. Namun, mereka perlu mengkustomisasi header untuk memungkinkan halaman dimuat setelah disanitasi.
  • Administrator perlu mengaktifkan Berbagi Sumber Daya Lintas Asal (CORS), dan mereka perlu mengatur asal (domain) di Layanan Federasi Direktori Aktif untuk memungkinkan aplikasi satu halaman mengakses API web dengan domain lain.
  • Administrator mengaktifkan header Kebijakan Keamanan Konten (CSP) untuk mencegah skrip lintas situs dan serangan injeksi data dengan melarang permintaan lintas domain. Namun, karena persyaratan bisnis baru, mereka perlu menyesuaikan header untuk memungkinkan halaman web memuat gambar dari asal apa pun dan membatasi media ke penyedia tepercaya.

Header respons keamanan HTTP

Layanan Federasi Direktori Aktif menyertakan header respons dalam respons HTTP keluar yang dikirim browser web. Anda dapat mencantumkan header dengan menggunakan Get-AdfsResponseHeaders cmdlet seperti yang ditunjukkan pada cuplikan layar berikut.

Screenshot that shows the PowerShell output from Get-AdfsResponseHeaders.

Atribut ResponseHeaders dalam cuplikan layar mengidentifikasi header keamanan yang disertakan oleh Layanan Federasi Direktori Aktif dalam setiap respons HTTP. Layanan Federasi Direktori Aktif mengirimkan header respons hanya jika ResponseHeadersEnabled diatur ke True (nilai default). Nilai dapat diatur ke False untuk mencegah Layanan Federasi Direktori Aktif termasuk salah satu header keamanan dalam respons HTTP. Namun, pengaturan ini tidak disarankan. Anda dapat mengatur ResponseHeaders ke False dengan perintah berikut:

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HTTP Strict-Transport-Security (HSTS)

HTTP Strict-Transport-Security (HSTS) adalah mekanisme kebijakan keamanan web, yang membantu mengurangi serangan penurunan protokol dan pembajakan cookie untuk layanan yang memiliki titik akhir HTTP dan HTTPS. Ini memungkinkan server web untuk menyatakan bahwa browser web, atau agen pengguna lain yang mematuhi, hanya boleh berinteraksi dengannya dengan menggunakan HTTPS dan tidak pernah melalui protokol HTTP.

Semua titik akhir Layanan Federasi Direktori Aktif untuk lalu lintas autentikasi web dibuka secara eksklusif melalui HTTPS. Akibatnya, Layanan Federasi Direktori Aktif secara efektif mengurangi ancaman yang disediakan mekanisme kebijakan Keamanan Transportasi Ketat HTTP. Secara default, tidak ada penurunan ke HTTP karena tidak ada pendengar di HTTP. Header dapat dikustomisasi dengan mengatur parameter berikut:

  • max-age=<expire-time>. Waktu kedaluwarsa (dalam detik) menentukan berapa lama situs hanya boleh diakses menggunakan HTTPS. Nilai default dan yang direkomendasikan adalah 31536000 detik (satu tahun).
  • includeSubDomains. Parameter ini bersifat opsional. Jika ditentukan, aturan HSTS juga berlaku untuk semua subdomain.

Kustomisasi HSTS

Secara default, header diaktifkan dan max-age diatur ke satu tahun; namun, administrator dapat memodifikasi max-age (menurunkan nilai usia maksimum tidak disarankan) atau mengaktifkan HSTS untuk subdomain melalui cmdlet Set-AdfsResponseHeaders .

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=<seconds>; includeSubDomains"

Contoh:

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=31536000; includeSubDomains"

Secara default, header disertakan dalam atribut ResponseHeaders ; namun, administrator dapat menghapus header melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"

X-Frame-Options

Layanan Federasi Direktori Aktif secara default tidak mengizinkan aplikasi eksternal untuk menggunakan iFrames saat melakukan masuk interaktif. Konfigurasi ini mencegah gaya serangan phishing tertentu. Rincian masuk non-interaktif dapat dilakukan melalui iFrame karena keamanan tingkat sesi sebelumnya yang telah ditetapkan.

Namun, dalam kasus tertentu yang jarang terjadi, Anda mungkin mempercayai aplikasi tertentu yang memerlukan halaman masuk AD FS interaktif berkemampukan iFrame. Header X-Frame-Options digunakan untuk tujuan ini.

Header respons keamanan HTTP ini digunakan untuk berkomunikasi dengan browser apakah dapat merender halaman dalam <bingkai>/<iframe>. Header dapat diatur ke salah satu nilai berikut:

  • tolak. Halaman dalam bingkai tidak ditampilkan. Konfigurasi ini adalah pengaturan default dan yang direkomendasikan.
  • sameorigin. Halaman hanya ditampilkan dalam bingkai jika asalnya sama dengan asal halaman web. Opsi ini tidak berguna kecuali semua leluhur juga berada di asal yang sama.
  • allow-from <asal> yang ditentukan. Halaman hanya ditampilkan dalam bingkai jika asal (misalnya, https://www.".com) cocok dengan asal tertentu di header. Beberapa browser mungkin tidak mendukung opsi ini.

Kustomisasi X-Frame-Options

Secara default, header diatur ke tolak; namun, admin dapat memodifikasi nilai melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "<deny/sameorigin/allow-from<specified origin>>"

Contoh:

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "allow-from https://www.example.com"

Secara default, header disertakan dalam atribut ResponseHeaders ; namun, administrator dapat menghapus header melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "X-Frame-Options"

X-XSS-Protection

Header respons keamanan HTTP ini digunakan untuk menghentikan pemuatan halaman web ketika browser mendeteksi serangan skrip lintas situs (XSS). Pendekatan ini disebut sebagai pemfilteran XSS. Header dapat diatur ke salah satu nilai berikut:

  • 0 menonaktifkan pemfilteran XSS. Tidak direkomendasikan.
  • 1 memungkinkan pemfilteran XSS. Jika serangan XSS terdeteksi, browser akan membersihkan halaman.
  • 1; mode=block memungkinkan pemfilteran XSS. Jika serangan XSS terdeteksi, browser mencegah penyajian halaman. Pengaturan ini adalah pengaturan default dan yang direkomendasikan.

Kustomisasi X-XSS-Protection

Secara default, header diatur ke 1; mode=blok;. Namun, administrator dapat memodifikasi nilai melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "<0/1/1; mode=block/1; report=<reporting-uri>>"

Contoh:

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "1"

Secara default, header disertakan dalam atribut ResponseHeaders ; namun, admin dapat menghapus header melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"

Header Cross Origin Resource Sharing (CORS)

Keamanan browser web mencegah halaman web membuat permintaan lintas asal yang dimulai dari dalam skrip. Namun, Anda mungkin ingin mengakses sumber daya di asal lain (domain). Cross Origin Resource Sharing (CORS) adalah standar W3C yang memungkinkan server untuk melonggarkan kebijakan asal yang sama. Dengan menggunakan CORS, server dapat secara eksplisit mengizinkan beberapa permintaan lintas asal sambil menolak yang lain.

Untuk lebih memahami permintaan CORS, skenario berikut berjalan melalui instans di mana satu aplikasi halaman (SPA) perlu memanggil API web dengan domain yang berbeda. Selanjutnya, pertimbangkan bahwa SPA dan API dikonfigurasi pada Layanan Federasi Direktori Aktif 2019 dan LAYANAN Federasi Direktori Aktif mengaktifkan CORS. Layanan Federasi Direktori Aktif dapat mengidentifikasi header CORS dalam permintaan HTTP, memvalidasi nilai header, dan menyertakan header CORS yang sesuai dalam respons. Untuk detail tentang cara mengaktifkan dan mengonfigurasi CORS pada Layanan Federasi Direktori Aktif 2019, lihat bagian Kustomisasi CORS. Contoh alur berikut memancang Anda melalui skenario:

  1. Pengguna mengakses SPA melalui browser klien dan dialihkan ke titik akhir autentikasi Ad FS untuk autentikasi. Karena SPA dikonfigurasi untuk alur pemberian implisit, permintaan mengembalikan token Access + ID ke browser setelah autentikasi berhasil.

  2. Setelah autentikasi pengguna, JavaScript front-end yang disertakan dalam SPA membuat permintaan untuk mengakses API web. Permintaan dialihkan ke Layanan Federasi Direktori Aktif dengan header berikut:

    • Opsi - menjelaskan opsi komunikasi untuk sumber daya target.
    • Origin - mencakup asal API web.
    • Access-Control-Request-Method - mengidentifikasi metode HTTP (misalnya, DELETE) yang akan digunakan saat permintaan aktual dibuat.
    • Access-Control-Request-Headers - mengidentifikasi header HTTP yang akan digunakan saat permintaan aktual dibuat.

    Catatan

    Permintaan CORS menyerupan permintaan HTTP standar. Namun, keberadaan header asal menandakan permintaan masuk terkait CORS.

  3. Layanan Federasi Direktori Aktif memverifikasi bahwa asal API web yang disertakan dalam header tercantum dalam asal tepercaya yang dikonfigurasi di Layanan Federasi Direktori Aktif. Untuk informasi selengkapnya tentang cara memodifikasi asal tepercaya, lihat Kustomisasi CORS. Layanan Federasi Direktori Aktif kemudian merespons dengan header berikut:

    • Access-Control-Allow-Origin - nilai sama seperti di header Asal.
    • Access-Control-Allow-Method - nilai yang sama seperti di header Access-Control-Request-Method.
    • Access-Control-Allow-Headers - nilai yang sama seperti di header Access-Control-Request-Headers.
  4. Browser mengirimkan permintaan aktual termasuk header berikut:

    • Metode HTTP (misalnya, DELETE).
    • Origin – mencakup asal API web.
    • Semua header yang disertakan dalam header respons Access-Control-Allow-Headers.
  5. Setelah diverifikasi, Ad FS menyetujui permintaan dengan menyertakan domain API web (asal) di header respons Access-Control-Allow-Origin.

  6. Penyertaan header Access-Control-Allow-Origin memungkinkan browser untuk memanggil API yang diminta.

Kustomisasi CORS

Secara default, fungsionalitas CORS tidak diaktifkan; namun, admin dapat mengaktifkan fungsionalitas melalui Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -EnableCORS $true

Setelah diaktifkan, admin dapat menghitung daftar asal tepercaya dengan menggunakan cmdlet yang sama. Misalnya, perintah berikut akan memungkinkan permintaan CORS dari asal https&#58;//example1.com dan https&#58;//example1.com.

Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com

Catatan

Admin dapat mengizinkan permintaan CORS dari asal mana pun dengan menyertakan "*" dalam daftar asal tepercaya, meskipun pendekatan ini tidak disarankan karena kerentanan keamanan dan pesan peringatan disediakan jika mereka memilih.

Kebijakan Keamanan Konten (CSP)

Header respons keamanan HTTP ini digunakan untuk mencegah skrip lintas situs, pembajakan klik, dan serangan injeksi data lainnya dengan mencegah browser mengeksekusi konten berbahaya secara tidak sengaja. Browser yang tidak mendukung Kebijakan Keamanan Konten (CSP) mengabaikan header respons CSP.

Kustomisasi CSP

Kustomisasi header CSP melibatkan modifikasi kebijakan keamanan yang menentukan sumber daya yang diizinkan dimuat browser untuk halaman web. Kebijakan keamanan default adalah:

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;

Direktif default-src digunakan untuk memodifikasi arahan -src tanpa mencantumkan setiap arahan secara eksplisit. Misalnya, dalam contoh berikut, kebijakan 1 sama dengan kebijakan 2.

Azure Policy 1

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"

Azure Policy 2

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "script-src 'self'; img-src 'self'; font-src 'self';
frame-src 'self'; manifest-src 'self'; media-src 'self';"

Jika direktif secara eksplisit tercantum, nilai yang ditentukan akan mengambil alih nilai yang diberikan untuk default-src. Dalam contoh berikut, img-src mengambil nilai sebagai '*' (memungkinkan gambar dimuat dari asal apa pun) sementara arahan -src lainnya mengambil nilai sebagai 'diri' (membatasi ke asal yang sama dengan halaman web).

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"

Sumber berikut dapat ditentukan untuk kebijakan default-src:

  • 'self' - menentukan sumber ini membatasi asal konten untuk dimuat ke asal halaman web.
  • 'unsafe-inline' - menentukan sumber ini dalam kebijakan memungkinkan penggunaan JavaScript dan CSS sebaris.
  • 'unsafe-eval' - menentukan sumber ini dalam kebijakan memungkinkan penggunaan teks ke mekanisme JavaScript seperti evaluasi.
  • 'none' - menentukan sumber ini membatasi konten dari asal apa pun untuk dimuat.
  • data: - menentukan data: URI memungkinkan pembuat konten menyematkan file kecil sebaris dalam dokumen. Penggunaan tidak disarankan.

Catatan

Layanan Federasi Direktori Aktif menggunakan JavaScript dalam proses autentikasi dan oleh karena itu memungkinkan JavaScript dengan menyertakan sumber 'tidak aman-sebaris' dan 'unsafe-eval' dalam kebijakan default.

Header kustom

Selain header respons keamanan yang tercantum sebelumnya (HSTS, CSP, X-Frame-Options, X-XSS-Protection dan CORS), AD FS 2019 memungkinkan Anda mengatur header baru.

Sebagai contoh, Anda dapat mengatur header baru "TestHeader" dan "TestHeaderValue" sebagai nilai.

Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"

Setelah diatur, header baru dikirim dalam respons Layanan Federasi Direktori Aktif, seperti yang ditunjukkan dalam cuplikan Fiddler berikut:

Screenshot of Fiddler on the headers tab that highlights TestHeader: TestHeaderValue under Miscellaneous.

Kompatibilitas browser web

Gunakan tabel dan tautan berikut untuk menentukan browser web mana yang kompatibel dengan setiap header respons keamanan.

Header Respons Keamanan HTTP Kompatibilitas Browser
HTTP Strict-Transport-Security (HSTS) Kompatibilitas browser HSTS
X-Frame-Options Kompatibilitas browser X-Frame-Options
X-XSS-Protection Kompatibilitas browser X-XSS-Protection
Cross Origin Resource Sharing (CORS) Kompatibilitas browser CORS
Kebijakan Keamanan Konten (CSP) Kompatibilitas browser CSP

Berikutnya