Proses Mode Pengguna Terisolasi (IUM)
Windows 10 memperkenalkan fitur keamanan baru bernama Virtual Secure Mode (VSM). VSM memanfaatkan Hypervisor Hyper-V dan Second Level Address Translation (SLAT) untuk membuat serangkaian mode yang disebut Virtual Trust Levels (VTL). Arsitektur perangkat lunak baru ini menciptakan batas keamanan untuk mencegah proses yang berjalan dalam satu VTL mengakses memori VTL lain. Manfaat isolasi ini mencakup mitigasi tambahan dari eksploitasi kernel sambil melindungi aset seperti hash kata sandi dan kunci Kerberos.
Diagram 1 menggambarkan model tradisional mode Kernel dan kode mode Pengguna yang berjalan di CPU ring 0 dan ring 3, masing-masing. Dalam model baru ini, kode yang berjalan dalam model tradisional dijalankan di VTL0 dan tidak dapat mengakses VTL1 dengan hak istimewa yang lebih tinggi, di mana Kode eksekusi Secure Kernel dan Mode Pengguna Terisolasi (IUM). VTL bersifat hierarkis yang berarti kode apa pun yang berjalan di VTL1 lebih istimewa daripada kode yang berjalan di VTL0.
Isolasi VTL dibuat oleh Hyper-V Hypervisor yang menetapkan memori pada waktu boot menggunakan Second Level Address Translation (SLAT). Ini berlanjut secara dinamis saat sistem berjalan, melindungi memori yang ditentukan Kernel Aman yang membutuhkan perlindungan dari VTL0 karena akan digunakan untuk berisi rahasia. Karena blok memori terpisah dialokasikan untuk dua VTL, lingkungan runtime aman dibuat untuk VTL1 dengan menetapkan blok memori eksklusif ke VTL1 dan VTL0 dengan izin akses yang sesuai.
Diagram 1 - Arsitektur IUM
Trustlets
Trustlets (juga dikenal sebagai proses tepercaya, proses aman, atau proses IUM) adalah program yang berjalan sebagai proses IUM di VSM. Mereka menyelesaikan panggilan sistem dengan marshalling mereka ke kernel Windows yang berjalan di VTL0 ring 0. VSM menciptakan lingkungan eksekusi kecil yang mencakup Kernel Aman kecil yang dijalankan di VTL1 (diisolasi dari kernel dan driver yang berjalan di VTL0). Manfaat keamanan yang jelas adalah isolasi halaman mode pengguna trustlet di VTL1 dari driver yang berjalan di kernel VTL0. Bahkan jika mode kernel VTL0 disusupi oleh malware, ia tidak akan memiliki akses ke halaman proses IUM.
Dengan VSM diaktifkan, lingkungan Otoritas Keamanan Lokal (LSASS) berjalan sebagai trustlet. LSASS mengelola kebijakan sistem lokal, autentikasi pengguna, dan audit saat menangani data keamanan sensitif seperti hash kata sandi dan kunci Kerberos. Untuk memanfaatkan manfaat keamanan VSM, trustlet bernama LSAISO.exe (LSA Isolated) berjalan di VTL1 dan berkomunikasi dengan LSASS.exe yang berjalan di VTL0 melalui saluran RPC. Rahasia LSAISO dienkripsi sebelum mengirimkannya ke LSASS yang berjalan di Mode Normal VSM dan halaman LSAISO dilindungi dari kode berbahaya yang berjalan di VTL0.
Diagram 2 – Desain Trustlet LSASS
Implikasi Mode Pengguna Terisolasi (IUM)
Tidak mungkin untuk melampirkan ke proses IUM, menghambat kemampuan untuk men-debug kode VTL1. Ini termasuk debugging post mortem cadangan memori dan melampirkan Alat Debugging untuk penelusuran kesalahan langsung. Ini juga termasuk upaya oleh akun istimewa atau driver kernel untuk memuat DLL ke dalam proses IUM, untuk menyuntikkan utas, atau mengirimkan APC mode pengguna. Upaya tersebut dapat mengakibatkan destabilisasi seluruh sistem. WINDOWS API yang akan membahayakan keamanan Trustlet mungkin gagal dengan cara yang tidak terduga. Misalnya, memuat DLL ke dalam Trustlet akan membuatnya tersedia di VTL0 tetapi tidak VTL1. QueueUserApc mungkin gagal secara diam-diam jika utas target berada di Trustlet. API lain, seperti CreateRemoteThread, VirtualAllocEx, dan Read/WriteProcessMemory juga tidak akan berfungsi seperti yang diharapkan ketika digunakan terhadap Trustlets.
Gunakan kode sampel di bawah ini untuk mencegah panggilan fungsi apa pun yang mencoba melampirkan atau menyuntikkan kode ke dalam proses IUM. Ini termasuk driver kernel yang mengantre APC untuk eksekusi kode dalam trustlet.
Keterangan
Jika status pengembalian IsSecureProcess berhasil, periksa parameter SecureProcess _Out_ untuk menentukan apakah prosesnya adalah proses IUM. Proses IUM ditandai oleh sistem menjadi "Proses Aman". Hasil Boolean dari TRUE berarti proses target berjenis IUM.
NTSTATUS
IsSecureProcess(
_In_ HANDLE ProcessHandle,
_Out_ BOOLEAN *SecureProcess
)
{
NTSTATUS status;
// definition included in ntddk.h
PROCESS_EXTENDED_BASIC_INFORMATION extendedInfo = {0};
PAGED_CODE();
extendedInfo.Size = sizeof(extendedInfo);
// Query for the process information
status = ZwQueryInformationProcess(
ProcessHandle, ProcessBasicInformation, &extendedInfo,
sizeof(extendedInfo), NULL);
if (NT_SUCCESS(status)) {
*SecureProcess = (BOOLEAN)(extendedInfo.IsSecureProcess != 0);
}
return status;
}
WDK untuk Windows 10, "Windows Driver Kit - Windows 10.0.15063.0", berisi definisi struktur PROCESS_EXTENDED_BASIC_INFORMATION yang diperlukan. Versi struktur yang diperbarui ditentukan dalam ntddk.h dengan bidang IsSecureProcess baru.
typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
SIZE_T Size; // Ignored as input, written with structure size on output
PROCESS_BASIC_INFORMATION BasicInfo;
union {
ULONG Flags;
struct {
ULONG IsProtectedProcess : 1;
ULONG IsWow64Process : 1;
ULONG IsProcessDeleting : 1;
ULONG IsCrossSessionCreate : 1;
ULONG IsFrozen : 1;
ULONG IsBackground : 1;
ULONG IsStronglyNamed : 1;
ULONG IsSecureProcess : 1;
ULONG IsSubsystemProcess : 1;
ULONG SpareBits : 23;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;