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.

Bir yanıt yazın

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