Aracılığıyla paylaş


Yalıtılmış Kullanıcı Modu (IUM) İşlemleri

Windows 10, Sanal Güvenli Mod (VSM) adlı yeni bir güvenlik özelliği kullanıma sunulmuştur. VSM, Sanal Güven Düzeyleri (VTL) adlı bir mod kümesi oluşturmak için Hyper-V Hiper Yöneticisi ve İkinci Düzey Adres Çevirisi'ni (SLAT) kullanıyor. Bu yeni yazılım mimarisi, bir VTL'de çalışan işlemlerin başka bir VTL'nin belleğine erişmesini önlemek için bir güvenlik sınırı oluşturur. Bu yalıtımın avantajı, parola karmaları ve Kerberos anahtarları gibi varlıkları korurken çekirdek açıklarından kaynaklanan ek azaltmayı içerir.

Diyagram 1'de sırasıyla CPU halkası 0 ve halka 3'te çalıştırılan geleneksel Çekirdek modu modeli ve Kullanıcı modu kodu gösterilir. Bu yeni modelde, geleneksel modelde çalışan kod VTL0'de yürütülür ve Güvenli Çekirdek ve Yalıtılmış Kullanıcı Modu'nun (IUM) kod yürüttüğü daha yüksek ayrıcalıklı VTL1'e erişemez. VTL'ler hiyerarşiktir, yani VTL1'de çalışan tüm kodlar VTL0'da çalışan kodlardan daha ayrıcalıklıdır.

VTL yalıtımı, İkinci Düzey Adres Çevirisi (SLAT) kullanarak önyükleme zamanında bellek atayan Hyper-V Hiper Yöneticisi tarafından oluşturulur. Sistem çalışırken bu işlemi dinamik olarak sürdürür ve Güvenli Çekirdek'in gizli dizileri içermek için kullanılacağı için VTL0'dan korunmaya ihtiyacı olduğunu belirttiği belleği korur. İki VTL için ayrı bellek blokları ayrıldığından, VTL1 ve VTL0'a uygun erişim izinleriyle özel bellek blokları atanarak VTL1 için güvenli bir çalışma zamanı ortamı oluşturulur.

Diyagram 1 - IUM Mimarisi

diyagram 1 - ium mimarisi

Güvenler

Güvenler (güvenilen işlemler, güvenli işlemler veya IUM işlemleri olarak da bilinir), VSM'de IUM işlemleri olarak çalışan programlardır. Sistem çağrılarını VTL0 ring 0'da çalışan Windows çekirdeğine sıralayarak tamamlar. VSM, VTL1'de yürütülen küçük Güvenli Çekirdeği (VTL0'da çalışan çekirdek ve sürücülerden yalıtılmış) içeren küçük bir yürütme ortamı oluşturur. Net güvenlik avantajı, VTL1'deki trustlet kullanıcı modu sayfalarının VTL0 çekirdeğinde çalışan sürücülerden yalıtılmadır. VTL0 çekirdek modu kötü amaçlı yazılım tarafından ele geçirilse bile IUM işlem sayfalarına erişimi olmaz.

VSM etkinken, Yerel Güvenlik Yetkilisi (LSASS) ortamı bir güvenlet olarak çalışır. LSASS, parola karmaları ve Kerberos anahtarları gibi hassas güvenlik verilerini işlerken yerel sistem ilkesini, kullanıcı kimlik doğrulamasını ve denetimi yönetir. VSM'nin güvenlik avantajlarından yararlanmak için LSAISO.exe (LSA Yalıtılmış) adlı bir güven, VTL1'de çalışır ve bir RPC kanalı üzerinden VTL0'da çalışan LSASS.exe ile iletişim kurar. LSAISO gizli dizileri, VSM Normal Modunda çalışan LSASS'ye gönderilmeden önce şifrelenir ve LSAISO sayfaları VTL0'da çalışan kötü amaçlı kodlardan korunur.

Diyagram 2 – LSASS Trustlet Design

diyagram 2 – lsass trustlet design

Yalıtılmış Kullanıcı Modu (IUM) Etkileri

VTL1 kodunda hata ayıklama özelliğini engelleyerek bir IUM işlemine eklemek mümkün değildir. Bu, bellek dökümlerinde hata ayıklama sonrası hata ayıklamayı ve canlı hata ayıklama için Hata Ayıklama Araçları'nı eklemeyi içerir. Ayrıca, ayrıcalıklı hesapların veya çekirdek sürücülerinin IUM işlemine DLL yükleme, iş parçacığı ekleme veya kullanıcı modu APC teslim etme girişimlerini de içerir. Bu tür girişimler tüm sistemin istikrarsızlaşmasına neden olabilir. Bir Trustlet'in güvenliğini tehlikeye atacak Windows API'leri beklenmeyen yollarla başarısız olabilir. Örneğin, bir DLL'nin bir Trustlet'e yüklenmesi VTL0'de kullanılabilir ancak VTL1'de kullanılamaz. Hedef iş parçacığı bir Trustlet'teyse QueueUserApc sessizce başarısız olabilir. CreateRemoteThread, VirtualAllocEx ve Read/WriteProcessMemory gibi diğer API'ler de Trustlet'lerde kullanıldığında beklendiği gibi çalışmaz.

Bir IUM işlemine kod eklemeye veya eklemeye çalışan işlevleri çağırmayı önlemek için aşağıdaki örnek kodu kullanın. Bu, bir güvenleçteki kodun yürütülmesi için APC'leri kuyruğa alan çekirdek sürücülerini içerir.

Açıklamalar

IsSecureProcess'in dönüş durumu başarılı olursa, işlemin bir IUM işlemi olup olmadığını belirlemek için SecureProcess _Out_ parametresini inceleyin. IUM işlemleri sistem tarafından "Güvenli İşlemler" olarak işaretlenir. TRUE boole sonucu, hedef işlemin IUM türünde olduğu anlamına gelir.

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;
}

Windows 10 için WDK, "Windows Sürücü Seti - Windows 10.0.15063.0", PROCESS_EXTENDED_BASIC_INFORMATION yapısının gerekli tanımını içerir. Yapının güncelleştirilmiş sürümü ntddk.h dosyasında yeni IsSecureProcess alanıyla tanımlanır.

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;