AppLocker ile Uygulama Beyaz Liste Yönetimi

Kurumsal ortamlarda en sık karşılaşılan güvenlik sorunlarından biri, kullanıcıların yetkisiz yazılımlar çalıştırmasıdır. Bir muhasebe çalışanının torrent istemcisi kurması, bir satış temsilcisinin “işe yarar” diye indirdiği crack’li yazılımın ağa sıçraması… Bunların hepsini engellemek için AppLocker tam olarak ihtiyacınız olan araç. Windows Server 2008 R2 ile hayatımıza giren bu özellik, Group Policy üzerinden yönetilen, kural tabanlı bir uygulama beyaz liste mekanizması sunuyor. Bugün AppLocker’ı sıfırdan kurup production ortamına hazır hale getireceğiz.

AppLocker Nedir ve Neden Önemlidir?

AppLocker, Software Restriction Policies’in (SRP) yerini alan ve ondan çok daha gelişmiş bir uygulama kontrol mekanizmasıdır. Temel farkı şu: SRP hash veya yol bazlı çalışırken, AppLocker publisher kuralları sayesinde dijital imzaya dayalı kontrol yapabilir. Yani “Microsoft imzalı uygulamalara izin ver” gibi esnek ama güvenli kurallar tanımlayabilirsiniz.

AppLocker’ın kontrol ettiği kural kategorileri şunlardır:

  • Executable Rules: .exe ve .com uzantılı dosyalar
  • Windows Installer Rules: .msi, .msp, .mst dosyaları
  • Script Rules: .ps1, .bat, .cmd, .vbs, .js dosyaları
  • Packaged App Rules: Modern UWP uygulamaları
  • DLL Rules: .dll ve .ocx dosyaları (dikkatli kullanın, performans etkisi var)

Önemli not: AppLocker, Enterprise ve Education sürümlerinde tam çalışır. Pro sürümünde politikaları tanımlayabilirsiniz ama Application Identity servisi olmadan enforcement çalışmaz.

Ön Hazırlık ve Planlama

AppLocker’a geçmeden önce ortamınızı iyice tanımanız şart. Aceleyle uygulanan bir beyaz liste politikası, sabah 8’de 200 kullanıcının bilgisayarını kullanılmaz hale getirebilir. Bu yüzden önce Audit modu ile başlayın.

İlk adım olarak hangi makinelerde hangi uygulamaların çalıştığını belirleyin. Bunun için PowerShell kullanabilirsiniz:

# Mevcut sistemdeki kurulu uygulamaları listele
Get-WmiObject -Class Win32_Product | 
    Select-Object Name, Version, Vendor | 
    Sort-Object Name | 
    Export-Csv -Path "C:Auditinstalled_apps.csv" -NoTypeInformation -Encoding UTF8
# Belirli bir dizindeki tüm exe dosyalarını tara
Get-ChildItem -Path "C:Program Files", "C:Program Files (x86)" -Recurse -Include "*.exe" |
    Select-Object Name, DirectoryName, 
        @{N="Version";E={$_.VersionInfo.FileVersion}},
        @{N="Publisher";E={$_.VersionInfo.CompanyName}} |
    Export-Csv -Path "C:Auditexe_inventory.csv" -NoTypeInformation -Encoding UTF8

Bu taramanın ardından bir “uygulama envanteri” oluşturun. Departman bazında hangi uygulamaların gerekli olduğunu belirleyin. Muhasebe için SAP, geliştirme ekibi için Visual Studio, genel kullanıcılar için Office paketi gibi gruplandırmalar yapın.

Application Identity Servisini Aktif Etme

AppLocker’ın çalışabilmesi için Application Identity (AppIDSvc) servisi mutlaka çalışıyor olmalı. Bu servisi Group Policy üzerinden başlatmak en doğru yaklaşım:

# Servis durumunu kontrol et
Get-Service -Name AppIDSvc | Select-Object Name, Status, StartType

# Manuel olarak başlat (test ortamı için)
Start-Service -Name AppIDSvc
Set-Service -Name AppIDSvc -StartupType Automatic

Production’da bu ayarı GPO üzerinden yapın: Computer Configuration > Windows Settings > Security Settings > System Services > Application Identity

Group Policy Üzerinden AppLocker Yapılandırması

GPO Oluşturma ve Temel Yapılandırma

Domain Controller’da GPMC (Group Policy Management Console) açın ve yeni bir GPO oluşturun. Ben genellikle şu şekilde isimlendiriyorum: “SEC-AppLocker-[HedefOU]-[Tarih]”. Bu sayede hangi OU’ya uygulandığını ve ne zaman oluşturulduğunu hemen görebiliyorsunuz.

GPO içinde AppLocker ayarlarına şu yoldan ulaşırsınız: Computer Configuration > Policies > Windows Settings > Security Settings > Application Control Policies > AppLocker

Varsayılan Kuralları Oluşturma

AppLocker’da hiç kural yoksa veya “Configured” modundaysa, hiçbir şey çalışmaz. Bu yüzden her kural koleksiyonu için mutlaka varsayılan kuralları oluşturun. PowerShell ile bunu şöyle yapabilirsiniz:

# AppLocker modülünü kullanarak mevcut politikayı görüntüle
Get-AppLockerPolicy -Effective | ConvertTo-Xml | 
    Select-Xml -XPath "//Rule" | 
    ForEach-Object { $_.Node } | 
    Select-Object Name, Action, UserOrGroupSid

GUI üzerinden “Executable Rules” üzerine sağ tıklayıp “Create Default Rules” seçeneği, şu üç kuralı otomatik oluşturur:

  • Windows klasörüne izin: %WINDIR%* altındaki her şey
  • Program Files iznine izin: %PROGRAMFILES% ve %PROGRAMFILES(X86)%
  • Yöneticilere tam izin: Built-in Administrators grubundaki kullanıcılar her şeyi çalıştırabilir

Bu varsayılan kurallar olmadan başlamayın. Önce bunları oluşturun, sonra üzerine inşa edin.

Kural Türleri ve Gerçek Dünya Uygulamaları

Publisher Kuralları (En Güvenilir Yöntem)

Dijital imzaya dayalı bu kurallar, dosya yolu veya hash değişse bile geçerlidir. Örneğin Microsoft Office’i güncelledikten sonra hash değişir ama publisher kuralı hala geçerli kalır.

# Belirli bir exe dosyasından publisher kuralı bilgisi al
Get-AppLockerFileInformation -Path "C:Program FilesMicrosoft OfficerootOffice16WINWORD.EXE" |
    Select-Object -ExpandProperty Publisher

Çıktıda göreceğiniz PublisherName, ProductName ve BinaryName alanlarını kullanarak granüler kurallar oluşturabilirsiniz. “O=MICROSOFT CORPORATION” publisher’ına ait tüm Microsoft ürünlerine izin vermek veya sadece “WINWORD.EXE” dosyasına izin vermek arasında seçim yapabilirsiniz.

Hash Kuralları

İmzasız uygulamalar için tek güvenilir yöntem hash kullanmaktır. Dezavantajı şu: uygulama her güncellendiğinde hash değişir ve kuralı güncellemeniz gerekir.

# Birden fazla dosya için hash bilgisi al
$apps = Get-ChildItem -Path "C:CustomApps" -Filter "*.exe"
$hashInfo = foreach ($app in $apps) {
    Get-AppLockerFileInformation -Path $app.FullName
}
$hashInfo | Export-Csv -Path "C:Auditapp_hashes.csv" -NoTypeInformation

Path Kuralları

En az güvenilir yöntem ama en kolay yönetilen. Dikkat: Kullanıcıların yazma iznine sahip olduğu bir yolu izin listesine eklerseniz, oraya koyulan her şey çalışır.

Kullanmamanız gereken path kuralı örnekleri:

  • C:Users veya %USERPROFILE%: Kullanıcılar kendi klasörlerine yazabilir
  • C:Temp*: Herkes bu klasöre yazabilir
  • Sürücü kökü: Tüm USB disklere erişim açılır

Audit Modundan Enforcement Moduna Geçiş

Bu en kritik adım. Doğrudan enforcement moduna geçmeyin. Benim önerdiğim süreç şöyle işler:

1. Hafta – Audit Modu: Politikayı audit modunda devreye alın. Event Log’u izleyin.

2. Hafta – Log Analizi: Engellenen uygulamaları belirleyin ve meşru olanlar için kurallar ekleyin.

3. Hafta – Pilot Grup: Enforcement modunu IT ekibi ve gönüllü kullanıcılardan oluşan küçük bir grupla test edin.

4. Hafta – Genel Yayılım: Sorunlar çözüldükten sonra tüm ortama uygulayın.

Event Log’da AppLocker olaylarını takip etmek için:

# AppLocker audit olaylarını çek (Event ID 8003: Engellendi, 8002: İzin verildi audit modunda)
Get-WinEvent -LogName "Microsoft-Windows-AppLocker/EXE and DLL" -MaxEvents 100 |
    Where-Object { $_.Id -in @(8003, 8004) } |
    Select-Object TimeCreated, Id, Message |
    Format-List
# Son 24 saatteki engelleme olaylarını filtrele
$startTime = (Get-Date).AddHours(-24)
Get-WinEvent -FilterHashtable @{
    LogName = "Microsoft-Windows-AppLocker/EXE and DLL"
    Id = @(8003, 8004)
    StartTime = $startTime
} | Select-Object TimeCreated, 
    @{N="UserName";E={$_.Properties[1].Value}},
    @{N="FilePath";E={$_.Properties[0].Value}} |
    Export-Csv -Path "C:Auditblocked_apps_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Departman Bazlı Politika Yönetimi

Gerçek ortamda tek bir politika yetmez. Geliştiriciler PowerShell ve script araçlarına ihtiyaç duyarken, muhasebe departmanı için bunlar gereksiz ve tehlikelidir.

Script Kurallarını Yapılandırma

Muhasebe ve İK gibi departmanlar için PowerShell erişimini kısıtlamak iyi bir uygulama:

# Mevcut AppLocker politikasını XML olarak dışa aktar
Get-AppLockerPolicy -Effective -Xml | Out-File -FilePath "C:Backupapplocker_policy_$(Get-Date -Format 'yyyyMMdd').xml"

# Yerel politikayı XML dosyasından yükle
Set-AppLockerPolicy -XmlPolicy "C:Policiesapplocker_production.xml"

Geliştiriciler için ayrı bir GPO oluşturun ve bu GPO’yu Developers OU’suna uygulayın. Bu GPO’da script kurallarını daha permissive tutun ama yine de “sadece imzalı PowerShell scriptleri çalıştır” gibi bir kural ekleyebilirsiniz.

Kural Gruplarını Test Etme

# Belirli bir kullanıcı için hangi AppLocker kurallarının geçerli olduğunu test et
$policy = Get-AppLockerPolicy -Effective
Test-AppLockerPolicy -Policy $policy -Path "C:UserstestuserDownloadssuspicious.exe" -User "DOMAINtestuser"

Bu komut size “Allowed” veya “Denied” çıktısı verir ve hangi kural tetiklendiğini gösterir. Kural sorunlarını debug ederken çok işinize yarar.

DLL Kuralları Hakkında Önemli Not

DLL kurallarını aktif etmekten kaçının, en azından başlangıçta. Sebepleri:

  • Windows her işlem için yüzlerce DLL yükler, bu kontroller ciddi performans düşüşüne neden olur
  • Varsayılan DLL kuralları olmadan sistem tamamen çalışmaz hale gelebilir
  • Hata ayıklaması son derece zordur

Eğer gerçekten DLL kontrolü gerekiyorsa, önce sadece kritik sistem bileşenlerini kapsayan bir politika oluşturun ve performans etkisini ölçün.

Acil Durum ve Kurtarma Prosedürleri

AppLocker’ın en önemli risklerinden biri “kilitlenme” senaryosudur. Bir politika hatası yüzünden yönetici araçlarının bile çalışmaması mümkündür. Bu senaryolara hazırlıklı olun.

Kurtarma Adımları:

  • Safe Mode: AppLocker politikaları Safe Mode’da uygulanmaz. Bu en hızlı kurtarma yöntemidir.
  • Yerel Yönetici Hesabı: Built-in Administrator hesabı (RID 500) AppLocker kurallarından muaftır, aktif tutun.
  • GPO Bağlantısını Kesme: Domain’e bağlı sistemlerde GPO bağlantısını kesmek politikayı devre dışı bırakır.
# Yerel AppLocker politikasını temizle (acil durum)
Set-AppLockerPolicy -XmlPolicy "C:Emergencyempty_policy.xml"

# Boş politika XML içeriği
# <?xml version="1.0" encoding="utf-8"?>
# <AppLockerPolicy Version="1">
# </AppLockerPolicy>

AppLocker politikası değişikliklerini her zaman test ortamında deneyin. Production’da “bakalım ne olacak” mantığıyla çalışmayın.

İzleme ve Raporlama

Sürekli izleme olmadan AppLocker’ın değeri yarı yarıya düşer. Hangi uygulamaların engelleniyor olduğunu düzenli olarak gözden geçirin:

# Haftalık rapor oluştur
$weekAgo = (Get-Date).AddDays(-7)
$logs = @(
    "Microsoft-Windows-AppLocker/EXE and DLL",
    "Microsoft-Windows-AppLocker/MSI and Script",
    "Microsoft-Windows-AppLocker/Packaged app-Execution"
)

$report = foreach ($log in $logs) {
    try {
        Get-WinEvent -FilterHashtable @{
            LogName = $log
            Id = @(8003, 8004)
            StartTime = $weekAgo
        } -ErrorAction Stop |
        Select-Object TimeCreated,
            @{N="LogType";E={$log}},
            @{N="User";E={$_.Properties[1].Value}},
            @{N="Path";E={$_.Properties[0].Value}}
    } catch {
        Write-Verbose "Log bulunamadi: $log"
    }
}

$report | Export-Csv -Path "C:ReportsAppLocker_Weekly_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Write-Host "Toplam engelleme sayisi: $($report.Count)"

Bu raporu haftalık olarak gözden geçirin. Meşru bir uygulama sürekli engelleniyorsa kurallarınızı güncelleyin. Bilinmeyen bir uygulama tekrar tekrar deneniyorsa bu bir güvenlik uyarısı olabilir.

Sık Yapılan Hatalar ve Çözümleri

Application Identity Servisi Çalışmıyor: En yaygın sorun. GPO ile otomatik başlatmayı ayarlayın ve servisi izleyin.

Varsayılan Kurallar Olmadan Başlamak: Bir kural kategorisini “Configured” yapıp varsayılan kurallar eklemeden bırakırsanız, o kategorideki hiçbir şey çalışmaz.

Kullanıcıların Yazabildiği Yollara İzin Vermek: AppData, Temp, Downloads gibi klasörleri path kuralıyla izin listesine eklemeyin. Malware bu açıktan yararlanır.

DLL Kurallarını Çok Erken Aktif Etmek: Önce exe, script ve installer kurallarını stabilize edin.

Audit Mode Loglarını İzlememek: Audit modunda geçirilen süreyi boşa harcamak demek. Log analizi yapılmadan enforcement moduna geçilmemelidir.

Sadece Bir Politika Kullanmak: Tüm kullanıcılara aynı kısıtlamayı uygulamak hem güvenlik açığı hem de verimlilik kaybı yaratır. OU bazlı GPO yapısı kurun.

Sonuç

AppLocker, doğru yapılandırıldığında kurumsal ortamlarda uygulama kontrolü için son derece etkili bir araçtır. Ama “doğru yapılandırma” kısmı gerçekten önemli. Acele etmeyin, audit modunda en az iki hafta geçirin, logları düzenli analiz edin ve departman bazlı politikalar oluşturun.

Deneyimlerime göre AppLocker’ın en büyük değeri, ransomware ve trojan gibi tehditlerin kullanıcı dizinlerinden çalışmasını engellemesidir. %Documents% veya %Downloads% altından çalışan bir executable, varsayılan kurallarınız doğru ayarlıysa hiç şans bulamaz.

Bir şeyi daha ekleyeyim: AppLocker tek başına yeterli değildir. Windows Defender, güçlü bir GPO yapısı, düzenli patch management ve kullanıcı eğitimi ile birleştiğinde gerçekten sağlam bir savunma katmanı oluşturur. AppLocker’ı katmanlı güvenlik stratejinizin bir parçası olarak konumlandırın, tek çözüm olarak değil.

Sorularınızı yorumlarda paylaşabilirsiniz. Özellikle “X uygulamasını nasıl izin listesine eklerim” gibi spesifik sorular için elimden geleni yapayım.

Yorum yapın