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.

Note

Fungsionalitas untuk menyesuaikan header respons keamanan HTTP (kecuali header CORS) dengan menggunakan cmdlet: Get-AdfsResponseHeaders dan Set-AdfsResponseHeaders telah diporting kembali ke AD FS 2016. Anda dapat menambahkan fungsionalitas ke Layanan Federasi Direktori Aktif 2016 dengan menginstal KB4493473 dan KB4507459.

Artikel ini membahas header respons keamanan yang sering digunakan untuk menunjukkan cara menyesuaikan header yang dikirim oleh AD FS 2019.

Note

Artikel ini mengasumsikan bahwa Anda telah menginstal AD FS 2019.

Scenarios

Skenario berikut memperlihatkan kebutuhan admin untuk 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 lintas situs. Namun, mereka perlu mengkustomisasi header untuk memungkinkan halaman dimuat setelah disanitasi.
  • Administrator perlu mengaktifkan Cross Origin Resource Sharing (CORS), dan mereka perlu mengatur asal (domain) di Layanan Federasi Direktori Aktif untuk memungkinkan aplikasi halaman tunggal mengakses API web dari domain lain.
  • Administrator mengaktifkan header Kebijakan Keamanan Konten (CSP) untuk mencegah skrip lintas situs dan serangan injeksi data dengan melarang permintaan lintas domain apa pun. 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

AD FS menyertakan header respons di dalam respons HTTP yang keluar yang dikirimkan ke browser web. Anda dapat mencantumkan header dengan menggunakan cmdlet Get-AdfsResponseHeaders seperti yang ditunjukkan pada cuplikan layar berikut.

Cuplikan layar yang memperlihatkan output PowerShell dari 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 AD FS mencakup 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 AD FS 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:

  • usia maks=<kedaluwarsa>. 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"

Example:

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

AD FS secara default tidak mengizinkan aplikasi eksternal menggunakan iFrames saat melakukan masuk interaktif. Konfigurasi ini mencegah gaya serangan phishing tertentu. Masuk non-interaktif dapat dilakukan melalui iFrame karena keamanan tingkat sesi yang telah ditetapkan sebelumnya.

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

Header respons keamanan HTTP ini digunakan untuk menginformasikan kepada browser apakah halaman dapat dirender dalam sebuah frame <atau dalam sebuah iframe>/<>. Header dapat diatur ke salah satu nilai berikut:

  • deny. 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.
  • izinkan dari 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.

KustomisasiFrame-Options X

Secara bawaan, header diatur untuk ditolak; namun, admin dapat memodifikasi nilai melalui cmdlet Set-AdfsResponseHeaders.

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

Example:

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 disarankan.
  • 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.

KustomisasiXSS-Protection X

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

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

Example:

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 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 menggambarkan contoh di mana aplikasi halaman tunggal (SPA) perlu memanggil API web dengan domain yang berbeda. Selanjutnya, pertimbangkan bahwa SPA dan API dikonfigurasi pada AD FS 2019 dan AD FS telah mengaktifkan CORS. Layanan Federasi Direktori Aktif dapat mengidentifikasi header CORS dalam permintaan HTTP, memvalidasi nilai-nilai pada header, dan menyertakan header CORS yang sesuai dalam respons. Untuk detail tentang cara mengaktifkan dan mengonfigurasi CORS pada AD FS 2019, lihat bagian Kustomisasi CORS. Contoh alur berikut akan membimbing 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 AD FS 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.

    Note

    Permintaan CORS menyerupai 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. AD FS kemudian merespons dengan header berikut:

    • Access-Control-Allow-Origin - nilai yang 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 tajuk yang disertakan dalam tajuk 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. Dimasukkannya 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 cmdlet Set-AdfsResponseHeaders.

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

Note

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.

Kebijakan 1

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

Kebijakan 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 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 secara langsung.
  • '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.

Note

AD FS menggunakan JavaScript dalam proses autentikasi dan oleh karena itu mengaktifkan JavaScript dengan menyertakan sumber 'unsafe-inline' dan 'unsafe-eval' dalam kebijakan default.

Header kustomisasi

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 AD FS, seperti yang ditunjukkan dalam cuplikan Fiddler berikut:

Cuplikan layar Fiddler pada tab header yang menyoroti TestHeader: TestHeaderValue di bawah Lain-lain.

Kompatibilitas browser web

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

Header Keamanan Respons HTTP Kompatibilitas Browser
HTTP Strict-Transport-Security (HSTS) kompatibilitas browser HSTS
X-Frame-Options X-Frame-Options kompatibilitas browser
X-XSS-Protection Kompatibilitas browserXSS-Protection X-
Berbagi Sumber Daya Lintas Asal (CORS) Kompatibilitas CORS browser
Kebijakan Keamanan Konten (CSP) kompatibilitas browser CSP

Next