Cara: Mengaktifkan Deteksi Pemutaran Ulang Pesan
Serangan pemutaran ulang terjadi saat penyerang menyalin aliran pesan antara dua pihak dan memutar ulang aliran ke satu atau beberapa pihak. Kecuali dimitigasi, komputer target serangan akan memproses aliran sebagai pesan yang sah, yang mengakibatkan berbagai konsekuensi buruk, seperti pesanan item yang berlebihan.
Untuk informasi selengkapnya tentang deteksi pemutaran ulang pesan, lihat Deteksi Pemutaran Ulang Pesan.
Prosedur berikut menunjukkan berbagai properti yang dapat Anda gunakan untuk mengontrol deteksi pemutaran ulang menggunakan Windows Communication Foundation (WCF).
Untuk mengontrol deteksi pemutaran ulang pada klien menggunakan kode
Buat SecurityBindingElement untuk digunakan dalam CustomBinding. Untuk informasi selengkapnya, lihat Cara: Membuat Pengikatan Kustom Menggunakan SecurityBindingElement. Contoh berikut menggunakan SymmetricSecurityBindingElement yang dibuat dengan CreateKerberosBindingElement dari kelas SecurityBindingElement.
Gunakan properti LocalClientSettings untuk mengembalikan referensi ke kelas LocalClientSecuritySettings dan mengatur salah satu properti berikut, yang sesuai:
DetectReplay
. Nilai Boolean. Ini mengatur apakah klien harus mendeteksi pemutaran ulang dari server. Default adalahtrue
.MaxClockSkew
. Nilai TimeSpan. Mengatur berapa banyak waktu yang dapat ditoleransi oleh mekanisme pemutaran ulang antara klien dan server. Mekanisme keamanan memeriksa stempel waktu yang dikirim dan menentukan apakah itu dikirim terlalu jauh di masa lalu. Defaultnya adalah 5 menit.ReplayWindow
. NilaiTimeSpan
. Ini mengatur berapa lama pesan dapat hidup di jaringan setelah server mengirimkannya (melalui perantara) sebelum mencapai klien. Klien melacak tanda tangan pesan yang dikirim dalamReplayWindow
terbaru untuk tujuan deteksi pemutaran ulang.ReplayCacheSize
. Nilai bilangan bulat. Klien menyimpan tanda tangan pesan dalam cache. Pengaturan ini menentukan berapa banyak tanda tangan yang dapat disimpan cache. Jika jumlah pesan yang dikirim dalam jendela pemutaran ulang terakhir mencapai batas cache, pesan baru ditolak hingga tanda tangan cache terlama mencapai batas waktu. Defaultnya adalah 500.000.
Untuk mengontrol deteksi pemutaran ulang pada layanan menggunakan kode
Buat SecurityBindingElement untuk digunakan dalam CustomBinding.
Gunakan properti LocalServiceSettings untuk mengembalikan referensi ke kelas LocalServiceSecuritySettings, dan atur properti seperti yang dijelaskan sebelumnya.
Untuk mengontrol deteksi pemutaran ulang dalam konfigurasi untuk klien atau layanan
Buat <customBinding>.
Buat elemen
<security>
.Buat <localClientSettings> atau <localServiceSettings>.
Atur nilai atribut berikut, yang sesuai:
detectReplays
,maxClockSkew
,replayWindow
, danreplayCacheSize
. Contoh berikut mengatur atribut elemen<localServiceSettings>
dan<localClientSettings>
:<customBinding> <binding name="NewBinding0"> <textMessageEncoding /> <security> <localClientSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <localServiceSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <secureConversationBootstrap /> </security> <httpTransport /> </binding> </customBinding>
Contoh
Contoh berikut membuat SymmetricSecurityBindingElement menggunakan metode CreateKerberosBindingElement, dan mengatur properti pemutaran ulang pengikatan.
private SecurityBindingElement CreateSymmetricBindingForClient()
{
SymmetricSecurityBindingElement b = SecurityBindingElement.CreateKerberosBindingElement();
b.LocalClientSettings.DetectReplays = true;
b.LocalClientSettings.MaxClockSkew = new TimeSpan(0, 3, 0);
b.LocalClientSettings.ReplayWindow = new TimeSpan(0, 2, 0);
b.LocalClientSettings.ReplayCacheSize = 10000;
return b;
}
Private Function CreateSymmetricBindingForClient() As SecurityBindingElement
Dim b = SecurityBindingElement.CreateKerberosBindingElement()
With b.LocalClientSettings
.DetectReplays = True
.MaxClockSkew = New TimeSpan(0, 3, 0)
.ReplayWindow = New TimeSpan(0, 2, 0)
.ReplayCacheSize = 10000
End With
Return b
End Function
Cakupan Pemutaran Ulang: Keamanan Pesan Saja
Perhatikan bahwa prosedur berikut ini hanya berlaku untuk mode keamanan Pesan. Untuk mode Transportasi dan Transportasi dengan Kredensial Pesan, mekanisme transportasi mendeteksi pemutaran ulang.
Catatan Percakapan Aman
Untuk pengikatan yang mengaktifkan percakapan aman, Anda dapat menyesuaikan pengaturan ini baik untuk saluran aplikasi maupun untuk pengikatan bootstrap percakapan yang aman. Misalnya, Anda dapat menonaktifkan pemutaran ulang untuk saluran aplikasi tetapi mengaktifkannya untuk saluran bootstrap yang membuat percakapan aman.
Jika Anda tidak menggunakan sesi percakapan yang aman, deteksi pemutaran ulang tidak menjamin mendeteksi pemutaran ulang dalam skenario farm server dan kapan proses didaur ulang. Ini berlaku untuk pengikatan yang disediakan sistem berikut:
WSHttpBinding dengan properti EstablishSecurityContext diatur ke
false
.
Mengompilasi Kode
Namespace berikut diperlukan untuk mengompilasi kode: