Microsoft System Center Yönetim Ailesi

SCCM ile Baseline Remediation – CVE-2013-3900 WinVerifyTrust Signature Validation Zafiyetinin Kapatılması

Merhaba, Microsoft’un System Center Ailesinin üyesi olan SCCM yeni adı ile Microsoft System Center Configuration Manager, patch management yönetim yazılımın çok ötesinde bir üründür.

Bu makalemizde organizasyon içersinde yönettimiz cihazların bilgi güvenliği politikilarımıza uygun olup olmadığını yada güvenlik taramaları sonucunda ortaya çıkan kriktik zafiyetin kapatılması ve sonrasında denetlenmesi gibi işlemlerde nasıl uygulanacağını inceleyeceğiz.

Güncel bir örnek üzerinde gitmek istediğim için son aylarda Microsoft tarafından duyurulan (aslında eski bir zafiyet olan) ve CVE-2013-3900 kodu ile takip edilebilen “WinVerifyTrust Signature Validation” zafiyetinin SCCM ile nasıl kapatılıp sonrasında nasıl denetleyeceğimizi adım adım inceleyeceğiz.

WinVerifyTrust Signature Validation zafiyetine yakından baktığımızda saldırganların sistemin kontrolünü ele geçirmek için Windows Authenticode imzasında bulunan zafiyeti kullandığını görüyoruz. Bu zafiyetin istismarı, sistem üzerinde kod çalıştırma, tam yetki sahibi olma gibi bir çok yetkisiz erişime izin veriyor. Microsoft zafiyet ile ilgili bir Register değirinin girilmesini öneriyor.

Microsoft Windows’un 32 bit sürümleri için

Windows Registry Editor Version 5.00  
[HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Wintrust\Config]   
"EnableCertPaddingCheck"="1"  

Microsoft Windows’un 64 bit sürümleri için

Windows Registry Editor Version 5.00  
[HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Wintrust\Config]   
"EnableCertPaddingCheck"="1"

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config] 
"EnableCertPaddingCheck"="1"

Detaylar için : https://msrc.microsoft.com/update-guide/vulnerability/CVE-2013-3900

Amacımız bu zafiyeti SCCM ile kapatmak, bunun içinde SCCM’in Compliance özelliğini kullanacağız. Compliance özelliğini kullanmak için önce “Client Settings” de “Default Client Setting” ayarını aşağıdaki gibi değiştirmeniz gerekiyor. Eğer siz custom ayarlar kullanıyorsanız yine onlar üzerinde de gerekli değişikliği aşağıdaki gibi yapmanız gerekiyor.

Uygulayacağımız Compliance’lar Powershell scriptler içerdiği için SCCM agentlara Powershell scriptleri sorunsuz çalıştırmaları için “Bypass” yetkisi veriyoruz.

Yeni bir “Configuration Items” oluşturmak ile başlıyoruz.

Ben ismine, zafiyetin CVE ile başlayan kodunu verdim, siz istediğiniz bir hatırlatıcı isim vererbilir siniz.

Mevcut katagorilerin dışında yeni bir katagori oluşturdum.

Tüm işletim sistemlerini seçtim.

Şimdi zafiyeti tespit etmek ve düzeltmek için kurallar eklemeye başlıyoruz.

CVE-2013-3900 zafiyeti özelinde konuşursak Microsoft zafiyetin önüne geçmek için iki adet Registry keyin girilmesini öneriyor. Bu yüzden iki ayrı rule oluşturup gerekli Powershell scriptleri ekleyeceğiz.

Microsoft’un önerisi aşağıdaki Registry keylerin girilmesi yönünde

Windows Registry Editor Version 5.00  
[HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Wintrust\Config]   
"EnableCertPaddingCheck"="1"

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config] 
"EnableCertPaddingCheck"="1"

Şimdi ilk olarak aşağıdaki registry key ile başlıyoruz.

[HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Wintrust\Config]   
"EnableCertPaddingCheck"="1"

Yapmak istediğimiz şu: İlk olarak kontrol etmek, sonrasında istediğimiz kayıtları eklemek. Bu yüzden her bir Register key için iki adet script ekleyeceğiz.

Bunlardan;

ilki “Descovery script” – Sistemde registry key var mı yok mu kontrolü yapacak ?

İkincisi “Remediation script” – Gerekli registry kayıtların girlmesini sağlayacak

İlk olarak “Descovery script” kısmında “Add Script“‘e tıklıyoruz ve Registry key kontrol işlemini yapacak Powershell script’i giriyoruz. İkinci olarak “Remediation script“‘i giriyoruz.

Descovery script

$RegKey = "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config"

$RegValues = Get-Item $RegKey -ErrorAction SilentlyContinue

If ($null -ne $RegValues)
{
    Write-host "Compliant"
}
else 
{
    try 
    {
        $EnableCertPaddingCheck = $RegValues.GetValue('EnableCertPaddingCheck')
    
     }
    catch {}


    If (($null -ne $EnableCertPaddingCheck -or $NoWarningNoElevationOnInstall -eq 1))
    {
        Write-Host "Compliant"
    }
    else 
    {
        Write-Host "Not compliant"    
    }
    
}

Remediation script

 $KeyPath = "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config"
 $ValueName = "EnableCertPaddingCheck"
 $ValueData = "1"
 try{
     Get-ItemProperty -Path $KeyPath -Name $valueName -ErrorAction Stop
 }
 catch [System.Management.Automation.ItemNotFoundException] {
     New-Item -Path $KeyPath -Force
     New-ItemProperty -Path $KeyPath -Name $ValueName -Value $ValueData -Force
 }
 catch {
     New-ItemProperty -Path $KeyPath -Name $ValueName -Value $ValueData -Type String -Force
 }

Bu işlemin ardından aşağıdaki Registry kod için aynı işlemleri yapıyoruz.

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config] 
"EnableCertPaddingCheck"="1"

Descovery script

$RegKey = "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config"

$RegValues = Get-Item $RegKey -ErrorAction SilentlyContinue

If ($null -ne $RegValues)
{
    Write-host "Compliant"
}
else 
{
    try 
    {
        $EnableCertPaddingCheck = $RegValues.GetValue('EnableCertPaddingCheck')
    
     }
    catch {}


    If (($null -ne $EnableCertPaddingCheck -or $NoWarningNoElevationOnInstall -eq 1))
    {
        Write-Host "Compliant"
    }
    else 
    {
        Write-Host "Not compliant"    
    }
    
}

Remediation script

 $KeyPath = "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config"
 $ValueName = "EnableCertPaddingCheck"
 $ValueData = "1"
 try{
     Get-ItemProperty -Path $KeyPath -Name $valueName -ErrorAction Stop
 }
 catch [System.Management.Automation.ItemNotFoundException] {
     New-Item -Path $KeyPath -Force
     New-ItemProperty -Path $KeyPath -Name $ValueName -Value $ValueData -Force
 }
 catch {
     New-ItemProperty -Path $KeyPath -Name $ValueName -Value $ValueData -Type String -Force
 }

Bu işlemin ardından scriptlerimiz hazır hale geliyor.

Sırada “Compliance Rules” oluşturacağız. Aşağıdaki görüldüğü gibi scriptlerimizi sırayla ekliyoruz ve “For the following vules” kısmına Discover scriptle “eğer registry key varsa“‘nın çıktısı olan “Compliant” yazıyoruz. Eğer Discovery script’ın çıktısı “Compliant” olursa “Compline (Uyumlu)” olarak dönüş olacak ve registry keylerin uygulandığını anlayacağız eğer Discover script çıktısı “Compliant” olmazsa “Remediation script” çalışacak ve Registry key’ler sisteme eklenecek.

Evet “Configuration Items” tarafı tamam, sırada “Configuration Baselines” oluşturacağız.

Aşağıdaki gibi isim verdik ve “Configuration Items“‘a tıklayarak az önce oluşturduğumuz “Configuration Items“‘ı seçiyoruz.

Şimdi her şey hazır. Deployment yapabiliriz.

Remediate noncompliant rules when supported” ve “Allow remediation outside the maintenance window” seçiyoruz. Bu seçenekler maintance dışı uygulanmasını sağlıyor. Deploy yapılacak Collection’ı seçiyoruz ve OK ile onaylıyoruz.

Deploy yapıldı.

Client tarafına baktığımızda “Compliance” ayarlarımız geldi. Bir süre sonra uygulanıyor.

Aşağıda görüldüğü gibi Registry keylerimiz sisteme eklendi.

Raporlara baktığımızda başarılı olduğunu görüyoruz. Burada unutmamamız gereken şey bu ayarların aktif olması için sistemin reboot etmeniz gerekiyor.

Bu şekilde organizasyon içerisindeki sistemleri başka senaryolar üreterek denetleyebilir siniz. Faydalı olmadı dileği ile sağlıcakla kalın.

İlgili Makaleler

3 Yorum

  1. Hi Mehmet Sait YILMAZ

    I have followed the same steps which you mentioned in this article but I’m trying to add rule 2 in For the following values mentioning as Compliant but it is showing warning. I’m unable to put as compliant?

    Could you please suggest how can i move forward with this…

    Thanks In advance

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu