Windows: servis ve belirteç hataları
- Windows'ta yükseltme çoğunlukla yapılandırma hatasından doğar; tırnaksız yolu, servis iznini ve açık belirteç ayrıcalığını sırayla okursun.
- Yetki, belirteç adı verilen bir yapıyla taşınır; yükseltme daha yetkili bir belirteç elde etme sorusudur.
- SeImpersonatePrivilege bir servis hesabında açıksa belirteç taklidi gündeme gelir.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Windows makinesinde sınırlı bir kullanıcıyla ya da bir servis hesabıyla başlarsın. Yükseltme burada çoğunlukla bir yapılandırma hatasından doğar, bellek bozulmasından değil. Aradığın şey, sistemin yüksek yetkiyle çalıştırdığı ama senin etkileyebildiğin bir nokta. Linux'taki mantık burada da geçerlidir, yalnız araçlar ve adlar değişir.
Temel soru her iki sistemde de aynıdır: yüksek yetkili bir bileşeni nasıl etkilersin? Yanıtı Windows'ta servisler, kayıt defteri ve belirteçler verir.
Windows ve Linux yükseltmesi aynı soruyu sorar, ama farklı yerlere bakar. Linux'ta izin bitleri ve sudo kuralları öne çıkar.
Windows'ta servisler, kayıt defteri ve belirteç ayrıcalıkları öne çıkar. İkisinde de ortak nokta aynıdır: yüksek yetkiyle çalışan bir bileşenin girdisini sen kontrol edebiliyorsan bir yol vardır. Bu derste o yolların Windows'a özgü biçimlerini sırayla okuyacaksın. Her durak için bir okuma komutu, bir kanıt ve bir savunma karşılığı öğrenirsin.
Yetki belirteçle taşınır
Windows ile Linux arasındaki fark yalnız komutlarda değildir. Windows'ta yetki, belirteç adı verilen bir yapıyla taşınır. Her süreç bir belirteç tutar ve o belirteç sürecin hangi haklara sahip olduğunu yazar.
Bu model yükseltmeyi tek bir soruya çevirir: daha yetkili bir belirteci nasıl elde edersin? Yanıt çoğu zaman bir servis hesabından ya da yanlış yapılandırılmış bir haktan gelir. Linux'ta aradığın SUID biti ya da sudo kuralının karşılığı, Windows'ta bir belirteç ve bir yapılandırma hatasıdır.
İlk klasik hata tırnaksız servis yoludur. Bir servisin çalıştırılabilir yolu boşluk içeriyor ve tırnakla sarılmamışsa, Windows yolu parçalara böler ve soldan sağa sırayla dener. Yol C:\Program Files\... biçimindeyse, denetleyici önce C:\Program.exe dosyasını arar.
O konuma yazabiliyorsan ve servisi yeniden başlatabiliyorsan, sahte dosyan servis yetkisiyle çalışır. Servis SYSTEM olarak koşuyorsa yükseltme tamamlanır. Boşluk ve eksik tırnak, tek başına zararsız görünen iki ayrıntıdır; birleşince kapı açarlar.
C:\> wmic service get name,pathname | findstr /i /v "\"" YedekAjan C:\Program Files\Altay Yedek\ajan.exe C:\> whoami /priv SeImpersonatePrivilege Enabled
Çıktı iki sorunu yan yana koyar. wmic servis listesini verir, findstr ise tırnaksız yolları süzer. YedekAjan satırındaki yol boşluk taşıyor ve tırnak yok, yani deseni tam karşılıyor. whoami /priv çıktısı ise belirtecin taşıdığı ayrıcalıkları listeler ve SeImpersonatePrivilege satırı Enabled görünüyor.
İlki yol tabanlı, ikincisi belirteç tabanlı bir yoldur. İkisini de not alır, önce yan etkisi az olandan başlarsın. Önce yan etkisi az olanı denemek, makineyi gereksiz yere riske atmaz.
Tırnaksız yolu sömürmek iki koşula bağlıdır. Birincisi, boşluktan önceki parçaya karşılık gelen bir konuma yazma iznin olmalı. İkincisi, servisi yeniden başlatabilmeli ya da makinenin yeniden başlamasını bekleyebilmelisin. İki koşul da sağlanmıyorsa bulgu yalnız kuramsal kalır ve raporda bunu açıkça yazarsın.
Gerçek bir denetimde çoğu tırnaksız yol C:\Program Files altında durur ve oraya sıradan kullanıcı yazamaz. Bu yüzden her tırnaksız yolu bir açık değil, bir aday olarak işaretler, yazma iznini ayrıca doğrularsın.
Etkinlik 1 / 5
Bu servis yolu neden tehlikelidir?
Önce kodu oku, sonra çıktıyı seç.
C:\> sc qc YedekAjan BINARY_PATH_NAME : C:\Program Files\Altay Yedek\ajan.exe
Belirteç ayrıcalıkları
Belirteç modeli yükseltmeyi ayrıcalık listesine bakmaya indirger. whoami /priv komutu, geçerli belirtecin taşıdığı hakları ad ad yazar. Çoğu hak zararsızdır, ama birkaçı yükseltme kapısıdır.
SeImpersonatePrivilege bunların başında gelir. Bu hakkı taşıyan bir süreç, gelen bir bağlantının belirtecini taklit edebilir. Web ve veritabanı servis hesapları bu hakla koşar, çünkü istemciler adına iş yapmaları beklenir. Hak meşru bir ihtiyaç için verilir, ama ele geçen bir servis hesabında yükseltmeye döner.
SeImpersonatePrivilege açık bir servis hesabı ele geçtiğinde, saldırgan sisteme kendi tetiklediği bir bağlantı kurar ve o bağlantının SYSTEM belirtecini taklit eder. Potato ailesi diye bilinen araçlar bu mantığı kullanır. Örnek olarak PrintSpoofer ve RoguePotato, bir yerel servisi kandırıp SYSTEM belirtecini saldırgana getirir.
Buradaki fikir bir bellek açığı değil, var olan bir ayrıcalığın amacının dışında kullanılmasıdır. Bu yüzden tespiti yama değil, yetki denetimi gerektirir.
SeImpersonatePrivilege tek tehlikeli hak değildir. SeBackupPrivilege, dosya izinlerine bakmadan okuma yapar; bununla korumalı kayıt kovanları ya da parola veritabanı dışarı alınabilir. SeRestorePrivilege ters yönde yazar. SeDebugPrivilege ise başka süreçlerin belleğine erişir ve yüksek yetkili bir sürecin belirtecini ödünç almaya kapı açar.
whoami /priv çıktısını okurken bu hakların her birini ayrı bir aday olarak değerlendirirsin. Çoğu sıradan kullanıcıda kapalıdır, ama bir servis ya da yedek hesabında açık bulunabilir ve o zaman yükseltme yoluna döner.
Etkinlik 2 / 5
Laboratuvar makinesinde geçerli belirtecin ayrıcalıklarını listele.
Derinleş:Birincil belirteç, taklit belirteç ve bütünlük düzeyi
Windows iki tür belirteç tanır. Birincil belirteç bir sürece aittir ve o sürecin kimliğini taşır. Taklit belirteç ise bir iş parçacığının geçici olarak başka bir kullanıcı adına iş yapmasına yarar.
Bir sunucu, istemcisi adına dosya açarken bu ikinciyi kullanır. Taklit dört düzeyde yapılır: anonim, kimlik, taklit ve devretme.
SeImpersonatePrivilege, bir hesabın taklit düzeyinde başka bir belirteci kullanabilmesini açan haktır. Bunun yanında her belirtecin bir bütünlük düzeyi vardır: düşük, orta, yüksek ve sistem. Kullanıcı hesaplarının çoğu orta düzeyde koşar; yönetici işleri yüksek düzey ister ve UAC bu geçişi denetler. Yükseltmeyi anlamak, bu iki ekseni, yani hak listesini ve bütünlük düzeyini birlikte okumaktır.
Yapılandırma hataları sırayla okunur
İkinci hata servis izinleridir. Bir servisin yapılandırmasını değiştirebiliyorsan, çalıştırdığı komutu da değiştirirsin. accesschk aracı, bir kullanıcının hangi servisler üzerinde yazma hakkı olduğunu listeler. Aynı sonucu, servis ikilisinin durduğu klasöre yazma izni de verir.
Dosyayı değiştirir, servisi yeniden başlatır ve yeni kodun yüksek yetkiyle koşar. İkisi de aynı kapıyı açar: yüksek yetkili bir sürecin ne çalıştıracağını sen belirlersin. Girdisini ele geçirmek, Windows yükseltmesinin ortak mantığıdır.
C:\> accesschk.exe -uwcqv kullanici YedekAjan
RW YedekAjan
SERVICE_CHANGE_CONFIG
SERVICE_STARTÇıktıyı oku. accesschk, verilen kullanıcının bir servis üzerindeki haklarını listeler. RW etiketi okuma ve yazma hakkını, SERVICE_CHANGE_CONFIG ise servis yapılandırmasını değiştirme iznini gösterir.
SERVICE_START, servisi başlatma hakkını verir. İkisi bir arada varsa, servisin çalıştırdığı ikiliyi kendi dosyanla değiştirir ve servisi yeniden başlatırsın. Servis SYSTEM olarak koştuğu için komut da SYSTEM olarak çalışır. Buradaki açık yolda ya da belirteçte değil, servis nesnesinin erişim denetim listesinde durur.
Üçüncü ve dördüncü hatalar kayıt defterinde durur. AlwaysInstallElevated ayarı hem makine hem kullanıcı kovanında açıksa, sıradan kullanıcı hazırladığı kurulum paketini yüksek yetkiyle kurar. Bu ayar kolaylık için açılır ve neredeyse her zaman unutulur.
Otomatik oturum açma kayıtları ise parolayı düz metin tutabilir. Bazı kurulumlar bu değeri sıradan kullanıcıya okunur bırakır. İki kayıt da birer komutla okunur ve bulgu anında görünür.
Yama durumu ayrı bir başlıktır. systeminfo çıktısı yüklü güncellemeleri listeler.
Eksik bir güncelleme, bilinen bir yerel yükseltme açığına karşılık gelebilir. Yine de bu yolu yapılandırma hatalarından sonra denersin, çünkü çekirdek ya da sürücü düzeyindeki bir açık makineyi kilitleyebilir. Zamanlanmış görevler de Linux'taki cron'un karşılığıdır; yüksek yetkiyle koşan bir görev yazılabilir bir betiği çağırıyorsa aynı sonuç doğar. Sıra sabit olunca hiçbir durak atlanmaz.
Gerçek bir Windows denetiminde bu duraklar çoğu zaman tek oturumda taranır. Bir kurumun dosya sunucusunda tırnaksız bir yedek servisi, gevşek izinli bir güncelleme servisi ve açık kalmış bir otomatik oturum kaydı aynı anda bulunabilir. Her birini ayrı bir bulgu olarak yazar, her biri için bir kanıt ve bir düzeltme adımı koyarsın.
Servis listesi, ayrıcalıklar, zamanlanmış görevler ve kayıt defteri ayarları aynı sırayla okunur. Sıra alışkanlığa dönünce hiçbir adım atlanmaz ve rapor tekrar üretilebilir kalır.
Etkinlik 3 / 5
Windows yanlış yapılandırmasını sonucuyla eşleştir.
Kimlik bilgisi, kapsam ve savunma
Kimlik bilgisi toplamak ayrı ve hassas bir adımdır. Bir sistem sürecinin bellek dökümü, oturum açmış kullanıcıların parola karmalarını taşır. Bu adım, kapsam belgesinde açıkça yazılmadan yapılmaz.
Döküm dosyası şifreli saklanır, paylaşılmaz ve test bitiminde silinir. Uç nokta korumasını kapatmak, parola sıfırlamak ya da olay kayıtlarını temizlemek kapsam dışıdır ve zarar verir. Kanıt için çoğu zaman tek bir kimlik çıktısı yeter.
Kapsam farkını da hatırla. Yerel yönetici olmak yalnız o makineyi verir. Etki alanına geçiş ayrı bir iştir ve önbellekteki bir kimlik, yanlış yapılandırılmış yetki devri ya da aşırı geniş bir grup üyeliği ister. İkisi rapora ayrı bulgu olarak yazılır.
Etki alanı tarafında grup üyelikleri, yetki devri ayarları ve servis hesapları bir ilişki grafiği oluşturur; kısa bir yol çoğu zaman tek tek makineleri denemekten hızlı sonuç verir. Bu aşamada toplu sorgular izleme sistemlerinde uyarı üretir, bu yüzden önceden bilgilendirme gerekir.
Etki alanı ilişkilerini elle çıkarmak yavaştır. Bu yüzden ilişki grafiğini otomatik derleyen araçlar kullanılır. Bir araç; kullanıcıları, grupları, bilgisayarları ve aralarındaki hakları toplayıp bir grafiğe döker.
Grafik, ele geçen bir hesaptan etki alanı yöneticisine giden en kısa yolu gösterir. Yine de bu toplu sorgular gürültülüdür ve izleme sistemlerinde iz bırakır. Kırmızı takım tatbikatında bu beklenen bir sınavdır; sızma testinde ise müşteriyi önceden bilgilendirmen gerekir. Grafiği okumak, saatlerce elle sorgu yazmaktan çok daha hızlı sonuç verir.
Etkinlik 4 / 5
Yetkili bir testte LSASS bellek dökümü almadan önce hangi adım gerekir?
Savunma tarafı dört maddeye sığar. Servis yollarını tırnakla ve boşluklu yolları düzelt. Servis izinlerini ve ikili klasörlerini yalnız yöneticiye yazılır tut. AlwaysInstallElevated ayarını kapat ve otomatik oturum açma parolasını kaldır.
Yerel yönetici parolasını her makine için ayrı ve döngüsel yöneten bir çözüm kur; Windows LAPS bunu yapar. Bu dört madde, bu dersteki yolların çoğunu kapatır ve saldırganın işini zorlaştırır. Maddeleri bir kurulum şablonuna bağlamak, aynı hataların her yeni makinede yeniden doğmasını önler.
Etkinlik 5 / 5
Doğru mu, yanlış mı?
Yerel yönetici olmak ele geçen makineyle sınırlı kalır; etki alanı yöneticiliği ayrı bir geçiş ister.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.