Autoruns ile Başlangıç Programlarını Denetleme
Windows sistemlerde kötü amaçlı yazılımların en sevdiği saklanma noktası başlangıç kayıtlarıdır. Bir sisteme sızan zararlı yazılım, yeniden başlatmadan sonra da hayatta kalmak için mutlaka bir persistence mekanizması kurar. İşte bu noktada Autoruns, sysadmin’lerin ve güvenlik araştırmacılarının elinden düşürmediği araç haline gelir. Sysinternals paketinin bir parçası olan bu araç, Windows’un başlangıçta çalıştırabileceği her şeyi tek bir pencerede gösterir. Bu yazıda Autoruns’ı hem grafiksel arayüzüyle hem de komut satırı versiyonuyla nasıl kullanacağını, şüpheli girişleri nasıl tespit edeceğini ve bunu bir güvenlik denetim sürecine nasıl entegre edeceğini ele alacağız.
Autoruns Nedir ve Neden Bu Kadar Önemli?
Windows’un başlangıç mekanizmaları inanılmaz derecede karmaşıktır. Registry’den servisler tablosuna, zamanlanmış görevlerden tarayıcı eklentilerine kadar onlarca farklı lokasyon bir programın her açılışta çalışmasını sağlayabilir. Task Manager’daki “Startup” sekmesi bu noktaların yalnızca küçük bir kısmını gösterir. Autoruns ise bu tabloyu tamamen açar.
Microsoft’un Sysinternals ekibinden Mark Russinovich tarafından geliştirilen Autoruns, şu anda Microsoft’un resmi araç paketi içinde ücretsiz dağıtılmaktadır. İndirmek için:
# winget ile kurulum (Windows 10/11)
winget install Microsoft.Sysinternals.Autoruns
# Ya da doğrudan PowerShell ile indirme
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Autoruns.zip" -OutFile "C:ToolsAutoruns.zip"
Expand-Archive -Path "C:ToolsAutoruns.zip" -DestinationPath "C:ToolsAutoruns"
Neden bu kadar önemli? Çünkü gerçek dünyada karşılaştığın senaryolarda Task Manager sana yarım bilgi verir. Örneğin bir kullanıcı “bilgisayarım açılışta yavaşlıyor” diye geldiğinde ya da bir SOC analisti “bu makinede persistence var mı?” diye sorduğunda, Autoruns olmadan saatler harcayabilirsin.
Autoruns Arayüzünü Tanıma
Autoruns’ı ilk açtığında sekme dolu bir ekranla karşılaşırsın. Her sekme farklı bir başlangıç kategorisini temsil eder. En kritik olanları şunlardır:
- Everything: Tüm başlangıç noktalarını birleşik gösterir, genel tarama için başlangıç noktası
- Logon: Klasik HKCU/HKLM Run kayıtları, kullanıcı oturumunda çalışanlar
- Services: Servis olarak kayıtlı uygulamalar, kötü amaçlı yazılımların çok sevdiği yer
- Scheduled Tasks: Zamanlanmış görevler, persistence için giderek daha popüler
- Drivers: Kernel seviyesinde çalışan sürücüler, rootkit’lerin evi
- Boot Execute: Sistem başlamadan önce çalışanlar, çok kritik
- Known DLLs: DLL hijacking tespiti için bakılması gereken yer
- Browser Helper Objects: Tarayıcı eklentileri ve yardımcı nesneler
- Winlogon: Oturum açma sürecine müdahale edebilecek bileşenler
Her satırda göreceğin renkli işaretler de çok önemli:
- Sarı arka plan: Dosya sistemde bulunamıyor, ghost kayıt anlamına gelir
- Kırmızı arka plan: Doğrulanmamış veya imzasız uygulama
- Beyaz arka plan: Normal, imzalı uygulama
VirusTotal Entegrasyonu ile Hızlı Analiz
Autoruns’ın en güçlü özelliklerinden biri VirusTotal entegrasyonudur. Options menüsünden “Scan Options” altında “Check VirusTotal.com” seçeneğini aktif edersen, her entry’nin hash’ini otomatik olarak VirusTotal’a gönderir ve sonuçları arayüzde gösterir.
# Autoruns komut satırı versiyonu olan autorunsc.exe ile VirusTotal taraması
autorunsc.exe -a * -v -vt -h -c > C:Logsautoruns_vt_scan.csv
Bu komuttaki parametreler:
- -a *: Tüm başlangıç kategorilerini tara
- -v: VirusTotal sonuçlarını dahil et
- -vt: VirusTotal kullanım şartlarını kabul et
- -h: Hash değerlerini hesapla
- -c: CSV formatında çıktı ver
Gerçek bir senaryodan bahsedeyim: Bir müşteride kullanıcılar “tarayıcı ana sayfası değişiyor” diye şikayet ediyordu. VirusTotal taraması ile birkaç dakika içinde imzasız bir BHO (Browser Helper Object) tespit ettik. Hash değeri VirusTotal’da 23/70 ile flagged geldi. Task Manager’da bu entry yoktu bile.
Komut Satırı ile Otomatik Denetim: autorunsc.exe
Grafiksel arayüz harika ama ölçeklenebilir değil. 50 makinede aynı anda analiz yapmak istiyorsan autorunsc.exe devreye girer. Bu, Autoruns’ın tam komut satırı versiyonudur.
# Temel kullanım - tüm kategorileri CSV'ye aktar
autorunsc.exe -a * -c -h > baseline_autoruns.csv
# Sadece imzasız entryleri listele
autorunsc.exe -a * -c -s > unsigned_only.csv
# Belirli bir kullanıcı profili için çalıştır
autorunsc.exe -a * -c -u "DOMAINkullanici" > kullanici_autoruns.csv
# Gizli entryleri de dahil et (rootkit tespiti için)
autorunsc.exe -a * -c -h -v > full_scan_with_vt.csv
Parametrelerin özeti:
- -a *: Tüm kategoriler (tek tek belirtmek için: -a l = logon, -a s = services)
- -c: CSV çıktı formatı
- -h: MD5/SHA1/SHA256 hash hesapla
- -s: Sadece imzasız entryleri göster
- -u: Belirli kullanıcı için çalıştır
- -accepteula: EULA onayını otomatik geç (scriptte kullanım için kritik)
- -nobanner: Banner çıktısını bastır
PowerShell ile Toplu Denetim Scripti
Birden fazla makinede baseline almak ve karşılaştırmak için şu scripti kullanabilirsin:
# PowerShell ile uzak makinelerde autoruns çalıştırma
$computers = Get-Content "C:Admincomputers.txt"
$autorunsPath = "\FileServerToolsautorunsc.exe"
$outputBase = "C:LogsAutoruns"
foreach ($computer in $computers) {
$outputFile = "$outputBase$computer`_$(Get-Date -Format 'yyyyMMdd').csv"
try {
$session = New-PSSession -ComputerName $computer -ErrorAction Stop
Invoke-Command -Session $session -ScriptBlock {
param($toolPath, $outPath)
& $toolPath -a * -c -h -s -accepteula -nobanner 2>$null | Out-File $outPath
} -ArgumentList $autorunsPath, $outputFile
Write-Host "[OK] $computer tamamlandi" -ForegroundColor Green
Remove-PSSession $session
}
catch {
Write-Host "[HATA] $computer - $_" -ForegroundColor Red
}
}
Bu script her makine için tarih damgalı bir CSV dosyası oluşturur. Haftalık baseline karşılaştırması yapmak için ideal temel yapıdır.
Baseline Karşılaştırması: Değişimi Yakalamak
Güvenlik denetiminde en değerli yaklaşım baseline karşılaştırmasıdır. “Dün çalışmayan bir şey bugün başlıyor mu?” sorusunu yanıtlamak için:
# İki autoruns CSV dosyasını karşılaştıran PowerShell fonksiyonu
function Compare-AutorunsBaseline {
param(
[string]$BaselineFile,
[string]$CurrentFile
)
$baseline = Import-Csv $BaselineFile -Header @(
"Time","Entry","Enabled","Category","Profile",
"Description","Publisher","ImagePath","Version",
"LaunchString","VTDetection","VTPermalink","MD5","SHA1","SHA256"
) | Where-Object { $_.Time -ne "Time" }
$current = Import-Csv $CurrentFile -Header @(
"Time","Entry","Enabled","Category","Profile",
"Description","Publisher","ImagePath","Version",
"LaunchString","VTDetection","VTPermalink","MD5","SHA1","SHA256"
) | Where-Object { $_.Time -ne "Time" }
# Yeni eklenen entryleri bul
$newEntries = Compare-Object -ReferenceObject $baseline.MD5 -DifferenceObject $current.MD5 |
Where-Object { $_.SideIndicator -eq "=>" } |
ForEach-Object {
$hash = $_.InputObject
$current | Where-Object { $_.MD5 -eq $hash }
}
if ($newEntries) {
Write-Host "`n[UYARI] Yeni baslangiç entryleri tespit edildi:" -ForegroundColor Red
$newEntries | Format-Table Entry, Category, ImagePath, Publisher, VTDetection -AutoSize
} else {
Write-Host "[OK] Fark bulunamadi" -ForegroundColor Green
}
return $newEntries
}
# Kullanim ornegi
Compare-AutorunsBaseline -BaselineFile "C:Logsbaseline_20240101.csv" `
-CurrentFile "C:Logsbaseline_20240115.csv"
Şüpheli Entry Kalıplarını Tanıma
Yıllar içinde edindiğim tecrübeyle, gerçekten şüpheli olan başlangıç kayıtlarının ortak özelliklerini şöyle sıralayabilirim:
Lokasyon bazlı şüpheler:
C:Users[kullanici]AppDataLocalTempaltında çalışan herhangi bir şeyC:Users[kullanici]AppDataRoamingaltında rastgele isimli exe’ler%SystemRoot%Tempveya geçici dizinlerde bulunanlar- Uzun ve rastgele görünen isimler (örn:
svchost32x.exe,winlogon32.exe)
İsim bazlı şüpheler:
- Sistem process’lerini taklit eden isimler (svchost, lsass, winlogon gibi isimlerin kopyaları)
- Çift uzantılar:
document.pdf.exe - Sağdan sola yazım karakterleri ile gizlenmiş isimler (RLO attack)
İmza bazlı şüpheler:
- Publisher alanı boş olan her şey
- “Untrusted” veya self-signed sertifikalı uygulamalar
- Sertifika zinciri kırık olanlar
# autorunsc ile sadece imzasız ve Publisher bilgisi olmayan entryleri filtrele
autorunsc.exe -a * -c -h -s -accepteula -nobanner 2>$null |
ConvertFrom-Csv |
Where-Object {
($_.Publisher -eq "" -or $_.Publisher -eq "(Verified)") -eq $false -and
$_.Enabled -eq "enabled"
} |
Select-Object Entry, Category, ImagePath, Publisher, MD5 |
Format-Table -AutoSize
Zamanlanmış Görevler: Gözden Kaçan Tehdit
Modern kötü amaçlı yazılımların büyük çoğunluğu artık Run registry anahtarları yerine Scheduled Tasks kullanıyor. Çünkü birçok güvenlik aracı bu alana bakmıyor. Autoruns’ın Scheduled Tasks sekmesi bu açığı kapatır.
# Autoruns çıktısından sadece Scheduled Tasks kategorisini filtrele ve analiz et
autorunsc.exe -a t -c -h -accepteula -nobanner 2>$null |
Out-File "C:Logsscheduled_tasks.csv"
# PowerShell ile şüpheli zamanlanmış görevleri tespit et
Get-ScheduledTask | Where-Object {
$_.TaskPath -notlike "Microsoft*"
} | ForEach-Object {
$task = $_
$action = $task.Actions | Select-Object -First 1
[PSCustomObject]@{
Name = $task.TaskName
Path = $task.TaskPath
Execute = $action.Execute
Arguments = $action.Arguments
State = $task.State
LastRunTime = ($task | Get-ScheduledTaskInfo).LastRunTime
}
} | Where-Object {
$_.Execute -match "temp|appdata|roaming|public" -or
$_.Execute -match "powershell|cmd|wscript|cscript|mshta"
} | Format-Table -AutoSize
Gerçek bir örnek: Bir bankacılık trojanı (Emotet benzeri bir varyant), zamanlanmış görev olarak MicrosoftWindowsDiskCleanup altında gizlenmişti. İsim meşru görünüyordu ama çalıştırdığı PowerShell komutu encoded bir payload indiriyordu. Autoruns olmadan bunu bulmak saatler alırdı.
Sürücü Analizi: Rootkit Tespiti
Autoruns’ın Drivers sekmesi, kernel seviyesinde çalışan tüm sürücüleri listeler. Bu, rootkit tespitinin ilk adımıdır.
# Kernel sürücülerini analiz et
autorunsc.exe -a d -c -h -v -accepteula -nobanner 2>$null |
Out-File "C:Logsdrivers_scan.csv"
# İmzasız kernel sürücülerini filtrele (çok kritik bulgu!)
autorunsc.exe -a d -c -h -s -accepteula -nobanner 2>$null |
ConvertFrom-Csv |
Where-Object { $_.Enabled -eq "enabled" } |
Select-Object Entry, ImagePath, Publisher, SHA256 |
Format-Table -AutoSize
Önemli uyarı: Windows 10/11’de 64-bit sistemlerde Microsoft, imzasız kernel sürücülerini varsayılan olarak yüklemez. Bu yüzden bir imzasız kernel sürücüsü bulursan bu çok ciddi bir bulgudur. Ya test ortamı yapılandırması değiştirilmiş ya da exploit kullanılmıştır.
Temizlik ve Müdahale
Şüpheli bir entry bulduğunda Autoruns üzerinde yapabileceğin işlemler:
# autorunsc ile belirli bir entry'yi devre dışı bırakma (registry üzerinden)
# NOT: Bu işlemi önce yedek alarak yap!
# Registry yedeği al
reg export "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun" C:Backuprun_backup.reg
# Autoruns arayüzünde entry'nin checkbox'ını kaldırmak onu devre dışı bırakır
# Komut satırı için registry manipülasyonu:
$registryPath = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRun"
$suspiciousEntry = "SuspiciousApp"
# Önce kayıt et
$currentValue = Get-ItemProperty -Path $registryPath -Name $suspiciousEntry -ErrorAction SilentlyContinue
if ($currentValue) {
$currentValue | Export-Clixml "C:Forensics$suspiciousEntry`_backup.xml"
Remove-ItemProperty -Path $registryPath -Name $suspiciousEntry
Write-Host "Entry kaldirıldı ve yedeklendi: $suspiciousEntry"
}
Autoruns ile bir entry’yi silmek yerine önce devre dışı bırakmayı tercih et. Silersen forensik iz kalkmaz, devre dışı bırakırsan kayıt yerinde durur ve sonradan inceleyebilirsin.
SIEM Entegrasyonu ve Sürekli İzleme
Autoruns’ı bir kez çalıştırmak yetmez. Bunu periyodik bir süreç haline getirmelisin. Windows Task Scheduler ile günlük baseline toplama ve karşılaştırma yapan bir pipeline kurabilirsin:
# Scheduled Task olarak autoruns baseline topla
$taskAction = New-ScheduledTaskAction -Execute "autorunsc.exe" `
-Argument "-a * -c -h -v -accepteula -nobanner" `
-WorkingDirectory "C:ToolsAutoruns"
$taskTrigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$taskSettings = New-ScheduledTaskSettingsSet `
-RunOnlyIfNetworkAvailable `
-StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask `
-TaskName "AutorunsBaseline" `
-Action $taskAction `
-Trigger $taskTrigger `
-Settings $taskSettings `
-RunLevel Highest `
-Description "Gunluk autoruns baseline toplama"
CSV çıktılarını bir log toplama aracıyla (Winlogbeat, NXLog gibi) SIEM sistemine gönderebilir, Splunk veya Elastic üzerinde “yeni başlangıç kaydı eklendi” türünde alertler kurabilirsin.
Pratik Güvenlik Denetim Akışı
Gerçek bir güvenlik denetiminde Autoruns’ı şu sırayla kullanıyorum:
- 1. Adım: Temiz bir makineden baseline al, bunu altın kopya olarak sakla
- 2. Adım: Şüpheli makinede aynı parametrelerle tarama yap
- 3. Adım: Compare-AutorunsBaseline scripti ile farkları çıkar
- 4. Adım: Fark listesindeki her entry için VirusTotal hash kontrolü yap
- 5. Adım: Şüpheli dosyaları sandbox ortamına gönder (Any.run, Joe Sandbox gibi)
- 6. Adım: Bulguları belgele ve önce devre dışı bırak, hemen silme
- 7. Adım: Temizlik sonrası tekrar tarama yaparak persistence kalmadığını doğrula
Sonuç
Autoruns, Windows güvenlik denetiminin vazgeçilmez araçlarından biridir. Yıllar içinde onlarca compromise edilmiş sistem inceledim ve neredeyse hepsinde persistence mekanizması Autoruns olmadan tespit edilmesi çok zor olan bir noktaya kurulmuştu. Zamanlanmış görevlere gizlenen backdoor’lar, kernel sürücüsü gibi görünen rootkit’ler, meşru uygulama klasörlerine kopyalanmış kötü amaçlı DLL’ler… Bunların tamamı Autoruns’ın radarına girer.
Aracı sadece bir sorun olduğunda kullanmak yerine, düzenli güvenlik rutin’inin bir parçası haline getir. Haftalık baseline karşılaştırması, imzasız entry alertleri ve SIEM entegrasyonu kurduğunda, birçok tehdidi son kullanıcı “bir şeyler oluyor” demeden yakalama şansı elde edersin. Üstelik Autoruns tamamen ücretsiz ve Microsoft destekli. Kullanmamak için hiçbir sebep yok.
