Microsoft 365 Denetim Olaylarını Algılamak ve Raporlamak için Azure Otomasyonunu Kullanma


Önemli Denetim Olaylarının Tespiti ve Raporlanması

Exchange'in güvenliği konusunda endişe duyanlar için yoğun bir dönem oldu. Şirket içi cephede, saldırganların iyi yönetilen sunuculara bile sızmanın yeni yollarını bulmasıyla internette gizlenen tehlikeleri hatırlatan iki yeni sıfır gün güvenlik açığı ortaya çıktı. Çok iyi yönetilmeyen şirket içi sunucular kötü adamlar için kolay hedeflerdir ve bu tür sunuculardan hâlâ çok fazla var.

Microsoft 365'i korumak için oluşturulan engeller nedeniyle Exchange Online genellikle bu tür istismarlara karşı güvenlidir. Ancak daha önce ele aldığımız gibi, güvenliği ihlal edilmiş bir Azure AD yönetici hesabı, saldırganların bir kiracıdaki Exchange Online'ı ele geçirmesine yol açabilir. Microsoft Güvenlikten Sorumlu Başkan Yardımcısı Alex Weinert'in tüm Azure AD hesaplarını MFA ile korumanın önemi hakkındaki sözleri, güvenliği ihlal edilen kiracının sahibi olan kişiler için özel bir anlam taşıyor olmalı.

Tüm bunlar beni Microsoft siber güvenlik ekibinin (DART) soruşturmalar için önemli adli bilgi kaynaklarını inceledikleri bir makalesine getiriyor. DART, kötü adam etkinliğinin izlerini bulmak için Azure AD denetim günlüğüne, Azure AD oturum açma işlemlerine ve Office 365 denetim günlüğüne (birleşik denetim günlüğü olarak da bilinir) bakmayı sever. Bu, sorunları açığa çıkarabilecek denetim olaylarını kontrol etmek için Exchange Online yönetim modülündeki (V3) yönetilen kimliklere yönelik yeni desteğin nasıl kullanılacağı hakkında yazma fikrini ateşledi. İşte başlıyoruz.

Exchange Online, Azure Otomasyonu ve Yönetilen Kimlikler

Daha önce Exchange Online PowerShell'in Azure Otomasyonu ile nasıl kullanılacağını ele almıştım. V3'ten önce, kullanıcı adı ve parola gibi kimlik bilgileri (Azure Key Vault'ta güvenli bir şekilde depolanır) bir yönetici hesabında oturum açmak ve Exchange cmdlet'lerini çalıştırmak için kullanılabiliyordu. V3 ile, tıpkı Microsoft Graph PowerShell SDK ve Teams modüllerinde kullanabildiğiniz gibi, yönetilen bir kimlik kullanabilirsiniz.

Yönetilen kimlik kullanmanın en büyük avantajı, Azure'un güvenliği üstlenmesi ve parola veya sertifikalarla uğraşmaya gerek olmamasıdır. Bunun yerine Azure, kaynaklara erişime izin vermek veya erişimi reddetmek için yönetilen kimlikle kullanılan otomasyon hesabına atanan izinleri kullanır. Saldırganların yönetilen bir kimliği tehlikeye atmaya çalışması mümkündür, ancak bu olasılık, kullanıcı adı/şifre birleşimini tehlikeye atma olasılığıyla karşılaştırıldığında düşüktür.

Active Directory için Siber Güvenlik Risk Yönetimi

Bu Siber Güvenlik Risk Yönetimi Çözümleri aracılığıyla AD saldırılarını nasıl önleyeceğinizi ve bu saldırılardan nasıl kurtulacağınızı keşfedin.

Doğru İzinleri Atama

Benim fikrim, Azure tarafından yönetilen bir kimliğe ait olan bir zamanlamayı kullanarak runbook olarak yürütülecek bir PowerShell betiği yazmaktır. Komut dosyası şunları yapar:

  • İzlenecek yüksek öncelikli denetim olaylarını tanımlar. Yakın zamanda Microsoft 365 kiracısının ele geçirilmesi, saldırganların yeni bir gelen bağlayıcı ve 12 yeni aktarım kuralı oluşturmasına olanak tanıdı. Saldırganlar daha sonra kiracıyı çok sayıda spam göndermek için kullanabilir. Senaryom bu olayları kontrol ediyor.
  • Yönetilen bir kimlik kullanarak Exchange Online'da oturum açar. Yönetilen kimliğin hizmet sorumlusuna Exchange'i Uygulama Olarak Yönet izni atanmalıdır. İznin nasıl atanacağını öğrenmek için (yalnızca PowerShell kullanılarak mümkündür) bu makaleyi okuyun.
  • Search-UnifiedAuditLog cmdlet'ini kullanarak Office 365 denetim günlüğünde arama yapar. Arama son 30 günü kapsıyor. Office 365 E3 kiracıları için bu süre 90 gün geriye gidebilir; E5 kiracıları için 365 gün. Son olayları düzenli olarak kontrol etmeniz gerektiği dikkate alındığında 30'un makul olduğunu düşünüyorum.
  • Arama bazı denetim kayıtları bulursa, aktarım kuralının veya bağlayıcının adı, kullanılan parametreler vb. gibi önemli bilgileri çıkarmak için her kayıttaki denetim verileri yükünü ayrıştırın. Veri, olaydan olaya değişir; bu nedenle, aramaya başka olaylar eklerseniz, bu olaylardan bilgi çıkarmak için komut dosyasını güncellemeniz gerekir.
  • Denetim olayının tetiklenmesine neden olan eylemi gerçekleştiren hesabın görünen adını almak için Get-ExoMailbox cmdlet'ini çalıştırın.
  • Denetim verilerinin bir HTML raporunu oluşturun.
  • Raporu tasarlanmış bir SMTP adresine e-postayla gönderin. Bu bir dağıtım listesi, Microsoft 365 grubu, posta özellikli Ekip kanalı veya birey için olabilir. Buradaki fikir, mesajın yöneticileri yüksek profilli denetim olaylarıyla ilişkili eylemlerin geçerli olup olmadığını kontrol etmeye yönlendiren bir eylem çağrısı olmasıdır. Komut dosyası, iletiyi oluşturmak ve göndermek için Microsoft Graph PowerShell SDK cmdlet'lerini kullanır; bu nedenle, yönetilen kimliğin hizmet sorumlusunun Graph Mail.ReadWrite ve Mail.Send uygulama izinlerine sahip olması gerekir. Bu izinler çok güçlüdür (saldırganların sevdiği türden izinler arasındadır), bu nedenle bunların bir uygulama erişim politikasıyla (aşağıda açıklanmıştır) birlikte dağıtılması önemlidir.

Bunların çoğu basittir ve Azure Otomasyonu, yöneticilerden yüksek öncelikli denetim olaylarını incelemelerini istemek için e-postayı usulüne uygun olarak gönderir (Şekil 1). Runbook'un bir Azure Otomasyon zamanlamasına eklenmesi, kiracı yöneticilerinin düzenli olarak bildirim almasını sağlayacaktır.

Yönetilen Bir Kimliğe Grafik İzinleri Atama

İki konu daha fazla ilgiyi hak ediyor. Öncelikle, yönetilen kimlikle kullanılan otomasyon hesabına Mail.ReadWrite gibi bir Grafik izni atamak, yalnızca PowerShell'de mümkün olan başka bir işlemdir. İşte kullandığım kod:

$ManagedIdentity = Get-MgServicePrincipal -ServicePrincipalId d5469aa1-070f-4008-863b-e69b6646203a
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" # Microsoft Graph
$Role = $GraphApp.AppRoles | Where-Object {$_.Value -eq 'Mail.ReadWrite'}

$AppRoleAssignment = @{
     "PrincipalId" = $ManagedIdentity.Id
     "ResourceId" = $GraphApp.Id
     "AppRoleId" = $Role.Id }
# Assign the Graph permission
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentity.Id -BodyParameter $AppRoleAssignment

Koddaki adımlar şunlardır:

  • Hizmet sorumlusu tanımlayıcısını kullanarak yönetilen kimlik için otomasyon hesabının hizmet sorumlusunu alın. Bunu, Azure AD yönetim merkezinin kurumsal uygulamalar bölümünde yönetilen kimliği seçip özelliklerini görüntüleyerek elde edebilirsiniz.
  • Microsoft Graph kurumsal uygulamasının tanımlayıcısını tanımlayın. Bu değer her zaman '00000003-0000-0000-c000-000000000000'dir.
  • Vermek istediğim izne ilişkin Uygulama rolünü alın. Filtre, Mail.ReadWrite rolüne ilişkin rolü çıkarır.
  • Yeni atamanın parametrelerini oluşturmak için getirilen bilgileri kullanın.
  • Rolü otomasyon hesabının hizmet sorumlusuna atamak için New-MgServicePrincipalAppRoleAssignment cmdlet'ini çalıştırın. Rolün atanması, istenen iznin kullanılmasına izin verir.

Posta Kutularının Uygulamalara Karşı Güvenliğini Sağlama

İkincisi, otomasyon hesabı artık Mail.ReadWrite ve Mail.Send uygulama izinlerine sahiptir. Microsoft Graph, otomasyon hesabı tarafından çalıştırılan kodun kiracıdaki herhangi bir posta kutusuna erişmesine ve herhangi bir posta kutusu adına e-posta göndermesine olanak tanır. E-posta göndermek için çok güçlü bir tesis oluşturmak geliştiricilerin işini kolaylaştırır ancak bu bir güvenlik kabusu da olabilir. Uygulama Erişim Politikalarının devreye girdiği yer burasıdır.

Uygulama erişim ilkesi, bir uygulamanın posta kutularına erişimini kontrol eder. Senaryomuzda, muhtemelen yalnızca otomasyon hesabı tarafından çalıştırılan kodun sınırlı sayıda, hatta belki de yalnızca bir posta kutusuna erişebilmesini istiyoruz. Posta kutusu kümesinin bakımını kolaylaştırmak amacıyla, erişilebilir posta kutusu kümesini tanımlamak üzere bir dağıtım listesi oluşturabilirsiniz.

Örneğin, bu kod, güvenliğin etkin olduğu bir dağıtım listesi oluşturur (normal dağıtım listesi kullanılamaz) ve listeye tek bir posta kutusu ekler.

New-DistributionGroup -Alias ManagedMailbox.Restrict -PrimarySmtpAddress ManagedMailbox.Restrict@office365itpros.com -Description "Restrict Access for Managed Mailboxes - used with Application Policy" -DisplayName "Restrict Access to Managed Mailbox" -IgnoreNamingPolicy -Name ManagedMailbox.Restrict -Type Security

Set-DistributionGroup -Identity ManagedMailbox.Restrict -ManagedBy Tony.Redmond -HiddenFromAddressListsEnabled $True

Add-DistributionGroupMember -Identity ManagedMailbox.Restrict -Member "Azure.Management.Account@office365itpros.com"

Artık otomasyon hesabını dağıtım listesinde tanımlanan posta kutuları kümesiyle sınırlamak için bir uygulama erişim ilkesi oluşturabilirim. İlkenin etkinleştirilmesinden hemen sonra Exchange Online, yönetilen kimliği kullanan runbook'lar da dahil olmak üzere otomasyon hesabını atanmış posta kutularıyla sınırlandırır.

New-ApplicationAccessPolicy -AccessRight RestrictAccess -AppId "b977a222-3534-4625-980d-e2f864d3a2d5" -Description "Restrict Mailbox Access to Managed Identity" -PolicyScopeGroupId ManagedMailbox.Restrict

ScopeName        : Restrict Access to Managaed Mailbox
ScopeIdentity    : ManagedMailbox.Restrict
Identity         : a662313f-14fc-43a2-9a7a-d2e27f4f3478\b977a222-3534-4625-980d-e2f864d3a2d5:S-1-5-21-458367025-2064581115-2950179075-49778371;e33e4a0e-149d-4949-8c51-0c849df7b9ea
AppId            : b977a222-3534-4625-980d-e2f864d3a2d5
ScopeIdentityRaw : S-1-5-21-458367025-2064581115-2950179075-49778371;e33e4a0e-149d-4949-8c51-0c849df7b9ea
Description      : Restrict Mailbox Access to Managed Identity
AccessRight      : RestrictAccess
ShardType        : All
IsValid          : True
ObjectState      : Unchanged

Politikanın kapsamı yukarıda oluşturulan dağıtım listesi tarafından belirlenir. Kodda kullanılan AppId değeri, Azure AD yönetim merkezinde hesabın özelliklerini inceleyerek bulabileceğiniz otomasyon hesabının uygulama tanımlayıcısıdır (Şekil 2).

Runbook kodunu GitHub'dan indirebilirsiniz.

Zamanlanmış Otomasyon İyi Bir Otomasyondur

Bir kiracıyı korumak sıkı çalışmayı ve sürekli ısrarlı çabayı gerektirir. Anormallikleri tespit etmek amacıyla zamanlanmış runbook'ları çalıştırmak için Azure Otomasyonu'nu kullanmak, kimsenin işleri kontrol etmeyi unutmamasını sağlamanın mükemmel bir yoludur. Artık Exchange Online yönetim modülü yönetilen kimlikleri desteklediğinden, yeni bir dizi olasılık mevcuttur. Göreyim seni!

İlgili makaleler