Exchange Server

CVE-2023-23397 Zafiyetini Tespit Etmek için MS Script ile Denetim Nasıl Yapılır?

Merhaba, Microsoft Outlook zafiyeti olarak bilinen CVE-2023-23397 güvenlik açığı tüm Outlook sürümlerini etkilerken exploit kodu yayınlanmış ve etkisinide günden güne göstermeye devam etmekte.

Portalımızda zafiyet için bir rehber yayınlanmış ve haberini daha önce yapmıştık.

Kritik “Microsoft Outlook (CVE-2023-23397)” Zafiyeti Ve Alınması Gereken Önlemler

Microsoft alınması gereken tedbirler arasında zafiyetten etkilenen kullanıcı postalarını tespit etmek için bir script yayınladı.

Şimdi sizler ile bu scriptin nasıl kullanıldığına ve zafiyet taramasının nasıl yapıldığını beraber inceleyeceğiz.

İlk olarak https://microsoft.github.io/CSS-Exchange/Security/CVE-2023-23397/ adresinden scripti indiriyoruz ve Exchange sunucumuz üzerinde bir klasör açıyor içine kopyalıyoruz.

İkici olarak “Windows PowerShell ISE”‘i açıyoruz. Bu scriptin adını “CVE-2023-23397_hazirlik.ps1” yapıyoruz.

Exchange komutları ile işlem yapacağımızdan kullandığımız Excahnge versiyonuna göre konsolu yüklüyoruz.

Exchange Server 2013, 2016, 2019

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Exchange Server 2010

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

Exchange Server 2007

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

Tüm mailbox kullanıcılarını bir csv dosyasına export ediyoruz. Burada önemi nokta “$batchSize = 500000” değişkeni, bu değişken mailbox kullanıcılarını export ederken csv dosyalarını kaçar KB’lık dosyalar halinde kaydedeceğini belirtiyor. Benim denemelerimde parçalara bölme sırasında hatalar ile karşılaştım. Bu yüzden bu boyutu yüksel vererek tüm mailboxları tek bir dosya şeklinde export edilmesini sağladım.

$batchSize = 500000; $batchNumber = 1; $count = 0; Get-Mailbox -ResultSize Unlimited | Select PrimarySmtpAddress | % {
  if ($count++ -ge $batchSize) { $batchNumber++; $count = 0; }
  Export-Csv -InputObject $_ -Path "Batch$batchNumber.csv" -Append
}

Şu anda powershell dosyamın son grörünümü aşağıdaki gibi. Bu komutları sırasıyla çalıştırarak, tüm mailbox hesaplarını export etmeye başlıyoruz.

Aşağıda görüldüğü gibi export işlemi başladı.

Export işlemi bitince bazı rol ve atama işlemerine ihtiyacımız var. Aşağıdaki komut satırı yeni role grubu oluşturup “ApplicationImpersonation” rolü atanıyoruz ( On-Premises için )

New-RoleGroup -Name "CVE-2023-23397-Script" -Roles "ApplicationImpersonation" -Description "Permission to run the CVE-2023-23397 script"

İkinici komut aşağıdaki gibi. Bu komut az önce oluşturduğumuz gruba scipti çalıştaracak olan kullanıcıyı eklemeye yarıyor.

Add-RoleGroupMember -Identity "CVE-2023-23397-Script" -Member "Scripti çalıştıracak olan kullanıcı buraya yazılır"

Aşağıdaki komut seti il yeni bir “ThrottlingPolicy” policy ekiyoruz. Throttling değerleri bir Exchange sunucusunun mesajları kabul etme ve iletme zamanlarında Exchange Server üzerinde aşırı yüklenmenin önüne geçmek için yapılandırılır. Asıl amaç Microsoft Exchange Server üzerinde hizmet kesintisini önlemek olsa bile derin düşünüldüğü zaman güvenlik problemlerinin de önüne geçmek için oluşturulmuş değerlerdir.

Aşağıdaki komut seti işlem sırasında her hangi bir limite takılmamak için yapıyoruz.

Not : Scripti çalıştıracak olan kullanıcının posta kutusu olması gerekiyor.


New-ThrottlingPolicy "CVE-2023-23397-Script"

Set-ThrottlingPolicy "CVE-2023-23397-Script" -EWSMaxConcurrency Unlimited -EWSMaxSubscriptions Unlimited -CPAMaxConcurrency Unlimited -EwsCutoffBalance Unlimited -EwsMaxBurst Unlimited -EwsRechargeRate Unlimited

Set-Mailbox -Identity "Scripti çalıştıracak olan kullanıcı buraya yazılır" -ThrottlingPolicy "CVE-2023-23397-Script"

Bu işlemlerin ardından hazır hale geliyor.

Tespit etmek için:

Online için:

Import-Csv .\"Export ettiğimiz csv dosyasını yazıyoruz" | .\CVE-2023-23397.ps1 -Environment Online

Exchange Online’daki tüm mailboxları denetlemek için

Get-EXOMailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment "Online"

Onprem için:

Import-Csv .\"Export ettiğimiz csv dosyasını yazıyoruz" | .\CVE-2023-23397.ps1 -Environment Onprem

On-prem tüm mailboxları denetlemek için

Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment Onprem

Scripti çalıştırdığınızda aşağıdaki hatayı alabilirsiniz.

Bu sorunu çözmek için buradan paketi indirip lib klarünü scriptin olduğu klasöre kopyalayınız. Son görünüm aşağıdaki gibi.

Sonrasında mevcut komut setini aşağıdaki gibi çalıştırıyoruz.

Online için:

Import-Csv .\Batch1.csv | .\CVE-2023-23397.ps1 -Environment Online -DLLPath .\lib\40\Microsoft.Exchange.WebServices.dll 

Onprem için:

$cred=Get-Credential 

Get-Mailbox -ResultSize Unlimited | Select PrimarySmtpAddress  | .\CVE-2023-23397.ps1 -IgnoreCertificateMismatch -Environment Onprem -DLLPath .lib\40\Microsoft.Exchange.WebServices.dll -Credential $cred -EWSServerURL 'https://localhost/ews/exchange.asmx' -UseSearchFolders

Aşağıdaki gibir hata alırsanız aşağıdaki komutu deneyebilir siniz.

PS C:\> Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment Onprem -EWSExchange2013

Scripti çalıştırdıktan sonra eğer zafiyet içeren bir mailbox varsa listeleyecek.

İşlemlerinden sonra sıra temizlemeye geliyor. Temizleme işlemi için ilk önce listelenen mailboxları “csv” olarak kaydediyoruz ve aşağıdaki komutları çalıştırıyoruz.

Temizlemek için:

Online için:

Aşağıdaki komut seti, epostaları temizliyor.

\CVE-2023-23397.ps1 -Environment "Online" -CleanupAction ClearProperty -CleanupInfoFilePath <Path to modified CSV>

Aşağıdaki komut seti, epostaları temizliyor.

.\CVE-2023-23397.ps1 -Environment "Online" -CleanupAction ClearItem -CleanupInfoFilePath <Path to modified CSV>

Onprem için:

Aşağıdaki komut seti, epostaları temizliyor.

.\CVE-2023-23397.ps1 -Environment Onprem -DLLPath .lib\40\Microsoft.Exchange.WebServices.dll -Credential $cred -EWSServerURL 'https://localhost/ews/exchange.asmx' -CleanupAction ClearProperty -CleanupInfoFilePath '.\AuditResults.csv'

Aşağıdaki komut seti, epostaları temizliyor.

.\CVE-2023-23397.ps1 -Environment Onprem -DLLPath .lib\40\Microsoft.Exchange.WebServices.dll -Credential $cred -EWSServerURL 'https://localhost/ews/exchange.asmx' -CleanupAction ClearItem -CleanupInfoFilePath '.\AuditResults.csv'

Tüm işlemler genel olarak böyle, sizde kendi Exchange altyapılarını bu şekilde kontrol ederek zafiyet ile ilgili önlemleri

alabilirsiniz. Faydalı olması dileği ile keyifli okumalar.

İlgili Makaleler

4 Yorum

  1. Merhaba,
    Detaylı anlatımınız için teşekkürler, çok işe yarayacak…

    Ufak Bir ekleme yapmak istiyorum müsadenizle, “-Environment Online” parametresi ile Onprem üzerinde çalıştıramıyorsunuz hali ile bu sebeple aşağıdaki gibi ufak bir değişiklik gerekiyor.

    -Environment Onprem -EWSServerURL “EWS linkini yazıyorsunuz.”

  2. Windows Server 2012 R2 üzerin Exchange 2016 kurulu fakat aşağıdaki gibi hata alıyorum

    The AzureAD module was not found on this computer. Please install it by running: Install-Module -Name “AzureAD”
    AzureAD module requires PowerShell version 5.0 or higher. You’re running PowerShell 4.0

  3. Enterprise Vault gibi bir arşivleme çözümü kullanılıyorsa arşivdeki mail’ler taranamayacağından script sonucu yanıltıcı olabilir mi?

Bir yanıt yazın

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

Başa dön tuşu