UAC Kullanıcı Hesabı Denetimi Güvenlik Ayarları
Windows ortamlarında güvenliği sağlamanın en kritik ama aynı zamanda en çok yanlış anlaşılan bileşenlerinden biri UAC’dir. Pek çok sistem yöneticisi ve son kullanıcı, UAC’yi can sıkıcı bir pop-up mekanizması olarak görüp devre dışı bırakıyor. Oysa bu karar, sisteminizi ciddi güvenlik açıklarına karşı savunmasız bırakmak anlamına geliyor. Bu yazıda UAC’nin gerçekte ne işe yaradığını, nasıl çalıştığını ve kurumsal ortamlarda nasıl doğru yapılandırılması gerektiğini derinlemesine ele alacağız.
UAC Nedir ve Neden Önemlidir?
UAC (User Account Control / Kullanıcı Hesabı Denetimi), Windows Vista ile hayatımıza giren ve o günden bu yana Windows güvenlik mimarisinin temel taşlarından biri olan bir güvenlik mekanizmasıdır. Temel prensibi oldukça basit: Standart kullanıcı yetkisiyle çalışan işlemler, yönetici yetkisi gerektiren bir eylem yapmak istediğinde kullanıcıdan onay alınmasını zorunlu kılar.
Bunu şöyle düşünebilirsiniz. Bir çalışana ofis anahtarı veriyorsunuz ama sunucu odasına girebilmesi için her seferinde güvenlik görevlisinin onay vermesi gerekiyor. Bu sayede çalışan ya da çalışanın bilgisayarında çalışan zararlı bir yazılım, sunucu odasına izinsiz giremez.
UAC olmadan, standart bir kullanıcı hesabıyla oturum açmış biri tarafından çalıştırılan bir uygulama otomatik olarak yönetici yetkilerine sahip olabilir. Fidye yazılımları, rootkit’ler ve diğer kötü amaçlı yazılımlar tam da bu boşluğu kullanır.
UAC’nin Çalışma Prensibi
Windows, bir uygulama çalıştırıldığında önce o uygulamanın manifest dosyasına bakar. Bu manifest dosyası uygulamanın hangi yetki seviyesinde çalışmak istediğini tanımlar. Üç temel seçenek vardır:
- asInvoker: Uygulamayı başlatan kullanıcının mevcut yetki seviyesiyle çalışır
- requireAdministrator: Her zaman yönetici yetkisi gerektirir
- highestAvailable: Kullanıcının sahip olduğu en yüksek yetki seviyesiyle çalışır
Bir uygulama yönetici yetkisi istediğinde, Windows arka planda iki farklı token oluşturur. Biri standart kullanıcı token’ı, diğeri ise yönetici token’ıdır. UAC onay penceresi göründüğünde ve kullanıcı onay verdiğinde, uygulama yönetici token’ıyla çalıştırılır.
UAC Güvenlik Seviyeleri
Windows, UAC için dört farklı güvenlik seviyesi sunar. Bunları Registry üzerinden veya Group Policy aracılığıyla yönetebilirsiniz.
Seviye 1: Her Zaman Bildir (En Güvenli)
Bu seviyede hem Windows değişiklikleri hem de uygulama kurulumları için her seferinde UAC penceresi gösterilir. Güvenli masaüstüne (Secure Desktop) geçilir ve ekran kararır.
# Registry üzerinden UAC seviyesini ayarlamak için PowerShell
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" `
-Name "ConsentPromptBehaviorAdmin" -Value 2 -Type DWord
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" `
-Name "PromptOnSecureDesktop" -Value 1 -Type DWord
Seviye 2: Varsayılan Ayar
Uygulamalar değişiklik yapmaya çalıştığında bildirim gösterir fakat Windows sistem ayarlarında yapılan değişikliklerde bildirmez. Kurumsal ortamlar için genellikle bu seviye yeterlidir.
# Varsayılan UAC ayarı
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" `
-Name "ConsentPromptBehaviorAdmin" -Value 5 -Type DWord
Seviye 3: Masaüstü Kararmadan Bildir
UAC penceresi gösterilir fakat Secure Desktop aktifleşmez. Bu, güvenlik açısından daha zayıf bir yapılandırmadır çünkü zararlı yazılımlar UAC penceresini taklit edebilir.
Seviye 4: Hiçbir Zaman Bildirme (En Tehlikeli)
UAC tamamen devre dışı bırakılır. Kurumsal ortamlarda kesinlikle önerilmez.
# UAC'yi devre dışı bırakmak (YAPMAYIN!)
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" `
-Name "EnableLUA" -Value 0 -Type DWord
Önemli Registry Anahtarları
UAC’nin davranışını kontrol eden tüm Registry anahtarları HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem altında bulunur. En kritik olanları şunlardır:
- EnableLUA: UAC’yi tamamen açar veya kapatır (0 = kapalı, 1 = açık)
- ConsentPromptBehaviorAdmin: Yönetici hesapları için UAC davranışını belirler
- ConsentPromptBehaviorUser: Standart kullanıcılar için UAC davranışını belirler
- PromptOnSecureDesktop: Güvenli masaüstü kullanımını kontrol eder
- EnableVirtualization: Dosya ve Registry sanallaştırmasını kontrol eder
- FilterAdministratorToken: Yerleşik Administrator hesabı için filtrelemeyi açar
# Mevcut UAC ayarlarını kontrol etmek için
$uacSettings = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem"
Write-Host "EnableLUA: $($uacSettings.EnableLUA)"
Write-Host "ConsentPromptBehaviorAdmin: $($uacSettings.ConsentPromptBehaviorAdmin)"
Write-Host "ConsentPromptBehaviorUser: $($uacSettings.ConsentPromptBehaviorUser)"
Write-Host "PromptOnSecureDesktop: $($uacSettings.PromptOnSecureDesktop)"
Group Policy ile UAC Yönetimi
Kurumsal ortamlarda UAC ayarlarını her bilgisayarda ayrı ayrı yapmak pratik değildir. Group Policy kullanarak tüm domain bilgisayarlarına merkezi olarak politika uygulayabilirsiniz.
GPO ayarları şu yolda bulunur: Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options
Kritik politikalar şunlardır:
- User Account Control: Run all administrators in Admin Approval Mode: UAC’nin temel anahtarı
- User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode: Yöneticilerin nasıl onay vereceğini belirler
- User Account Control: Switch to the secure desktop when prompting for elevation: Güvenli masaüstü kullanımı
- User Account Control: Only elevate executables that are signed and validated: Yalnızca imzalı uygulamaların yükseltilmesine izin verir
# PowerShell ile GPO UAC ayarlarını kontrol etmek
Import-Module GroupPolicy
# UAC ile ilgili tüm politikaları listele
Get-GPOReport -All -ReportType HTML -Path "C:ReportsUAC_GPO_Report.html"
Gerçek Dünya Senaryo 1: Kurumsal UAC Bypass Tespiti
Bir gün SOC ekibinizden alarm geliyor. Bir çalışanın bilgisayarında şüpheli aktivite tespit edilmiş. Büyük ihtimalle UAC bypass girişimiyle karşı karşıyasınız. Nasıl araştırırsınız?
Windows Event Log’larında UAC ile ilgili olaylar Event ID 4688 (yeni süreç oluşturma) ve Event ID 4703 altında takip edilebilir. Bunun yanı sıra Security log’da 4624 ve 4648 event’ları da incelenmelidir.
# Son 24 saatteki UAC ile ilgili olayları çekmek
$startTime = (Get-Date).AddHours(-24)
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4688
StartTime = $startTime
} | Where-Object {
$_.Message -like "*consent.exe*" -or
$_.Message -like "*eventvwr*" -or
$_.Message -like "*fodhelper*"
} | Select-Object TimeCreated, Message | Format-List
Yukarıdaki sorguda eventvwr ve fodhelper gibi isimlere bakıyoruz çünkü bunlar en yaygın UAC bypass tekniklerinde kullanılan meşru Windows araçlarıdır. Kötü niyetli kişiler bu araçları kötüye kullanarak UAC onay penceresi göstermeden yönetici yetkisi elde etmeye çalışır.
Gerçek Dünya Senaryo 2: Servis Hesapları ve UAC
Bir uygulamanın servis hesabıyla çalışması ve zaman zaman yönetici yetkisi gerektiren işlemler yapması gerekiyor. Bu durumda ne yapmalısınız?
En iyi yaklaşım, o uygulamayı Local System yerine minimum yetkili özel bir servis hesabıyla çalıştırmak ve yalnızca ihtiyaç duyduğu kaynaklar üzerinde yetki vermektir.
# Yeni bir servis hesabı oluşturmak ve UAC ayarlarını yapılandırmak
$securePassword = ConvertTo-SecureString "GucluSifre123!" -AsPlainText -Force
New-LocalUser -Name "SVC_AppService" `
-Password $securePassword `
-Description "Uygulama servis hesabi" `
-PasswordNeverExpires $true `
-AccountNeverExpires
# Hesabı Administrators grubuna eklemek yerine
# sadece gerekli izinleri verin
$acl = Get-Acl -Path "C:AppDataSpecificFolder"
$permission = "DOMAINSVC_AppService","Modify","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
Set-Acl -Path "C:AppDataSpecificFolder" -AclObject $acl
UAC Bypass Teknikleri ve Korunma Yöntemleri
Saldırganların kullandığı en yaygın UAC bypass teknikleri ve bunlara karşı nasıl korunabileceğinizi bilmek, savunma açısından kritiktir.
DLL Hijacking ile UAC Bypass: Yüksek yetkili bir uygulama, güvenilir olmayan bir konumdan DLL yüklemeye çalıştığında kötü amaçlı DLL yerleştirilebilir.
Token Impersonation: Yüksek yetkili bir sürecin token’ı çalınarak yetkisiz işlemler yapılır.
Fodhelper.exe Bypass: Windows 10’da bulunan bu araç, belirli Registry anahtarlarını manipüle ederek UAC’yi atlamak için kullanılabilir.
Korunma yöntemleri:
- UAC seviyesini en yüksek konuma alın ve Secure Desktop’u aktif tutun
- Sadece imzalı uygulamaların yükseltilmesine izin verin
- Uygulama whitelisting (AppLocker veya Windows Defender Application Control) kullanın
- Endpoint Detection and Response (EDR) çözümleri kullanın
- Kullanıcıları yerel yönetici grubuna eklemeyin
# AppLocker politikasını kontrol etmek
Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections
# Windows Defender Application Control durumunu kontrol et
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace rootMicrosoftWindowsDeviceGuard |
Select-Object CodeIntegrityPolicyEnforcementStatus, UsermodeCodeIntegrityPolicyEnforcementStatus
UAC ve PowerShell Güvenliği
PowerShell ile çalışırken UAC özellikle önemlidir. Yönetici yetkisi gerektiren PowerShell komutları çalıştırmak için script’inizi “Run as Administrator” ile açmak yerine, yalnızca ihtiyaç duyulan bölümleri yükseltilmiş yetkiyle çalıştırmak daha güvenlidir.
# Mevcut oturumun yönetici yetkisine sahip olup olmadığını kontrol et
function Test-Administrator {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
if (-not (Test-Administrator)) {
Write-Warning "Bu script yonetici yetkisi gerektiriyor!"
Write-Host "Lutfen PowerShell'i 'Run as Administrator' ile calistirin."
exit 1
}
# Yönetici kontrolü sonrası güvenli işlem
Write-Host "Yonetici yetkisiyle calisiyor..." -ForegroundColor Green
Audit Politikası ve UAC Loglama
UAC olaylarını düzgün kayıt altına almak, güvenlik analizleri ve uyumluluk gereksinimleri açısından zorunludur. Audit politikasını etkinleştirerek tüm UAC aktivitelerini loglamaya başlayabilirsiniz.
# Audit politikasını yapılandırmak
# Privileged Use denetimini aç
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable
# Süreç oluşturma denetimini aç
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable
# Mevcut audit ayarlarını kontrol et
auditpol /get /category:*
# UAC olaylarını Windows Event Log'dan çekmek ve analiz etmek
$uacEvents = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = @(4688, 4689, 4703, 4704, 4705)
StartTime = (Get-Date).AddDays(-7)
} -ErrorAction SilentlyContinue
$uacEvents | Group-Object -Property Id |
Select-Object Name, Count |
Sort-Object Count -Descending
Sık Yapılan Hatalar ve Çözümleri
Yıllar içinde pek çok kurumda gördüğüm en yaygın UAC yanlış yapılandırmalarını ve çözüm yollarını paylaşmak istiyorum.
Hata 1: UAC’yi tamamen kapatmak
Çoğu zaman “uygulamalarım çalışmıyor” şikayetiyle karşılaşıldığında ilk refleks UAC’yi kapatmak olur. Bu yanlış bir yaklaşımdır. Bunun yerine uygulamanın neden yönetici yetkisi istediğini araştırın ve AppCompat katmanını kullanarak uygulamayı uyumlu hale getirin.
Hata 2: Tüm kullanıcıları yerel yönetici yapmak
Destek maliyetini düşürmeye çalışırken güvenlik açığı yaratmak. Bunun yerine sadece belirli görevler için Just-In-Time (JIT) yönetici erişimi verin.
Hata 3: ConsentPromptBehaviorAdmin değerini 0 yapmak
Bu ayar, yöneticiler için tüm yükseltmeleri otomatik olarak onaylar. UAC’yi işlevsiz kılar ama kapatmaz gibi görünür. Bu nüansı kaçıran pek çok yönetici var.
- ConsentPromptBehaviorAdmin = 0: Sessizce yükselt (tehlikeli)
- ConsentPromptBehaviorAdmin = 1: Güvenli masaüstünde kimlik bilgisi iste
- ConsentPromptBehaviorAdmin = 2: Güvenli masaüstünde onay iste
- ConsentPromptBehaviorAdmin = 5: Varsayılan, sadece Windows dışı uygulamalar için sor
Hata 4: Secure Desktop’u devre dışı bırakmak
UAC penceresi gösterilse bile Secure Desktop olmadan, ekranda çalışan başka uygulamalar UAC penceresini taklit eden sahte pencereler gösterebilir. PromptOnSecureDesktop değerini her zaman 1 tutun.
Kurumsal Ortam için Önerilen UAC Yapılandırması
# Kurumsal ortam için önerilen UAC yapılandırma scripti
$registryPath = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem"
# UAC'yi aktif et
Set-ItemProperty -Path $registryPath -Name "EnableLUA" -Value 1 -Type DWord
# Yöneticiler için güvenli masaüstünde onay iste
Set-ItemProperty -Path $registryPath -Name "ConsentPromptBehaviorAdmin" -Value 2 -Type DWord
# Standart kullanıcılar için kimlik bilgisi iste (otomatik reddetme: 0)
Set-ItemProperty -Path $registryPath -Name "ConsentPromptBehaviorUser" -Value 0 -Type DWord
# Güvenli masaüstünü aktif et
Set-ItemProperty -Path $registryPath -Name "PromptOnSecureDesktop" -Value 1 -Type DWord
# Sadece imzalı ve doğrulanmış uygulamaları yükselt
Set-ItemProperty -Path $registryPath -Name "ValidateAdminCodeSignatures" -Value 1 -Type DWord
# Yerleşik Administrator için filtrelemeyi aç
Set-ItemProperty -Path $registryPath -Name "FilterAdministratorToken" -Value 1 -Type DWord
# Sanallaştırmayı aktif et (eski uygulamalar için)
Set-ItemProperty -Path $registryPath -Name "EnableVirtualization" -Value 1 -Type DWord
Write-Host "UAC kurumsal yapilandirmasi tamamlandi." -ForegroundColor Green
Write-Host "Degisikliklerin tam olarak uygulanmasi icin sistemi yeniden baslatiniz." -ForegroundColor Yellow
Windows 11 ve UAC Değişiklikleri
Windows 11 ile birlikte UAC mekanizmasında bazı önemli değişiklikler geldi. Microsoft, Smart App Control adlı yeni bir güvenlik katmanı ekledi. Bu katman, UAC ile birlikte çalışarak güvenilmez uygulamaların çalıştırılmasını daha etkin biçimde engelliyor.
Bunun yanı sıra Windows 11 24H2 güncellemesiyle birlikte administrator hesapları için “Admin Protection” özelliği geliyor. Bu özellik, yönetici hesaplarının bile varsayılan olarak standart kullanıcı token’ıyla çalışmasını ve yükseltme gereken durumlarda Windows Hello ile doğrulama yapılmasını sağlıyor. Bu, UAC’nin bir sonraki evrimsel adımı olarak değerlendirilebilir.
Sonuç
UAC, doğru yapılandırıldığında kurumsal güvenlik duruşunuzu önemli ölçüde güçlendiren kritik bir mekanizmadır. Ancak çoğu zaman ya tamamen devre dışı bırakılıyor ya da varsayılan ayarlarla bırakılıp üzerine düşünülmüyor.
Sysadmin olarak şu prensipleri her zaman aklınızda tutun. UAC, son savunma hattı değildir ama derinlemesine savunma (defense in depth) stratejisinin vazgeçilmez bir parçasıdır. Kullanıcıları yerel yönetici grubuna eklemekten kaçının, Secure Desktop’u her zaman aktif tutun ve UAC olaylarını mutlaka loglayıp monitör edin. Uygulamaların neden yönetici yetkisi istediğini anlamadan UAC’yi bypass etmeye çalışmayın, bu sorunun çözümü değil, sorunun ertelenmesidir.
EDR çözümlerinizi ve SIEM sisteminizi UAC bypass denemelerini tespit edecek şekilde yapılandırın. Unutmayın, saldırganlar UAC’yi tamamen devre dışı bırakmak yerine bypass etmeyi tercih eder çünkü bu yöntem daha az iz bırakır ve daha uzun süre fark edilmeden kalır. Savunma tarafında olmak için saldırganların bu tekniklerini bilmek ve ona göre önlem almak zorundasınız.
