Privilege Escalation: Unquoted Service Paths ile Teknik Bir Senaryo ve Kod Örnekleri

Privilege Escalation: Unquoted Service Paths ile Teknik Bir Senaryo ve Kod Örnekleri

Giriş

Privilege escalation (yetki yükseltme), siber güvenlik alanında kritik bir tekniktir. Bu teknik, saldırganların veya güvenlik uzmanlarının mevcut kullanıcı yetkilerini artırarak daha yüksek yetkilerle erişim sağlamasına olanak tanır. Windows işletim sistemlerinde karşılaşılabilecek yaygın bir yetki yükseltme açığı olan Unquoted Service Paths, bu makalede derinlemesine teknik bir senaryo ile açıklanacaktır. Ayrıca, bu sürecin nasıl gerçekleştirileceğine dair kod örnekleri ve detaylı açıklamalar sunulacaktır.

Unquoted Service Paths Nedir?

Unquoted service paths, Windows işletim sistemlerinde servislerin dosya yollarındaki boşluk karakterlerinin tırnak işaretleri ile korunmaması sonucu oluşan bir güvenlik açığıdır. Windows, servislerin çalıştırılacağı yolları parse ederken, boşluk karakterleri içeren yolları doğru bir şekilde işlemeyebilir. Bu durum, bir servis çalıştırıldığında kötü niyetli bir dosyanın yüklenmesine neden olabilir.

Teknik Senaryo: Unquoted Service Paths ile Yetki Yükseltme

Hedef Sistem ve Araçlar

  • Hedef Sistem: Windows 10
  • Araçlar: PowerShell, Notepad++, C++ Derleyici (DLL derleyici), Event Viewer

1. Servis Path Tespiti

Unquoted service paths açığını tespit etmek için sistemdeki servislerin yollarını analiz etmemiz gerekiyor. Servis yollarında boşluk karakteri içerenleri belirlemek bu süreçte kritik bir adımdır.

Get-WmiObject win32_service | Select-Object Name, PathName | Where-Object { $_.PathName -match "\s" }

Bu komut, sistemdeki servislerin isimlerini ve yollarını listeler ve yol içinde boşluk karakteri (\s) bulunan servisleri filtreler. Bu yollarda tırnak işaretleri olup olmadığını kontrol edebilirsiniz.

2. Boşluk İçeren Servis Yolu Tespiti

Örneğin, servislerin listelendiği çıktıda aşağıdaki gibi bir servis yolu bulunabilir:

C:\Program Files\Some Service\service.exe

Bu yol, boşluk karakteri içerdiği için potansiyel bir açığı işaret eder. Servis yollarında bu tür bir açığı kullanarak yetki yükseltme işlemi yapabiliriz.

3. Kötü Niyetli DLL Oluşturma

Kötü niyetli DLL dosyasının oluşturulması, yetki yükseltmenin gerçekleştirilmesinde kritik bir adımdır. DLL (Dynamic Link Library), bir uygulamanın çalışma zamanında yüklediği ve kullandığı bir dosya türüdür.

Kötü Niyetli DLL Kodu (C++):

// malicious.dll
#include <windows.h>
extern "C" __declspec(dllexport) void Hello() {
    MessageBox(0, "Malicious DLL Loaded", "Alert", MB_OK);
}

Bu kod, yüklendiğinde basit bir mesaj kutusu gösterecektir. Kodu derleyerek malicious.dll olarak adlandırın.

Derleme:

Bu kodu derlemek için bir C++ derleyici kullanabilirsiniz. Örneğin, Visual Studio kullanarak malicious.dll dosyasını oluşturabilirsiniz. Visual Studio'da, yeni bir proje oluşturun, bu kodu bir .cpp dosyasına yapıştırın ve DLL olarak derleyin.

4. DLL'nin Yüklenmesi

Kötü niyetli DLL dosyasını, tespit edilen boşluk içeren servis yoluna kopyalamak gereklidir. Bu adım, servis başlatıldığında kötü niyetli DLL'nin yüklenmesini sağlar.

copy malicious.dll "C:\Program Files\Some Service\malicious.dll"

Bu komut, oluşturduğunuz kötü niyetli DLL dosyasını hedef servisin bulunduğu dizine kopyalar. Servis çalıştığında, bu DLL'nin yüklenmesini tetikler.

5. Servisi Yeniden Başlatma

Servisi yeniden başlatarak DLL'nin yüklenmesini tetiklemek, yetki yükseltmenin sağlanması için gereklidir.

sc stop "Some Service"
sc start "Some Service"

Bu komutlar, servisi durdurur ve ardından yeniden başlatır. Servis yeniden başlatıldığında, malicious.dll dosyası yüklenir ve içindeki kod çalışır.

6. Sonuçların İncelenmesi

Yetki yükseltmenin başarılı olup olmadığını kontrol etmek için sistemdeki etkinlikleri ve olay günlüklerini incelemek gerekir.

Event Viewer Kullanımı:

Olay Görüntüleyicisi'ni açarak Windows Logs -> Application bölümüne gidin. Burada, servislerin durumu, yüklenen DLL'ler ve diğer olaylar hakkında bilgi edinebilirsiniz.

7. Güvenlik Önlemleri

Unquoted service paths açığını önlemek için aşağıdaki güvenlik önlemlerini alabilirsiniz:

  • Servis Yolu Tırnak İşaretleri: Servis yollarında boşluk karakterleri varsa, yollar tırnak işaretleri ile korunmalıdır. Örneğin:
"C:\Program Files\Some Service\service.exe"
  • Dosya İzinleri: Kritik dizinler ve dosyalar için uygun dosya izinleri belirlenmelidir. Bu, yetki yükseltme riskini azaltır.
icacls "C:\Program Files\Some Service" /grant:r SYSTEM:(OI)(CI)F
  • Güncellemeler ve Yamanlar: Windows sisteminiz düzenli olarak güncellenmeli ve bilinen güvenlik açıkları için yamalar uygulanmalıdır.

Sonuç

Unquoted service paths açığı, Windows işletim sistemlerinde yetki yükseltme için kritik bir zayıflık oluşturur. Bu makalede, bu açığın nasıl tespit edileceği, nasıl kullanılacağı ve sonuçların nasıl analiz edileceği üzerine detaylı bir teknik senaryo sunulmuştur. Kötü niyetli DLL dosyalarının nasıl oluşturulacağı, yüklenebileceği ve güvenlik önlemlerinin nasıl alınacağı açıklanmıştır. Bu tür güvenlik açıklarını anlamak ve önlemek, sistemlerin güvenliğini sağlamak için kritik öneme sahiptir.

Yorumlar