Menggunakan Enkripsi untuk Melindungi Kata Sandi

oleh Saad Ladki

Pengantar

Dokumen ini memberikan gambaran umum tentang langkah-langkah yang diperlukan untuk mengatur kumpulan aplikasi dan isolasi proses pekerja untuk server IIS 7.0 ke atas. Isolasi kumpulan aplikasi memerlukan perlindungan data yang perlu diakses WAS (proses sistem lokal IIS). Contoh data ini adalah kata sandi kumpulan aplikasi. Di sisi lain, isolasi proses pekerja memerlukan perlindungan data yang perlu diakses oleh identitas kumpulan aplikasi. Contoh data ini adalah kata sandi akun pengguna anonim.

Prasyarat

Untuk membantu menyederhanakan proses ini, disediakan dua bagian kode sampel yang:

  • Buat penyedia enkripsi RSA baru di machine.config.
  • Atur nama penyedia default di machine.config.

Bagian prasyarat akhir memandu Anda dalam menyiapkan empat akun Pengguna yang akan digunakan dalam topik selanjutnya.

Membuat Aplikasi Penyedia Enkripsi RSA Baru

  1. Buka Windows Notepad dan buat file di direktori pilihan Anda bernama createProvider.cs yang berisi kode C# berikut:

    using System;
    using Microsoft.Web.Administration;
    using System.Configuration;
    
    namespace testingEncryption
    {   
        public class createProvider   
        {
            public static void Main(string[] args)
            {
                String keyContainerName = args[0];
                String description = args[1];
                String providerName = args[2];
                System.Configuration.Configuration machineConfig =
                System.Configuration.ConfigurationManager.OpenMachineConfiguration();
                System.Configuration.ProviderSettings settings =
                    new System.Configuration.ProviderSettings(providerName,
                    "System.Configuration.RsaProtectedConfigurationProvider,
                    System.Configuration,
                    Version=2.0.0.0, Culture=neutral,
                    PublicKeyToken=b03f5f7f11d50a3a");
                settings.Parameters["description"] = description;
                settings.Parameters["keyContainerName"] = keyContainerName;
                settings.Parameters["cspProviderName"] = String.Empty;
                settings.Parameters["useMachineContainer"] = "true";
                settings.Parameters["useOAEP"] = "false";
                settings.Parameters["name"] = providerName;
                ProtectedConfigurationSection pcSection =
                    (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection ("configProtectedData");
                pcSection.Providers.Add(settings);
                machineConfig.Save();
            }
        }
    }
    
  2. Selanjutnya, luncurkan prompt perintah yang ditingkatkan:

    • Klik menu Mulai .
    • Klik kanan Prompt Perintah.
    • Pilih Jalankan sebagai administrator.
  3. Di jendela prompt perintah, navigasikan ke lokasi tempat Anda menyimpan file createProvider.cs dan jalankan perintah berikut untuk mengkompilasi kode Anda:
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs

Langkah ini sekarang selesai.

Membuat Aplikasi untuk Mengubah Penyedia Default

  1. Buka Windows Notepad dan buat file di direktori pilihan Anda bernama setProvider.cs yang berisi kode C# berikut:

    using System;
    using Microsoft.Web.Administration;
    using System.Configuration;
    namespace testingEncryption 
    {
        public class setProvider
        {
            public static void Main(string[] args)
            {
                String provider = args[0];  // example: DataProtectionConfigurationProvider
                System.Configuration.Configuration machineConfig =
                    System.Configuration.ConfigurationManager.OpenMachineConfiguration();
                ProtectedConfigurationSection pcSection =
                    (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection("configProtectedData");
                string oldEncryptionProviderName = pcSection.DefaultProvider;
                Console.WriteLine("The default provider is currently: " + oldEncryptionProviderName);
                Console.WriteLine("Changing the default provider to: " + provider);
                pcSection.DefaultProvider = provider;
                machineConfig.Save();
            }
        }
    }
    
  2. Selanjutnya, luncurkan prompt perintah yang ditingkatkan:

    • Klik menu Mulai .
    • Klik kanan Prompt Perintah.
    • Pilih Jalankan sebagai administrator.
  3. Di prompt perintah Jendela navigasi ke lokasi Anda menyimpan file setProvider.cs dan jalankan perintah berikut untuk mengkompilasi kode Anda:
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs

Langkah ini sekarang selesai.

Membuat Akun Pengguna

Dalam langkah ini, kami membuat empat akun pengguna baru yang akan digunakan di seluruh dokumen ini.

Untuk memulai, buka Jendela shell perintah yang berjalan di bawah hak administratif menggunakan langkah-langkah berikut:

  1. Klik menu Mulai .
  2. Klik kanan Prompt Perintah.
  3. Pilih Jalankan sebagai administrator.
  4. Di jendela perintah, jalankan perintah berikut:
net user /add AppPoolIdentity1 password1
   net user /add AppPoolIdentity2 password2
   net user /add AnonymousAccount1 password3
   net user /add AnonymousAccount2 password

Langkah ini sekarang selesai.

Isolasi Kumpulan Aplikasi

IIS memiliki proses yang disebut WAS yang berjalan di bawah konteks LOCALSYSTEM dan merupakan satu-satunya proses yang membutuhkan akses ke kata sandi kumpulan aplikasi. Dalam tugas ini, kami:

  • Buat kunci RSA baru (iisWasKey) yang hanya dapat diakses oleh LOCALSYSTEM dan Administrator. Kunci ini akan digunakan untuk mengenkripsi kata sandi setiap kumpulan aplikasi.
  • Buat dua kumpulan aplikasi.
  • Konfigurasikan masing-masing kumpulan aplikasi ini untuk berjalan di bawah identitas yang berbeda dan enkripsi kata sandinya menggunakan iisWasKey.
  • Batasi izin sistem file NTFS pada file kunci sehingga hanya SISTEM dan Administrator yang memiliki akses.

Buat Kunci RSA Baru

  1. Klik menu Mulai .
  2. Klik kanan pada Prompt Perintah.
  3. Pilih Jalankan sebagai administrator.
  4. Di jendela perintah navigasikan ke tempat Anda menyimpan createProvider.exe dan jalankan perintah berikut:
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS

Verifikasi bahwa perubahan ini terjadi dengan benar. Buka Anda %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config menggunakan Windows Notepad dan verifikasi baris ke bagian ada untuk penyedia baru:

keyContainerName="NetFrameworkConfigurationKey" cspProviderName=""
useMachineContainer="true" useOAEP="false" name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,

Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
useMachineProtection="true" keyEntropy="" name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

cspProviderName="" useMachineContainer="true" useOAEP="false"
name="Rsa_WAS"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Mengenkripsi Kata Sandi Kumpulan Aplikasi

Secara default, setiap kali properti dienkripsi, IIS menggunakan defaultProvider untuk enkripsi yang ditentukan dalam machine.config. Nilai default untuk ini adalah RsaProtectedConfigurationProvider.

Dalam langkah ini, kami menggunakan aplikasi setProvider.exe yang dibuat sebelumnya untuk mengubah penyedia ke iisWasKey lalu menggunakan Manajer IIS untuk mengubah kata sandi:

  1. Klik menu Mulai .
  2. Klik kanan pada Prompt Perintah.
  3. Pilih Jalankan sebagai administrator.
  4. Di jendela perintah navigasikan ke tempat Anda menyimpan setProvider.exe dan jalankan perintah berikut:
setProvider.exe Rsa_WAS

Penyedia default Rsa_WAS telah berhasil diubah.

Buat Kumpulan Aplikasi Baru

Dalam langkah ini, kami membuat dua kumpulan aplikasi baru yang kami isolasi satu dengan yang lain. Untuk melakukannya, luncurkan Manajer IIS:

  1. Klik Mulai, dan ketik 'INetMgr.exe' dan tekan Enter (jika diminta, pilih Lanjutkan untuk meningkatkan izin Anda).

  2. Klik tombol di + samping nama komputer Anda di bagian Koneksi .

  3. Klik Kumpulan Aplikasi.

  4. Pilih tugas di sebelah kanan berjudul Tambahkan Kumpulan Aplikasi.

  5. Masukkan Nama 'AppPool1' lalu tekan OK seperti yang ditunjukkan:

    Cuplikan layar kotak dialog Tambahkan Kumpulan Aplikasi dengan fokus pada opsi O K.

  6. Ulangi langkah-langkah sebelumnya tetapi kali ini gunakan nama AppPool2.

  7. Sekarang Anda melihat layar berikut dalam IIS:
    Cuplikan layar Kumpulan Aplikasi memperlihatkan daftar kumpulan aplikasi di server.

  8. Perhatikan bagaimana identitas untuk AppPool1 dan AppPool2 adalah NetworkService. Kami akan mengubah ini menjadi akun yang kami buat sebelumnya dengan mengklik kanan AppPool1 dan kemudian memilih Pengaturan Tingkat Lanjut

  9. Di bawah judul Model Proses:

    • Klik tombol di sebelah kanan kata Identitas.

    • Di jendela Identiy Kumpulan Aplikasi pilih tombol radio "Akun kustom" dan klik "Atur..." Tombol.

    • Masukkan nama pengguna dan kata sandi berikut dalam dialog Atur Kredensial .

      nama pengguna: AppPoolIdentity1
      kata sandi: password1

      Cuplikan layar dialog Atur Kredensial, memperlihatkan bidang Nama pengguna, Kata Sandi, dan Konfirmasi kata sandi.

  10. Sekarang nilai Identitas akan muncul seperti yang ditunjukkan di bawah ini:

    Cuplikan layar kotak dialog Pengaturan Tingkat Lanjut dengan nilai Identitas disorot di bagian Model Proses.

  11. Klik OK untuk menyimpan perubahan.

  12. Ulangi langkah sebelumnya untuk AppPool2 dan beri nama pengguna "AppPoolIdentity2" dan kata sandi "password2".

  13. Anda melihat hal-hal berikut yang ditampilkan di Manajer IIS (terutama Identitas untuk kumpulan aplikasi telah berubah):

    Cuplikan layar Kumpulan Aplikasi memperlihatkan identitas yang diubah untuk kumpulan aplikasi.

  14. Verifikasi perubahan dengan menggunakan Windows Notepad dan buka %SystemRoot%\System32\Inetsrv\applicationHost.config file. Navigasi ke bagian applicationPools dan Anda melihat bahwa kami mengenkripsi kata sandi kumpulan aplikasi menggunakan kunci Rsa_WAS seperti yang dimaksudkan:

    password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAAUkBfhWFbUHIt/qtlo+P7CiZC10r9H0DGBvAl
                 U2mhiOxMoHXX6Dz0S8TQjKx2YTKvuE8y+SBUWrEs3JYzXKOkY45Q9z6E/3BFvru5oR9uzbjInASKF/83N
                 N1tIEsoorQWmUOjnL4XM9RNzpqkY6TgyC3CyPUGN9fR7li5+AUupHHfgVPMzcLHfCsoq+ri+X6IbEnJdu
                  cUEAYBn1P9F/Zxk=:enc]" />
                  password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAEbQEa/sAmyLbryAR0hD3voip2+0RfzM44sXPekp
                  I2H7HYLzta55NfLcG8vSPHhasahKVgO4wcIcT03CLSn+5koWvAaIRdeClhXWK/X8ZQPFooOpyhOqT0TEP5v
                  jB+DXAKgq0RC6ufHFtrHMy0U69ew7/49YXEcrkF+o8OJZ1K+EkgA3J2ikHKxW0pFBU0tFvLCjt2/UXypfNI
                  0hYPe2syk=:enc]" />
    

Mengunci Penyedia Enkripsi

Secara default, IIS_IUSRS diberikan akses baca ke kunci saat dibuat. Namun, Anda dapat menggunakan alat ASPNET_REGIIS untuk menghapus akses tersebut. Untuk melakukannya, jalankan perintah berikut dari prompt perintah yang ditingkatkan:

cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS

Ini menghapus IIS_IUSRS (grup identitas kumpulan aplikasi) agar tidak dapat membaca iisWasKey yang hanya ditujukan untuk akses Administrator dan LOCALSYSTEM.

Isolasi Proses Pekerja

Topik ini memberi tahu cara menyiapkan isolasi proses pekerja dengan membuat dua situs baru yang merupakan bagian dari kumpulan aplikasi yang berbeda dan memiliki identitas autentikasi anonim yang berbeda. Kami kemudian membuat penyedia RSA baru untuk setiap kumpulan aplikasi untuk mengenkripsi kata sandi anonim.

Buat Situs Baru

Di bagian ini, kami membuat dua situs baru dan menambahkan setiap situs ke kumpulan aplikasi yang kami buat sebelumnya. Untuk memulai, buka shell perintah yang berjalan di bawah hak administratif menggunakan langkah-langkah berikut:

  1. Klik menu Mulai .

  2. Klik kanan Prompt Perintah.

  3. Pilih Jalankan sebagai administrator.

  4. Di jendela perintah, navigasikan ke direktori wwwroot Anda menggunakan perintah berikut:

    cd /d %SystemDrive%\inetpub\wwwroot
    
  5. Buat direktori baru bernama "satu" dan direktori "dua" menggunakan perintah berikut:

    mkdir one
    
    mkdir two
    
  6. Buat file Default.htm dasar di direktori "satu" dan "dua" yang berisi kode HTML berikut:

    <html><body>Hello from site X</body></html>
    

    Catatan

    Ganti 'X' dengan 'satu' atau 'dua' tergantung pada lokasi direktori file.

Sekarang gunakan manajer IIS untuk membuat dua situs:

  1. Klik Mulai, ketik INetMgr.exe dan tekan Enter (jika diminta, pilih Lanjutkan untuk meningkatkan izin Anda).

  2. Klik tombol di + samping nama komputer Anda di bagian Koneksi .

  3. Klik kanan Situs dalam tampilan pohon di bawah Koneksi lalu pilih Tambahkan Situs Web.

  4. Gunakan informasi berikut untuk membuat situs Anda:

    Nama Situs Web: Satu
    Kumpulan Aplikasi: AppPool1
    Jalur Fisik: {lokasi direktori inetpub Anda}\wwwroot\one
    Port: 81

    Ini akan terlihat seperti berikut ini ketika selesai:

    Cuplikan layar dialog Tambahkan Situs Web dengan bidang Nama situs sedang diisi oleh entri Satu.

  5. Klik OK untuk menyimpan perubahan apa pun.

  6. Ulangi dua langkah sebelumnya tetapi kali ini gunakan informasi berikut untuk situs kedua:

    Nama Situs Web: Dua
    Kumpulan Aplikasi: AppPool2
    Jalur Fisik: {lokasi direktori inetpub Anda}\wwwroot\two
    Port: 82

Anda sekarang telah membuat dua situs baru bernama Satu dan Dua, dan menambahkannya ke kumpulan aplikasi AppPool1 dan AppPool2 .

URL untuk menguji situs Anda adalah:

  • http://localhost:81 untuk situs Satu
  • http://localhost:82 untuk situs Dua

Membuat Penyedia Baru untuk Setiap Kumpulan Aplikasi

Di bagian ini, kami membuat penyedia RSA baru untuk setiap kumpulan aplikasi:

  1. Klik menu Mulai.

  2. Klik kanan Prompt Perintah.

  3. Pilih Jalankan sebagai administrator.

  4. Di jendela perintah jalankan, navigasikan ke tempat Anda menyimpan createProvider.exe dan jalankan perintah berikut:

    createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1
    createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
    

Mengatur Akun Anonim untuk Site One

Di Jendela prompt perintah yang ditingkatkan, jalankan perintah berikut:

setProvider.exe Rsa_app1
  1. Kembali ke Manajer IIS dan klik dua kali situs Satu.

  2. Klik dua kali item Autentikasi di bawah judul Nama Fitur .

  3. Pilih Autentikasi Anonim lalu klik Edit di bawah judul Tugas di sisi kanan yang memunculkan kotak dialog Edit Kredensial Autentikasi Anonim .

  4. Klik opsi Pengguna Tertentu lalu klik tombol Atur .

  5. Masukkan nama pengguna AnonymousAccount1 dan kata sandi3 dan pilih OK.

  6. Ini memunculkan kotak dialog berikut:

    Cuplikan layar kotak dialog Edit Kredensial Autentikasi Anonim.

  7. Tekan OK untuk menyimpan perubahan Anda.

Mengatur Akun Anonim untuk Situs Dua

Di Jendela prompt perintah yang ditingkatkan, jalankan perintah berikut:

setProvider.exe Rsa_app2
  1. Kembali ke Manajer IIS dan klik dua kali di situs Dua.
  2. Klik dua kali item Autentikasi di bawah judul Nama Fitur .
  3. Pilih Autentikasi Anonim lalu klik Edit di bawah judul Tugas di sisi kanan yang memunculkan kotak dialog EditKredensial Anonim .
  4. Klik opsi Pengguna Tertentu dan klik Atur.
  5. Masukkan nama pengguna AnonymousAccount2 dan password4 dan pilih OK.
  6. Klik OK untuk menyimpan perubahan.

Mengatur ulang Penyedia Enkripsi ke Default

  • Kembali ke Jendela prompt perintah yang ditingkatkan dan jalankan perintah berikut:
setProvider.exe RsaProtectedConfigurationProvider

Catatan

Perubahan ini memastikan bahwa semua properti terenkripsi di masa mendatang menggunakan penyedia enkripsi default.

Memverifikasi Perubahan

Verifikasi bahwa apa yang kita inginkan telah terjadi. Menggunakan Windows Notepad, buka %SystemRoot%\System32\Inetsrv\applicationHost.config file:

  • Perhatikan bahwa kata sandi untuk AppPool1 dan AppPool2 keduanya masih dilindungi dengan kunci Rsa_Was .

  • Perhatikan bahwa kata sandi untuk AnonymousAccount1 juga dilindungi dengan kunci Rsa_app1 :

    password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f
        gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu
        x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
    
  • Terakhir, perhatikan bahwa kata sandi AnonymousAccount2 juga dilindungi dengan kunci Rsa_app2 :

    password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl
     sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c
       Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
    

Mengunci Penyedia Enkripsi

Amankan izin file untuk kunci kami, seperti yang dilakukan sebelumnya, di atas. Jalankan perintah berikut dari prompt perintah yang ditingkatkan:

cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr App1Key IIS_IUSRS
aspnet_regiis.exe -pa App1Key   AppPoolIdentity1
aspnet_regiis.exe -pr App2Key IIS_IUSRS
aspnet_regiis.exe -pa App2Key   AppPoolIdentity2

Perintah ini telah menghapus kemampuan IIS_IUSRS untuk membaca kunci dan hanya menambahkan identitas kumpulan aplikasi yang memerlukan izin akses ke kunci.

Menguji Situs Anda

Sekarang uji situs Anda:

  • http://localhost:81
  • http://localhost:82

Semuanya harus terus bekerja seperti sebelumnya.

Ringkasan

Singkatnya, kami melakukan tugas-tugas berikut untuk mengamankan pengaturan kumpulan aplikasi:

  • Membuat dua kumpulan aplikasi
  • Membuat dua akun pengguna lokal dan mengonfigurasinya sebagai identitas kumpulan aplikasi
  • Kami membuat kunci enkripsi Administrasi dan menggunakannya untuk melindungi semua kata sandi identitas kumpulan aplikasi
  • Kami menggunakan ASPNET_REGIIS untuk menghapus IIS_IUSRS (grup identitas kumpulan aplikasi) agar tidak mengakses kunci

Tugas-tugas ini secara efektif memastikan bahwa hanya Administrator dan akun SYSTEM yang dapat membaca kata sandi untuk kumpulan aplikasi. Oleh karena itu, jika aplikasi dalam kumpulan aplikasi mencoba mengambil kata sandi untuk kumpulan aplikasi (atau apa pun), upaya tersebut akan gagal.

Untuk mengisolasi pengaturan proses pekerja, kami:

  • Membuat akun identitas anonim baru
  • Kami membuat penyedia baru untuk kumpulan aplikasi
  • Kami mengenkripsi kata sandi autentikasi anonim dengan kunci kumpulan aplikasi
  • Kami menghapus akses ke penyedia autentikasi anonim untuk IIS_IUSRS dan memberikan akses hanya ke identitas kumpulan aplikasi

Ini secara efektif memastikan bahwa identitas kumpulan aplikasi dapat mendekripsi kata sandi anonim miliknya juga dan tidak ada orang lain.