Site icon Baki ÇUBUK

Group Policy Serisi Bölüm 7: Security Baseline ile GPO Sıkılaştırma

Merhaba

Şimdiye kadar GPO’ları (Group Policy Object) nasıl yazdığımızı, nasıl işlendiğini, nasıl sorun giderildiğini ve saldırganın gözünden nerelerinin zayıf olduğunu gördük. Bu bölümde işin tersine bakıyoruz: hangi ayarları, kaç tanesini ve hangi değerlerle yazmalıyız ki bir Windows istemcisi ya da sunucusu makul ölçüde sıkı olsun? Bu soruyu sıfırdan cevaplamak aylar alır. Neyse ki Microsoft bunun için hazır bir cevap yayımlıyor: Security Baseline (güvenlik temel ayarları).

Bu bölümde Microsoft Security Compliance Toolkit ile gelen baseline GPO’sunu laboratuvara aktarıyor, bir test OU’sunda (Organizational Unit) deniyor ve etkisini istemcide ölçüyoruz. Ardından aynı konunun en çok tartışılan yanına, hesap ilkelerine (parola ve hesap kilitleme politikası) geçiyor, Default Domain Policy, Fine-Grained Password Policy ve güncel NIST (National Institute of Standards and Technology) rehberini karşılaştırıyoruz.

Uyarı: Bu bölümdeki baseline, istemcideki yüzlerce ayarı değiştirir. Laboratuvarda başlamadan önce W11CLIENT için bir sanal makine checkpoint’i (snapshot) alın. Production (Üretim) ortamında bir baseline’ı asla doğrudan tüm bilgisayarlara bağlamayın, önce küçük bir test grubunda deneyin.

1. Security Baseline Nedir, Neden Kullanılır?

Security Baseline, Microsoft’un Windows, Microsoft Edge ve Microsoft 365 Apps gibi ürünler için önerdiği güvenlik ayarlarının, değerleriyle birlikte yayımlanmış hazır halidir. Microsoft bunları kendi güvenlik ekiplerinin ve müşteri deneyiminin sonuçlarına göre hazırlar ve yeni Windows sürümleriyle birlikte güncel tutar. Ayarlar, GPO yedeği (backup) biçiminde gelir. Yani bir GPO’ya aktarılıp doğrudan kullanılabilir.

Baseline kullanmanın üç temel nedeni vardır:

Önemli bir uyarı: Baseline her ortam için “olduğu gibi uygula” demek değildir. Microsoft bunu kendi belgelerinde açıkça belirtir. Ayarlar kurumsal bir Windows ortamı varsayar. Eski bir uygulamanız NTLM (NT LAN Manager) ya da SMBv1 gibi eski bir protokole bağımlıysa baseline onu kırabilir. Doğru yaklaşım, baseline’ı bir başlangıç noktası olarak almak, test etmek ve gerekçesiyle belgelenmiş istisnalar eklemektir.

Baseline’ı alternatiflerinden ayıran şey şudur:

Yaklaşım Avantajı Dezavantajı
Sıfırdan kendi GPO’larınızı (Group Policy Object) yazmak Tam kontrol, yalnızca ihtiyaç duyduğunuz ayarlar Çok zaman alır, eksik bırakmak kolaydır, sürüm güncellemelerini takip etmek size kalır
Microsoft Security Baseline Hazır, gerekçeli, güncel, GPO yedeği olarak gelir Her ayar her ortama uymaz. Test gerektirir
CIS (Center for Internet Security) Benchmark Sektör genelinde kabul görmüş, ayrıntılı seviyeler sunar Daha sıkıdır. Uygulama uyumluluğu daha fazla test ister

Bu bölümde Microsoft baseline’ını kullanıyoruz. CIS Benchmark’ı da aynı yöntemle (GPO yedeği olarak) içe aktarmak mümkündür.

2. Laboratuvar Planı

Aşağıda neyi, nereye ve hangi sırayla yapacağımız özetlenmiştir:

Adım Ne Yapıyoruz Nerede Hangi Hesap
1 Baseline dosyalarını indirip açmak, içeriğini incelemek Domain controller (W25DC) Yönetici
2 Baseline ADMX (Administrative Template Extensible Markup Language) şablonlarını merkezi depoya eklemek Domain controller Yönetici
3 Baseline GPO (Group Policy Object) yedeğini yeni bir GPO’ya aktarmak Domain controller Yönetici
4 Test OU’su (Organizational Unit) oluşturmak ve GPO’yu bağlamak Domain controller Yönetici
5 Baseline öncesi değerleri okumak, W11CLIENT‘ı test OU’suna taşımak, baseline sonrası etkiyi ölçmek Okuma ve ölçüm W11CLIENT‘ta, taşıma domain controller’da Yönetici
6 Baseline ile mevcut GPO’ları karşılaştırmak (isteğe bağlı) Domain controller Yönetici
7 Hesap ilkelerini incelemek: Default Domain Policy, NIST (National Institute of Standards and Technology) ve Fine-Grained Password Policy Domain controller Yönetici
8 Geri almak ve temizlemek Domain controller, ardından W11CLIENT Yönetici
Not: Bu bölümde dosya, GPO, OU ve AD (Active Directory) ile ilgili her şey domain controller’da Run as administrator (Yönetici olarak çalıştır) açılmış PowerShell penceresinde yapılır. İstemciye (W11CLIENT) yalnızca ölçüm için geçiyoruz: baseline öncesi ve sonrası değerleri okumak, gpupdate ve gpresult çalıştırmak. Standart kullanıcı hesabıyla (örneğin nihat.cubuk) açılan bir pencerede komutlar çalışmaz, çünkü baseline dosyaları domain controller’dadır ve SYSVOL (System Volume) paylaşımına yazma yetkisi yalnızca yöneticilerdedir. Komutlara başlamadan önce pencerenin başlığında Administrator yazdığını kontrol edin.

3. Uygulama: Baseline’ı Laboratuvara Almak

Adım 1: Baseline dosyalarını indirmek ve incelemek

SCT (Security Compliance Toolkit), Microsoft’un baseline dosyalarını ve analiz araçlarını bir arada sunduğu indirme sayfasıdır. Windows 10, Windows 11, Windows Server ve Microsoft 365 Apps gibi ürünler için ayrı baseline paketleri vardır.

Bunlara ek olarak şu araçları içerir:

Toolkit’i Microsoft’un resmi indirme sayfasından alıyoruz: Microsoft Security Compliance Toolkit 1.0. Sayfada indirilecek dosyaları seçme ekranı açılır.

Laboratuvarda W11CLIENT‘ın Windows 11 sürümünü öğrenmek için istemcide winver komutunu çalıştırın ve aynı sürüm için olan Windows 11 baseline paketini indirin. SCT sayfasından şu iki dosyayı indirmeniz yeterlidir: seçtiğiniz Windows 11 sürümünün baseline paketi (ZIP) ve Policy Analyzer paketi (ZIP). İndirdiğiniz dosyaları domain controller’a, C:\Baseline klasörüne kopyalayın.

Not: İndirme adımını siz yapıyorsunuz, çünkü dosyalar Microsoft’un sitesinden gelir. Dosyaları yalnızca Microsoft’un resmi indirme sayfasından alın. Başka bir siteden indirilen bir baseline, ilkelerinize sessizce kötü ayarlar ekleyebilir.

ZIP dosyalarını açıp içeriğine bakıyoruz:

New-Item -Path "C:\Baseline" -ItemType Directory -Force | Out-Null
Expand-Archive -Path "C:\Baseline\Windows 11 v26H2 Security Baseline v2.zip" -DestinationPath "C:\Baseline\Win11" -Force
$paket = "C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2"
Get-ChildItem $paket -Directory | Select-Object -ExpandProperty Name

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
C:\Baseline İndirilen dosyaların toplandığı klasör Kendi çalışma klasörünüz
Windows 11 v26H2 Security Baseline v2.zip İndirdiğiniz baseline paketinin dosya adı İndirdiğiniz ZIP’in gerçek adı
C:\Baseline\Win11 ZIP’in açılacağı klasör Kendi klasörünüz
$paket ZIP’in içinden çıkan, baseline klasörlerini barındıran iç klasör. ZIP açılınca Win11 klasörünün altında paket adıyla bir klasör daha oluşur Dosya Gezgini’nde açtığınız klasörün gerçek yolu. Sonraki adımlarda aynı yolu kullanın

Açılan iç klasörde şu bölümler bulunur: Documentation (ayarların gerekçeleri ve tablolar), GP Reports (her GPO’nun HTML (HyperText Markup Language) raporu), GPOs (içe aktarılacak GPO yedekleri), Scripts (baseline’ı içe aktarmaya yardımcı betikler) ve Templates (baseline’ın ek ADMX (Administrative Template Extensible Markup Language) şablonları). ZIP açıldığında bu klasörler doğrudan Win11 altında değil, paket adını taşıyan bir iç klasörün içinde görünür. Bu yüzden sonraki komutlarda $paket değişkenini kullanıyoruz.

Adım 2: Baseline şablonlarını merkezi depoya eklemek

Baseline, standart Windows şablonlarında bulunmayan birkaç özel ayar içerir (örneğin MSS (Legacy) ve Microsoft Security Guide ayarları). Bu ayarları GPMC’de (Group Policy Management Console) düzgün görmek için ilgili ADMX ve ADML (Administrative Template Language) dosyalarını SYSVOL (System Volume) içindeki merkezi depoya (PolicyDefinitions) eklememiz gerekir. Eklemezsek ayarlar çalışır, ancak GPMC’de Extra Registry Settings altında ham kayıt defteri değerleri olarak görünür.

Önce baseline’ın Templates klasöründe hangi dosyaların bulunduğuna bakıyoruz:

$paket = "C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2"
Get-ChildItem "$paket\Templates" -Recurse -File | Select-Object -ExpandProperty FullName

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$paket Adım 1’deki baseline iç klasörünün yolu Kendi paket klasörünüz
\Templates Baseline’ın ek şablon klasörü Değiştirmeyin

Dosya adları genellikle SecGuide.admx ve MSS-legacy.admx ile bunların en-US klasöründeki .adml karşılıklarıdır. Gördüğünüz dosya adlarına göre aşağıdaki komutu uyarlayın. Yalnızca baseline’a özel dosyaları kopyalıyoruz, merkezi depodaki Windows’un kendi şablonlarının üzerine yazmıyoruz:

$paket = "C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2"
$depo = "\\bakicubuk.tech\SYSVOL\bakicubuk.tech\Policies\PolicyDefinitions"
$kaynak = "$paket\Templates"
Copy-Item "$kaynak\SecGuide.admx","$kaynak\MSS-legacy.admx" -Destination $depo
Copy-Item "$kaynak\en-US\SecGuide.adml","$kaynak\en-US\MSS-legacy.adml" -Destination "$depo\en-US"
Get-ChildItem "$depo\SecGuide.admx","$depo\MSS-legacy.admx","$depo\en-US\SecGuide.adml","$depo\en-US\MSS-legacy.adml" | Select-Object Name, Length, DirectoryName | Format-Table -AutoSize -Wrap

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$paket Adım 1’deki baseline iç klasörünün yolu. Bu blok tek başına çalıştırılabilsin diye burada yeniden tanımlanır Kendi paket klasörünüz
$depo Etki alanının merkezi şablon deposu Kendi etki alanı adınız (bakicubuk.tech)
SecGuide.admx, MSS-legacy.admx Baseline’a özel şablon dosyaları Templates klasöründe gördüğünüz dosya adları
en-US ADML (Administrative Template Language) dil klasörü Kullandığınız dil klasörü (örneğin tr-TR)

Adım 3: Baseline GPO yedeğini içe aktarmak

Önce grafik arayüzle (GPMC, Group Policy Management Console) yapıyoruz. Baseline’ı doğrudan hazır bir GPO’ya değil, kendi adlandırma düzenimizle oluşturduğumuz yeni ve boş bir GPO’ya içe aktaracağız. Böylece paketteki orijinal ayarlara dokunmamış, yalnızca bir kopyasını kullanmış oluruz.

3.1 Boş GPO oluşturmak

GPMC’de sol ağaçta Forest, Domains, bakicubuk.tech yolunu açıyoruz. Group Policy Objects konteynerine sağ tıklıyoruz. Açılan menüde New seçeneği yeni bir GPO oluşturur. Menüdeki Back Up All… tüm GPO’ları yedekler, Manage Backups… yedekleri yönetir, Open Migration Table Editor ise bir GPO’yu başka bir etki alanına taşırken kullanılan eşleme tablosunu açar. Bizim ihtiyacımız New.

New GPO penceresi açılır. Name alanına C - Baseline - Win11 Bilgisayar yazıyoruz. Source Starter GPO alanı (none) kalır, çünkü hazır bir şablondan başlamıyoruz. OK ile oluşturuyoruz. Yeni GPO listede görünür, ama içi boştur ve henüz hiçbir yere bağlı değildir.

3.2 Import Settings sihirbazını başlatmak

Yeni GPO’ya sağ tıklıyoruz. Menüdeki üç seçeneği karıştırmamak gerekir: Back Up… GPO’yu dışarı yedekler, Restore from Backup… aynı GPO’nun eski bir sürümünü geri yükler, Import Settings… ise başka bir yedekteki ayarları bu GPO’nun içine kopyalar. Bizim yapmak istediğimiz sonuncusu.

3.3 Backup GPO ekranı

Sihirbazın ilk ekranı uyarır: içe aktarma, hedef GPO’nun mevcut ayarlarını kalıcı olarak siler, bu yüzden önce yedek alınması önerilir. Bu GPO’yu biraz önce oluşturduk ve içi boş, yani kaybedeceğimiz bir şey yok. Bu yüzden Backup… düğmesine basmıyoruz, doğrudan Next diyoruz.

Dolu bir üretim GPO’suna içe aktarma yapıyor olsaydık burada Backup… ile yedek alırdık. Açılan Back Up Group Policy Object penceresinde Location alanına yedek klasörü yazılır ya da Browse… ile seçilir, Description alanına kısa bir not girilir ve Back Up düğmesine basılır. Dikkat: yedek klasörü olarak baseline paketinin GPOs klasörünü seçmeyin. Yedek oraya yazılır ve paketin içine ek bir GPO yedeği karışır. Kendi yedekleriniz için ayrı bir klasör kullanın, örneğin C:\GPOYedek.

3.4 Backup location ekranı

Bu ekran, ayarların hangi klasördeki yedekten okunacağını sorar. Backup folder alanı başlangıçta boştur ve alan dolmadan Next düğmesi soluk kalır, yani ilerlenemez. Browse… düğmesine basıyoruz.

Browse For Folder penceresinde C: sürücüsünden Baseline, Win11, Windows 11 v26H2 Security Baseline v2 yolunu açıyoruz. Paketin içinde Documentation, GP Reports, GPOs, Scripts ve Templates klasörleri görünür. Bunlardan GPOs klasörünü seçiyoruz (alttaki Folder alanında GPOs yazar) ve OK diyoruz. GPOs klasörü, her biri GUID (Globally Unique Identifier) adlı alt klasörlerde baseline GPO’larının yedeklerini tutar. Alt klasörlerden birini değil, GPOs klasörünün kendisini seçmek gerekir.

Backup folder alanı artık tam yolu gösterir: C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2\GPOs. Next düğmesi etkinleşmiştir. Next diyoruz.

3.5 Source GPO ekranı

Burada seçtiğimiz klasördeki yedeklerin listesi görünür: Name sütunu GPO’nun adını, Time Stamp sütunu yedeğin alındığı zamanı gösterir. Listede Internet Explorer 11, BitLocker, Credential Guard, Defender Antivirus, Domain Security, User ve Computer GPO’ları vardır. Bu bölümde yalnızca bilgisayar ayarlarını içeren MSFT Windows 11 26H2 - Computer satırını seçiyoruz. Show only the latest version of each GPO kutusu, aynı GPO’nun birden fazla yedeği varsa yalnızca en yenisini gösterir. İşaretlenmesi zararsızdır.

Seçtiğimiz yedeğin içeriğini uygulamadan önce görmek için View Settings… düğmesine basıyoruz.

View Settings… yedeğin ayarlarını tarayıcıda bir rapor olarak açar. Raporun General bölümünde dikkat edilecek üç satır vardır. Domain satırı Security.local yazar: baseline, Microsoft’un kendi laboratuvar etki alanında hazırlanmıştır, içe aktarınca bu bilgi bizim GPO’muza taşınmaz. GPO Status satırı User settings disabled yazar, yani bu GPO yalnızca bilgisayar ayarlarını içerir. Links bölümü None yazar, çünkü yedek hiçbir yere bağlı değildir. Aşağıda Computer Configuration altında baseline’ın bilgisayar ayarları, örneğin kullanıcı hakları, listelenir.

Raporu kapatıp sihirbaza dönüyoruz ve MSFT Windows 11 26H2 - Computer satırı seçiliyken Next diyoruz.

3.6 Sihirbazı bitirmek

Scanning Backup ekranı yedekteki ayarları tarar ve güvenlik ilkesi (security principal, yani grup, kullanıcı veya bilgisayar hesabı) ya da UNC (Universal Naming Convention, ağ paylaşım yolu) başvurusu olup olmadığını arar. Bizim yedeğimizde bu tür başvurular bulunur ve ekran bunu bildirir. Next diyoruz.

Migrating References ekranı bu başvuruların hedef GPO’ya nasıl aktarılacağını sorar. İki seçenek vardır. Copying them identically from the source başvuruları olduğu gibi kopyalar. Using this migration table to map them in the destination GPO ise başvuruları bir taşıma tablosuyla hedef etki alanının hesaplarına eşler. Baseline’daki başvurular Administrators gibi her Windows sisteminde aynı olan yerleşik hesaplardır, bu yüzden varsayılan olan ilk seçeneği bırakıyoruz. Taşıma tablosu, başvuruların kaynak etki alanına özgü hesaplar olduğu durumlarda gerekir. Next diyoruz.

Son ekran, Completing the Import Settings Wizard, yapılacak işlemin özetini gösterir: yedek klasörü, kaynak GPO adı, zaman damgası ve Migration Table: None. Bilgileri doğrulayıp Finish diyoruz.

Import penceresi işlemin ilerlemesini gösterir. Durum satırında GPO: C - Baseline - Win11 Bilgisayar...Succeeded yazısını görünce OK ile kapatıyoruz. GPO artık baseline’ın bilgisayar ayarlarını taşır.

İçe aktarmanın sonucunu Group Policy Objects konteynerinin içeriğinde de görebiliriz. Yeni GPO’nun GPO Status sütunu, içe aktarmadan önce Enabled iken artık User configuration settings disabled yazar. Baseline’ın Computer GPO’su yalnızca bilgisayar ayarlarını içerdiği için kullanıcı tarafı kapalı gelir ve işlem gereksiz yere uzamaz.

Aynı işlemi PowerShell ile yaparken önce yedek klasörlerinin hangi GPO’ya ait olduğunu okuyoruz. Her yedek, GUID adlı bir klasördür ve içindeki bkupInfo.xml GPO’nun adını tutar:

$paket = "C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2"
Get-ChildItem "$paket\GPOs" -Directory | ForEach-Object {
    $x = [xml](Get-Content "$($_.FullName)\bkupInfo.xml" -Raw)
    [pscustomobject]@{ YedekId = $_.Name; Ad = $x.BackupInst.GPODisplayName.InnerText }
} | Format-Table -AutoSize -Wrap

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$paket\GPOs Baseline GPO (Group Policy Object) yedeklerinin bulunduğu klasör Kendi paket klasörünüzün altındaki GPOs yolu
bkupInfo.xml Her yedeğin içindeki GPO adı ve kimlik bilgisini tutan dosya Değiştirmeyin

Çıktıda Computer, User, Domain Security, Defender Antivirus, Credential Guard, BitLocker ve Internet Explorer 11 gibi birkaç GPO adı görürsünüz. Bu bölümde yalnızca Computer olanı içe aktarıyoruz. Sonra baseline GPO’sunu kendi adlandırma düzenimizle (tür – kapsam – amaç) oluşturuyoruz:

$paket = "C:\Baseline\Win11\Windows 11 v26H2 Security Baseline v2"
Import-GPO -BackupGpoName "MSFT Windows 11 26H2 - Computer" -Path "$paket\GPOs" -TargetName "C - Baseline - Win11 Bilgisayar" -CreateIfNeeded | Out-Null
Get-GPO -Name "C - Baseline - Win11 Bilgisayar" | Select-Object DisplayName, GpoStatus, ModificationTime | Format-Table -AutoSize

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$paket Adım 1’deki baseline iç klasörünün yolu. Blok tek başına çalıştırılabilsin diye burada yeniden tanımlanır Kendi paket klasörünüz
-BackupGpoName İçe aktarılacak yedeğin adı Bir önceki çıktıda gördüğünüz Computer GPO’sunun (Group Policy Object) adı
-Path Yedeklerin bulunduğu klasör Kendi GPOs klasörünüz
-TargetName Oluşacak GPO’nun adı Kendi adlandırma düzeniniz
-CreateIfNeeded GPO yoksa oluşturur, varsa üzerine yazar GPMC’de (Group Policy Management Console) zaten oluşturduysanız bu parametreyi kaldırabilirsiniz

Get-GPO çıktısındaki GpoStatus değeri UserSettingsDisabled görünür. Bu beklenen bir sonuçtur: baseline’ın Computer GPO’su yalnızca bilgisayar ayarlarını içerir, bu yüzden kullanıcı yapılandırması kapalı gelir ve işlem gereksiz yere uzamaz.

Adım 4: Test OU’su oluşturmak ve GPO’yu bağlamak

Baseline’ı doğrudan mevcut bir OU’ya bağlamıyoruz. Önce yalnızca test istemcisinin bulunacağı yeni bir OU oluşturuyoruz. GPMC’de Bilgisayarlar OU’suna sağ tıklayıp New Organizational Unit ile Baseline adlı OU’yu oluşturuyoruz. Ardından Baseline OU’suna sağ tıklayıp Link an Existing GPO ile C - Baseline - Win11 Bilgisayar GPO’sunu bağlıyoruz. OU şimdilik boştur, yani GPO henüz hiçbir bilgisayarı etkilemez.

New-ADOrganizationalUnit -Name "Baseline" -Path "OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech" -ProtectedFromAccidentalDeletion $false
New-GPLink -Name "C - Baseline - Win11 Bilgisayar" -Target "OU=Baseline,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech" | Out-Null
Get-GPInheritance -Target "OU=Baseline,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech"

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
-Name "Baseline" Oluşturulacak test OU’sunun (Organizational Unit) adı Kendi adlandırma düzeniniz
OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech Test OU’sunun oluşturulacağı yer Kendi OU yolunuz ve etki alanınız
-ProtectedFromAccidentalDeletion $false OU’nun yanlışlıkla silinmeye karşı korumasını kapatır. Lab temizliğini kolaylaştırır Üretimde $true bırakın
C - Baseline - Win11 Bilgisayar Bağlanacak baseline GPO’sunun (Group Policy Object) adı Adım 3’te verdiğiniz ad

Çıktıda iki satır önemlidir. GpoLinks satırı Baseline OU’suna doğrudan bağlı GPO’ları gösterir ve yalnızca baseline GPO’sunu listeler. InheritedGpoLinks satırı ise OU’ya üst konumlardan gelen GPO’ları da kapsar, bu yüzden Default Domain Policy de listede görünür. Yani Baseline OU’sundaki bilgisayarlar hem etki alanı ilkesini hem baseline’ı alacak. Name satırının küçük harfle (baseline) yazılması bu cmdlet’in gösterim biçimidir, OU adı Baseline olarak oluşmuştur.

Adım 5: Etkiyi istemcide ölçmek

Önce bir karşılaştırma noktası alıyoruz. W11CLIENT hala eski OU’sundayken, istemcide bir PowerShell penceresinde (bu okuma için yönetici yetkisi gerekmez, çünkü HKLM altındaki değerleri standart kullanıcı da okuyabilir) şu komutla üç ayarın şimdiki değerini okuyoruz ve ekranı saklıyoruz:

function Oku($yol, $ad) {
    $d = (Get-ItemProperty $yol -Name $ad -ErrorAction SilentlyContinue).$ad
    if ($null -eq $d) { "(tanımlı değil)" } else { $d }
}
[pscustomobject]@{
    LmCompatibilityLevel = Oku "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" "LmCompatibilityLevel"
    SMB1Sunucu           = Oku "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" "SMB1"
    SMB1IstemciSurucu    = Oku "HKLM:\SYSTEM\CurrentControlSet\Services\mrxsmb10" "Start"
} | Format-List

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
Oku Kayıt defterindeki bir değeri okuyan küçük bir işlev. Değer yoksa boş satır yerine (tanımlı değil) yazar Değiştirmeyin
LmCompatibilityLevel LM (LAN Manager) kimlik doğrulama düzeyi. 5 en sıkı seçenek: yalnızca NTLMv2 (NT LAN Manager sürüm 2) kabul edilir, LM ve NTLMv1 reddedilir Değiştirmeyin, baseline’ın yazdığı değere bakın
SMB1Sunucu SMB (Server Message Block) sürüm 1 sunucusunun açık (1) ya da kapalı (0) olduğu Değiştirmeyin
SMB1IstemciSurucu SMB sürüm 1 istemci sürücüsünün başlangıç türü. 4 devre dışı demektir Değiştirmeyin

Baseline uygulanmadan önce bu değerlerin üçünün de (tanımlı değil) çıkması normaldir. Windows bu ayarlar için kayıt defterinde bir değer yazmaz ve yerleşik varsayılanı kullanır. Baseline, bu değerleri açıkça yazarak sıkı seçeneği zorunlu kılar. Karşılaştırmanın anlamı da buradadır.

Şimdi domain controller’da istemciyi test OU’suna taşıyoruz. GUI ile Active Directory Users and Computers’ta W11CLIENT bilgisayar nesnesini Baseline OU’suna sürüklüyoruz. PowerShell ile aynısı, taşımadan önce eski konumu da kaydederek:

$eskiKonum = (Get-ADComputer "W11CLIENT").DistinguishedName -replace '^CN=[^,]+,',''
$eskiKonum
Move-ADObject -Identity (Get-ADComputer "W11CLIENT").DistinguishedName -TargetPath "OU=Baseline,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech"

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$eskiKonum İstemcinin taşınmadan önceki OU’su (Organizational Unit). Geri almak için saklıyoruz Değiştirmeyin, çıktıyı not edin
W11CLIENT Test edilecek istemcinin bilgisayar adı Kendi test makinenizin adı
-TargetPath Taşınacağı test OU’su Adım 4’te oluşturduğunuz OU’nun yolu

$eskiKonum çıktısını not edin. Adım 8’de istemciyi buraya geri taşıyacağız. Şimdi istemcide ilkeyi yenileyip bağlantıyı kontrol ediyoruz:

gpupdate /force
gpresult /r /scope computer | Select-String -Pattern "Baseline"

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
gpupdate /force İstemcideki tüm ilkeleri hemen yeniler Değiştirmeyin
/scope computer Yalnızca bilgisayar ilkelerini gösterir Değiştirmeyin
"Baseline" gpresult çıktısında aranacak GPO (Group Policy Object) adı parçası GPO’nuzu adlandırırken kullandığınız sözcük

Bazı baseline ayarları yeniden başlatma ister. W11CLIENT‘ı yeniden başlatıp yönetici olarak oturum açın, ardından yukarıdaki üç değeri okuyan komutu bir kez daha çalıştırın.

Beklenen sonuç: gpresult çıktısında bilgisayarın yeni konumu (OU=Baseline) ve C - Baseline - Win11 Bilgisayar GPO’su görünür. Yeniden başlatmadan sonra üç değer de baseline’ın yazdığı hale gelir: LmCompatibilityLevel için 5, SMB1Sunucu için 0, SMB1IstemciSurucu için 4. Baseline öncesinde üçü de (tanımlı değil) idi. Bir değer boş kalırsa baseline’ın sizin sürümünüzde farklı ayar kullanıyor olması mümkündür. Bu durumda Adım 1’de açtığınız GP Reports klasöründeki HTML raporunda bir ayar seçip onu kayıt defterinde kontrol edin. Önemli olan, GPO’daki bir ayarın istemcide gerçekten uygulandığını bir kez uçtan uca görmektir.

İpucu: Baseline’ın bir uygulamayı ya da hizmeti kırıp kırmadığını anlamanın en iyi yolu, istemcide gerçek iş akışlarını denemektir: dosya paylaşımına bağlanmak, yazdırmak, uzak masaüstü ve eski bir uygulama. Bir şey bozulursa kök nedeni baseline’ın ilgili ayarında arayın ve istisnayı baseline’ı değiştirerek değil, baseline’dan sonra işlenen ayrı bir GPO ile yapın. Böylece baseline’ı güncellediğinizde istisnalarınız kaybolmaz.

Adım 6: Baseline ile mevcut GPO’ları karşılaştırmak (isteğe bağlı)

Zaten çalışan bir ortamınız varsa asıl soru şudur: Mevcut GPO’larımız baseline’dan nerede ayrılıyor? Policy Analyzer bu soruya cevap verir. Araç, baseline paketinin içinde değil, Security Compliance Toolkit indirme sayfasında ayrı bir indirme olarak bulunur: sayfadaki dosya listesinden PolicyAnalyzer.zip kutusunu işaretleyip indiriyoruz (Adım 1’deki baseline ZIP’iyle aynı sayfa). ZIP’i C:\Baseline\PolicyAnalyzer klasörüne çıkardığımızda PolicyAnalyzer_40 alt klasöründen PolicyAnalyzer.exe çıkar (C:\Baseline\PolicyAnalyzer\PolicyAnalyzer_40\PolicyAnalyzer.exe). Kurulum gerektirmez, doğrudan çalışır.

Expand-Archive -Path "$env:USERPROFILE\Downloads\PolicyAnalyzer.zip" -DestinationPath "C:\Baseline\PolicyAnalyzer" -Force
Get-ChildItem "C:\Baseline\PolicyAnalyzer" -Recurse -Filter "PolicyAnalyzer.exe" | Select-Object FullName
Start-Process "C:\Baseline\PolicyAnalyzer\PolicyAnalyzer_40\PolicyAnalyzer.exe"

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$env:USERPROFILE\Downloads\PolicyAnalyzer.zip İndirilen ZIP dosyasının yolu ZIP’i kaydettiğiniz yer
-DestinationPath ZIP’in çıkarılacağı klasör İstediğiniz herhangi bir klasör
PolicyAnalyzer_40 ZIP’in içindeki alt klasör. Araç sürümüne göre adı değişebilir İkinci komutun yazdığı tam yol

6.1 Baseline için kural kümesi oluşturmak

Araç açılınca ana pencere boştur. Üstte Select All kutusu, ortada kural kümelerinin listesi, sağda dört düğme vardır: Add … yeni küme ekler, View / Compare işaretli kümeleri karşılaştırır, Compare to Effective State bir kümeyi makinenin şu an uyguladığı gerçek ayarlarla karşılaştırır (yönetici yetkisi ister), Delete selected işaretli kümeleri siler. Pencerenin altında kural kümelerinin kaydedildiği klasör (Documents\PolicyAnalyzer) ve yerel şablon klasörü (C:\WINDOWS\PolicyDefinitions) yazar. Add … düğmesine basıyoruz.

Policy File Importer adlı ayrı bir pencere açılır. Bu pencerede File menüsünün birkaç seçeneği vardır. Add files from GPO(s)… GPO yedek klasöründeki tüm ayarları alır, bizim kullanacağımız seçenek budur. Add Computer Configuration (registry.pol) ve Add User Configuration (registry.pol) tek bir registry.pol dosyasını ekler. Add Security Template (*.inf) güvenlik şablonu, Add Audit Policy (audit.csv) denetim ilkesi dosyası ekler. Yedeğin hangi istemci tarafı uzantıları olan CSE (Client-Side Extension) bileşenlerinden hangilerini içerdiğine Inspect Backup.xml for CSEs… bakar. Add files from GPO(s)… seçeneğine basıyoruz.

Açılan klasör seçme penceresi GPO yedeklerinin bulunduğu kök klasörü ister. Tek bir GUID klasörünü değil, baseline paketinin GPOs klasörünü seçiyoruz ve Select Folder diyoruz.

Araç klasörü tarar ve bulduğu her ayarı türüne göre listeler: Policy Type sütununda Computer ve User kayıt defteri ilkeleri (registry.pol), Sec Template güvenlik şablonu (GptTmpl.inf), Audit Policy denetim ilkesi (audit.csv), CSE-Machine ve CSE-User ise istemci tarafı uzantılarıdır. Listede LAPS (Local Administrator Password Solution) ve Device Guard uzantılarının da görünmesi, baseline’ın bunlara da ayar taşıdığını gösterir. Import… düğmesine basıyoruz.

Save imported Policy Rules… penceresi açılır. Kayıt türü Policy Rules‘tur, yani araç ayarları kendi biçiminde (.PolicyRules dosyası) saklar. Dosya adı olarak Baseline-Win11-26H2 yazıp Save diyoruz. Klasörü değiştirmiyoruz, varsayılan Documents\PolicyAnalyzer kalır.

Importer kapanır ve ana pencereye dönülür. Listede Baseline-Win11-26H2 kümesi, kaydedildiği tarih ve boyutuyla (bayt cinsinden) görünür. View / Compare ve Compare to Effective State düğmeleri artık etkindir.

6.2 Mevcut GPO’nun yedeğini alıp ikinci küme oluşturmak

Karşılaştırma için bir de karşılaştırmak istediğimiz GPO’nun yedeği lazım. Laboratuvarda Default Domain Policy‘yi kullanıyoruz, çünkü parola ve hesap kilitleme ayarlarını taşır ve Adım 7’ye doğrudan bağlanır. GPMC’de Default Domain Policy‘ye sağ tıklayıp Back Up… seçiyoruz, Location alanına C:\GPOYedek yazıp Back Up diyoruz ve Succeeded görünce OK ile kapatıyoruz.

New-Item -ItemType Directory -Path "C:\GPOYedek" -Force | Out-Null
Backup-GPO -Name "Default Domain Policy" -Path "C:\GPOYedek" | Select-Object DisplayName, BackupDirectory, Id | Format-List

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
C:\GPOYedek Yedeğin yazılacağı klasör. Baseline paketinin GPOs klasörü olmamalıdır Kendi yedek klasörünüz
-Name Yedeği alınacak GPO’nun (Group Policy Object) adı Karşılaştırmak istediğiniz kendi GPO’nuzun adı

Sonra Policy Analyzer’da aynı akışı bu klasör için tekrarlıyoruz: Add …, File, Add files from GPO(s)…, kök klasör olarak C:\GPOYedek, Import…, dosya adı DefaultDomainPolicy.

6.3 İki kümeyi karşılaştırmak

Ana pencerede iki kümeyi de işaretleyip (Select All kutusu ikisini birden seçer) View / Compare diyoruz. Policy Viewer adlı bir pencere açılır ve başlığında toplam ayar sayısı yazar, bizde 440. Tabloda her satır bir ayardır. Policy Type sütunu ayarın türünü (HKLM ve HKCU kayıt defteri, Security Template güvenlik şablonu, Audit Policy denetim ilkesi), Policy Setting sütunu ayarın adını, sağdaki iki sütun ise her kümedeki değeri gösterir. Sütun başlığına tıklayarak sıralayabilirsiniz. Biz Policy Type sütununa göre sıraladık, böylece Security Template satırları bir arada göründü.

Renkler karşılaştırmanın özüdür. Sarı, ayarın iki kümede de tanımlı olduğunu ama değerlerin farklı olduğunu gösterir. Gri, ayarın o kümede hiç tanımlanmadığını gösterir. Beyaz satırda iki taraf da aynı değeri taşır. Bizim tablomuzda iki ayar sarıdır: LockoutBadCount (hesap kilitleme eşiği) baseline’da 10, Default Domain Policy‘de 0 (kilitleme kapalı), MinimumPasswordLength (en az parola uzunluğu) ise baseline’da 14, Default Domain Policy‘de 7. PasswordComplexity (1) ve PasswordHistorySize (24) iki tarafta da aynıdır. MaximumPasswordAge (42 gün) ve MinimumPasswordAge (1 gün) yalnızca Default Domain Policy‘de tanımlıdır, baseline bunlara dokunmaz.

Bir satıra tıklayınca alt bölmede ayarın ilke yolu (Policy Path), açıklaması ve her kümedeki değeri görünür. Hangi GPO’dan geldiğini de gösterir. MinimumPasswordLength satırında baseline değeri 14‘ü MSFT Windows 11 26H2 - Domain Security GPO’sundan, Default Domain Policy değeri 7‘yi Default Domain Policy GPO’sundan alır. Bu bilgi önemlidir: baseline’ın parola ve hesap kilitleme ayarları Computer GPO’sunda değil, etki alanı kökünde uygulanması gereken Domain Security GPO’sunda bulunur. Adım 7’de bunu ele alacağız. Alt bölmedeki açıklama ayrıca bir sınır bildirir: Relax minimum password length limits ayarı tanımlı değilse en az parola uzunluğu en fazla 14 yapılabilir, bu ayar etkinse 128’e kadar çıkabilir. Baseline’ın 14 seçmesi bu sınırla uyumludur.

Bu karşılaştırma, baseline’ı uygulamadan önce hangi mevcut ayarınızın değişeceğini gösterir. Gerçek bir ortamda baseline’ı bir test OU’suna bağlamadan önce bu karşılaştırmayı yapmak, baseline uygulanınca ne bozulur? sorusunun yarısını cevaplar.

Adım 7: Hesap İlkeleri: Parola ve Hesap Kilitleme Politikası

Baseline’ların en çok merak edilen kısmı parola ve hesap kilitleme ayarlarıdır. Bu ayarların nasıl işlediği iyi bilinmezse en sık yapılan hata ortaya çıkar. O yüzden önce kuralı koyalım:

Uyarı: Parola ve hesap kilitleme ayarları, etki alanı hesapları için yalnızca etki alanı köküne bağlı GPO’dan (varsayılan olarak Default Domain Policy) geçerlidir. Bunları bir OU’ya bağlı GPO’ya yazarsanız etki alanı hesaplarını etkilemez. Yalnızca o OU’daki bilgisayarların yerel hesaplarını etkiler. Bu yüzden baseline’ın Domain Security GPO’su etki alanı köküne bağlanır, Computer GPO’su ise bilgisayar OU’larına.

Mevcut etki alanı parola politikasını görmek için GPMC’de Default Domain Policy‘ye sağ tıklayıp Edit ile açıyor, Computer Configuration > Policies > Windows Settings > Security Settings > Account Policies altındaki Password Policy ve Account Lockout Policy ayarlarına bakıyoruz.

Listede Relax minimum password length limits ayarı da görünür. Bu ayar açılmadıkça GPO düzenleyicisi 14 karakterin üstünde uzunluğa izin vermez. Baseline’ın 14’te durmasının nedeni budur. Daha uzun bir değer için aşağıda göreceğimiz Fine-Grained Password Policy nesnesini kullanacağız.

Eşik 0 iken kilit süresi ve sayaç sıfırlama Not Defined görünür. Bu iki ayar yalnızca eşik sıfırdan büyükse anlam taşır. PowerShell çıktısında 10 dakika görünmesinin nedeni, Active Directory’nin varsayılan değerleri göstermesidir.

PowerShell ile aynısı:

Get-ADDefaultDomainPasswordPolicy | Format-List ComplexityEnabled, MinPasswordLength, PasswordHistoryCount, MaxPasswordAge, MinPasswordAge, LockoutThreshold, LockoutDuration, LockoutObservationWindow, ReversibleEncryptionEnabled

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
MinPasswordLength En düşük parola uzunluğu Değiştirmeyin, okuma komutudur
MaxPasswordAge Parolanın en fazla kaç gün geçerli olduğu. 0 süresiz demektir Değiştirmeyin
LockoutThreshold Kaç hatalı denemeden sonra hesabın kilitleneceği. 0 kilitleme yok demektir Değiştirmeyin
LockoutDuration, LockoutObservationWindow Kilidin açılma süresi ve hatalı denemelerin sayıldığı pencere Değiştirmeyin

Güncel rehber ne diyor?

Yıllarca parola 90 günde bir değişsin, karmaşık olsun kuralı uygulandı. Güncel NIST SP (Special Publication) 800-63B rehberinin 4. sürümü bu alışkanlıkların çoğunu terk eder.

Rehbere göre parola doğrulayıcıları şu ilkeleri izler:

Ayar Eski Alışkanlık NIST (National Institute of Standards and Technology) SP (Special Publication) 800-63B-4 Yaklaşımı
Uzunluk En az 8 karakter Parola tek doğrulama faktörüyse en az 15 karakter, MFA’nın (Multi-Factor Authentication) bir parçasıysa en az 8 karakter. En az 64 karakterlik parolalar kabul edilmeli
Karmaşıklık kuralları Büyük harf, küçük harf, rakam ve sembol zorunlu Karmaşıklık kuralları dayatılmamalı
Zorunlu süreli değişim Her 90 günde bir değişiklik Süreli değişim istenmemeli. Parola yalnızca ele geçirildiği kanıtlandığında ya da şüphesi olduğunda değiştirilmeli
Yasaklı parola listesi Çoğu ortamda yok Sızmış, sözlük ve bağlama özgü (kullanıcı adı, kurum adı gibi) parolalara karşı kontrol zorunlu
Boşluk ve Unicode Çoğunda kısıtlıydı Boşluk ve Unicode karakterler kabul edilmeli

Aynı yönde Microsoft’un güncel baseline’ları da parola süre sonu ayarını önermez. Gerekçe basittir: Zorunlu değişim kullanıcıları Parola1, Parola2 gibi tahmin edilebilir değişikliklere iter. Uzun ve benzersiz bir parola, sık değişen kısa bir paroladan güçlüdür.

Ancak bu rehberi olduğu gibi uygulamadan önce üç şeye dikkat edin:

Fine-Grained Password Policy ile gruplara özel politika

Default Domain Policy etki alanındaki herkese tek bir parola politikası uygular. Bazı hesaplar, örneğin yöneticiler ya da servis hesapları, farklı bir politika gerektirir. Bunun için Fine-Grained Password Policy kullanılır. Bu ilke, PSO (Password Settings Object) adı verilen nesnelerle tanımlanır ve kullanıcılara ya da global güvenlik gruplarına uygulanır. Birden fazla PSO aynı kullanıcıya uygulanıyorsa Precedence değeri en düşük olan kazanır.

GUI ile PSO oluşturmak için ADAC (Active Directory Administrative Center) aracını açıp etki alanı adının altından System > Password Settings Container konumuna gidiyoruz. Burada sağ tıklayıp New > Password Settings seçiyoruz ve ayarları dolduruyoruz. Direct Applies To bölümünden politikanın uygulanacağı grubu ekliyoruz.

PowerShell ile laboratuvarda GG_Satis grubuna özel bir PSO oluşturuyoruz:

New-ADFineGrainedPasswordPolicy -Name "PSO-Satis" -Precedence 10 `
    -MinPasswordLength 15 -ComplexityEnabled $true -PasswordHistoryCount 24 `
    -MinPasswordAge "1.00:00:00" -MaxPasswordAge "0.00:00:00" `
    -LockoutThreshold 10 -LockoutDuration "00:15:00" -LockoutObservationWindow "00:15:00" `
    -ReversibleEncryptionEnabled $false
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Satis" -Subjects "GG_Satis"
Get-ADFineGrainedPasswordPolicy -Identity "PSO-Satis" | Format-List Name, Precedence, MinPasswordLength, MaxPasswordAge, LockoutThreshold, AppliesTo

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
PSO-Satis Oluşturulan parola ayarı nesnesinin adı Kendi adlandırma düzeniniz
-Precedence 10 Birden çok PSO (Password Settings Object) çakışırsa hangisinin kazanacağı. Küçük sayı önce gelir Kendi öncelik planınız. Her PSO için benzersiz bir değer verin
-MinPasswordLength 15 En az parola uzunluğu Kendi politikanız ya da uyumluluk gereksiniminiz
-MaxPasswordAge "0.00:00:00" Parola süre sonu. 0 süresiz demektir Kurumunuzun gereksinimi. Süre isteniyorsa "365.00:00:00" gibi gün cinsinden yazın
-LockoutThreshold 10 Hesabı kilitlemeden önce kabul edilen hatalı deneme sayısı Kendi kilitleme politikanız
-LockoutDuration, -LockoutObservationWindow Kilit süresi ve hatalı denemelerin sayıldığı pencere. Kilit süresi pencereden kısa olamaz Kendi değerleriniz
GG_Satis PSO’nun uygulanacağı global güvenlik grubu Kendi hedef grubunuz. Organizational Unit olamaz, yalnızca kullanıcı ya da global güvenlik grubu olabilir

Politikanın nihat.cubuk hesabına gerçekten uygulandığını doğruluyoruz:

Get-ADUserResultantPasswordPolicy -Identity "nihat.cubuk" | Format-List Name, Precedence, MinPasswordLength, MaxPasswordAge, LockoutThreshold

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
Get-ADUserResultantPasswordPolicy Bir kullanıcıya fiilen uygulanan parola politikasını gösterir. Kaynak, Default Domain Policy ya da PSO (Password Settings Object) olabilir Değiştirmeyin
nihat.cubuk Kontrol edilecek kullanıcı Kendi test kullanıcınız

Çıktıda Name olarak PSO-Satis görünürse politika uygulanıyor demektir. Hiçbir PSO uygulanmıyorsa komut boş döner ve kullanıcı Default Domain Policy‘nin kuralına tabidir.

Not: PSO’yu oluşturmak mevcut parolaları değiştirmez. Yeni uzunluk kuralı, kullanıcının bir sonraki parola değişiminde uygulanır. Bu yüzden nihat.cubuk parolasını değiştirirken kural devreye girer.

Adım 8: Geri almak ve temizlemek

Bir baseline denemesinin sonunda en önemli adım, laboratuvarı bilinen bir duruma döndürmektir.

Önce istemciyi eski OU’suna taşıyoruz, ardından istersek GPO’yu, OU’yu ve PSO’yu siliyoruz:

$eskiKonum = "OU=Satis,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech"
Move-ADObject -Identity (Get-ADComputer "W11CLIENT").DistinguishedName -TargetPath $eskiKonum
Get-ADComputer "W11CLIENT" | Select-Object Name, DistinguishedName

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
$eskiKonum İstemcinin Adım 4’te not ettiğiniz eski OU’su (Organizational Unit) Adım 4’te yazdırdığınız $eskiKonum çıktısı

İstemcide gpupdate /force çalıştırıp yeniden başlatıyoruz. Baseline’ın bazı ayarları, GPO artık uygulanmasa bile kendiliğinden eski haline dönmeyebilir. Çünkü baseline’ın yazdığı ayarlar kalıcı kayıt defteri değerleridir. Tam geri dönüş için VM checkpoint’ine dönmek en güvenli yoldur.

İsteğe bağlı tam temizlik. Bu komutlar baseline GPO’sunu, test OU’sunu ve PSO’yu siler:

Remove-GPLink -Name "C - Baseline - Win11 Bilgisayar" -Target "OU=Baseline,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech" | Out-Null
Remove-GPO -Name "C - Baseline - Win11 Bilgisayar"
Remove-ADOrganizationalUnit -Identity "OU=Baseline,OU=Bilgisayarlar,OU=LAB,DC=bakicubuk,DC=tech" -Confirm:$false
Remove-ADFineGrainedPasswordPolicy -Identity "PSO-Satis" -Confirm:$false

Kendi ortamınıza uyarlarken:

Değer Ne Anlama Gelir Neyle Değiştirilmeli
Remove-GPLink GPO’nun (Group Policy Object) OU (Organizational Unit) bağlantısını kaldırır. Remove-GPO önce bağlantıyı kaldırmayı gerektirir Değiştirmeyin
Remove-ADOrganizationalUnit OU’yu siler. İçinde nesne varsa silinmez Kendi test OU’nuzun yolu
Remove-ADFineGrainedPasswordPolicy PSO’yu (Password Settings Object) siler. Kullanıcılar Default Domain Policy‘ye geri döner Kendi PSO adınız

Sonraki bölümde başka bir GPO’ya ihtiyaç duyabileceğimiz için U - Satis - Duvar Kagidi GPO’sunu silmiyoruz.

4. Tespit ve Savunma: Neyi İzlemeli, Neyi Kapatmalı?

Baseline’ın uygulanması bir kerelik iş değildir. Birisi baseline GPO’sunu sessizce zayıflatabilir ya da parola politikasını değiştirebilir.

Aşağıdaki olaylar bunu görmenizi sağlar:

Olay Kimliği Günlük Ne Anlama Gelir Neden Önemli
4739 Security (domain controller) Etki alanı ilkesi değişti Parola ya da kilitleme politikasında bir değişiklik olduğunu gösterir
5136, 5137, 5141 Security (domain controller) AD (Active Directory) nesnesi değişti, oluşturuldu ya da silindi Baseline GPO’sunda (Group Policy Object) ya da PSO (Password Settings Object) nesnelerinde (msDS-PasswordSettings) değişiklik izini gösterir
4740 Security (domain controller) Bir hesap kilitlendi Parola deneme saldırısı ya da kullanıcı sorunu göstergesi. Çok sayıda hesap aynı anda kilitleniyorsa parola püskürtme (password spraying) olabilir
4767 Security (domain controller) Bir hesabın kilidi açıldı Kilidi kimin açtığını gösterir
4625 Security (istemci ve sunucular) Bir oturum açma denemesi başarısız oldu Hatalı parola denemelerinin kaynağını ve hesabını gösterir
4724 Security (domain controller) Bir hesabın parolası sıfırlandı Yetkili birinin başka bir hesabın parolasını sıfırladığını gösterir

Önlemleri öncelik sırasıyla şöyle sıralayabiliriz:

  1. Baseline’ı doğrudan canlıya bağlamayın. Önce test OU’sunda deneyin, uygulama uyumluluğunu doğrulayın, sonra aşamalı olarak genişletin.
  2. İstisnaları ayrı GPO’da tutun. Baseline’ı değiştirmek yerine, ondan sonra işlenen ve neden gerektiğini açıklayan bir GPO kullanın. Böylece baseline güncellendiğinde istisnalarınız kaybolmaz.
  3. Baseline GPO’sunun yazma yetkisini sınırlayın. Bölüm 6‘daki Get-GPPermission taramasını baseline GPO’larına da uygulayın. Baseline’ı zayıflatmak isteyen biri önce bu GPO’yu değiştirmeye çalışır.
  4. Parola politikasını hesap türüne göre ayırın. Yönetici ve servis hesapları için ayrı PSO kullanın. Yönetici hesaplarına daha uzun parola ve daha sıkı kilitleme verin.
  5. Yasaklı parola listesi ekleyin. AD’de yerleşik değildir. Karmaşıklık kuralını kaldırmayı düşünüyorsanız önce bunu çözün.
  6. MFA ve ayrıcalıklı hesap yönetimi ekleyin. Parola politikası tek başına yeterli değildir. Yönetici hesapları için MFA ve yerel yönetici parolaları için Windows LAPS (Local Administrator Password Solution) kullanın.
  7. Baseline sürümünü takip edin. Yeni Windows sürümleriyle baseline güncellenir. Yılda en az bir kez güncel baseline ile mevcut GPO’larınızı Policy Analyzer ile karşılaştırın.
  8. Kilitleme olaylarını izleyin. 4740 olaylarını SIEM’e (Security Information and Event Management) alın. Tek bir kaynaktan çok sayıda farklı hesaba gelen hatalı denemeleri uyarıya bağlayın.

5. Güvenlik Açısından Bu Bölümün Dersleri

6. Özet ve Sonraki Bölüm

  1. Microsoft Security Baseline, Windows için hazır, gerekçeli ve güncel bir ayar kümesidir. GPO yedeği olarak gelir ve Import-GPO ile aktarılır.
  2. Baseline’ı doğrudan canlı ortama bağlamak yerine bir test OU’sunda deneyin. Etkiyi istemcide gpresult ve kayıt defteri değerleriyle doğrulayın.
  3. Baseline’ın ek şablonlarını (ADMX ve ADML) merkezi depoya ekleyin, aksi halde bazı ayarlar GPMC’de ham kayıt defteri değeri olarak görünür.
  4. İstisnaları baseline’ı değiştirerek değil, ayrı bir GPO ile yapın.
  5. Parola ve hesap kilitleme ayarları, etki alanı hesapları için yalnızca etki alanı köküne bağlı GPO’dan (Default Domain Policy) geçerlidir.
  6. Güncel NIST rehberi, zorunlu süreli değişimi ve karmaşıklık kurallarını terk eder, uzunluğa ve yasaklı parola listesine ağırlık verir. Bu rehberi uygularken yasaklı liste, MFA ve uyumluluk gereksinimlerini birlikte düşünün.
  7. Gruplara özel parola kuralı için Fine-Grained Password Policy (PSO) kullanın. Get-ADUserResultantPasswordPolicy ile hangi politikanın uygulandığını doğrulayın.

Sonraki bölüm: Bölüm 8’de seriyi GPO hijyeni ve raporlamayla kapatıyoruz. Kullanılmayan ve yetim GPO’ları bulmayı, GPO’ları yedeklemeyi ve geri yüklemeyi, değişiklik takibini ve düzenli raporlamayı ele alıyoruz.

Kısaltmalar

Yazıda geçen kısaltmaların açılımlarını ve kısa açıklamalarını aşağıdaki tabloda bir arada bulabilirsiniz.

Kısaltma Açılımı Açıklama
AD Active Directory Microsoft’un kullanıcı, bilgisayar ve grup gibi nesneleri merkezi olarak yöneten dizin hizmeti
ADAC Active Directory Administrative Center AD nesnelerini ve parola ayarı nesnelerini yöneten grafik arayüz
ADML Administrative Template Language ADMX dosyalarındaki ayarların dile özgü metinlerini tutan dosya
ADMX Administrative Template XML Administrative Templates ayarlarını tanımlayan XML tabanlı şablon dosyası
CSE Client-Side Extension İstemcide belirli bir ayar türünü (registry, drive map, script vb.) işleyen uzantı
GPMC Group Policy Management Console GPO oluşturma, link etme, raporlama ve yönetim konsolu
GPO Group Policy Object Ayarları içeren ve site, domain ya da OU’ya link edilen Group Policy nesnesi
GUID Globally Unique Identifier Nesneleri benzersiz şekilde tanımlayan 128 bitlik kimlik değeri
HTML HyperText Markup Language Web sayfası ve rapor biçimlendirme dili
LAPS Local Administrator Password Solution Yerel yönetici parolalarını her makine için benzersiz üreten ve yöneten Microsoft çözümü
LGPO Local Group Policy Object Utility Yerel GPO’ları dışa ve içe aktarmak için kullanılan Microsoft aracı
LM LAN Manager NTLM öncesi, zayıf parola özetleme yöntemi kullanan eski kimlik doğrulama
MFA Multi-Factor Authentication Kimlik doğrulamada parolaya ek olarak ikinci bir doğrulama faktörü isteyen yöntem
NIST National Institute of Standards and Technology ABD kökenli, güvenlik rehberleri yayımlayan standart kuruluşu
NTLM NT LAN Manager Windows ağlarında kullanılan eski kimlik doğrulama protokol ailesi
OU Organizational Unit AD içinde nesneleri gruplamak ve GPO link etmek için kullanılan konteyner
PCI DSS Payment Card Industry Data Security Standard Kart verisi işleyen kurumlar için güvenlik standardı
PSO Password Settings Object Fine-Grained Password Policy ile gruplara özel parola politikası tanımlayan nesne
SCT Security Compliance Toolkit Microsoft güvenlik baseline GPO yedeklerini ve analiz araçlarını sunan araç seti
SIEM Security Information and Event Management Günlükleri toplayıp ilişkilendiren ve uyarı üreten güvenlik izleme platformu
SMB Server Message Block Windows dosya ve yazıcı paylaşım protokolü
SP Special Publication NIST rehberlerinin yayın serisi adı
SYSVOL System Volume GPO dosyalarını ve logon script’lerini tutan, domain controller’lar arasında replike edilen paylaşım
UNC Universal Naming Convention Ağ kaynaklarını \\sunucu\paylaşım biçiminde gösteren yol yazımı

 

Exit mobile version