İçeriğe atla
0 XP 0
11 dkderinleşmeyle 12 dk50 XP5 etkinlik

NTFS ve dosya izinleri

Bu derste
  • NTFS her dosyaya kimin ne yapabileceğini yazan bir erişim listesi ekler; bu derste o listeyi icacls ile okumayı öğrenirsin.
  • Paylaşım ve NTFS izninin ağ üzerinde nasıl birleştiğini, Everyone grubuna Tam Denetim vermenin neden risk taşıdığını göreceksin.
  • Alternatif veri akışlarının nasıl gizlendiğini ve nasıl yakalandığını da öğrenirsin.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +50 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Altay Kargo'nun güvenlik ekibi, muhasebe sunucusu muh-pc07 için ikinci kez uyarı aldı. Bir paylaşım klasörünün izinleri gevşek görünüyor ve ekip bunun gerçekten bir sorun olup olmadığını anlamak istiyor. Bu dersin konusu tam olarak bu: Windows'un dosya izinlerini okumak.

NTFS'in her dosyaya iliştirdiği erişim listesini açacak, izin düzeylerini ve kalıtımı çözecek, paylaşım izniyle NTFS izninin ağ üzerinde nasıl birleştiğini göreceksin. Sonunda bir icacls çıktısına bakıp hangi satırın tehlike taşıdığını saniyeler içinde söylersin. Windows'un dosya güvenliği ilk bakışta karmaşık görünür, ama birkaç kural ve iki üç komutla okunur hale gelir.

ACL, ACE ve izin düzeyleri

Windows'ta her disk bölümü bir dosya sistemiyle biçimlendirilir ve bugünün standardı NTFS'tir (New Technology File System). NTFS her dosya ve dizin için ayrı bir erişim listesi tutar; bu listenin adı ACL'dir (Access Control List). ACL birden çok kuraldan oluşur ve her kurala ACE (Access Control Entry) denir.

Bir ACE üç şeyi birlikte taşır: kime (hangi kullanıcı ya da grup), hangi hakkın ve iznin izin mi (Allow) yoksa ret mi (Deny) olduğunu. Sistem bir kullanıcı dosyaya her dokunduğunda önce o kişinin hangi kimlik ve gruplara ait olduğuna bakar, sonra bu kimliklerin ACL'de ne yazdığını birleştirip bir karar verir. Yani izin dosyanın değil, kimliğin üstünden hesaplanır.

NTFS izinleri birkaç sabit düzeyde toplanır. Tam Denetim (Full, F) okur, yazar, siler ve iznin kendisini değiştirir. Değiştir (Modify, M) okur, yazar ve siler, ama izni değiştiremez.

Okuma ve Yürütme (RX) yalnız görüntüler ve çalıştırılabilir dosyayı başlatır. Yalnız Yazma (W) var olan içeriğe yazar. Bu düzeyler dizin ağacında kalıtım yoluyla akar: bir üst dizine verilen izin, aksi belirtilmedikçe altındaki her dosyaya iner.

icacls çıktısında kalıtım bayraklarını görürsün. (OI) nesne kalıtımıdır ve izni içteki dosyalara indirir; (CI) kapsayıcı kalıtımıdır ve alt dizinlere aktarır; (I) ise bu ACE'nin üstten miras geldiğini söyler. Kalıtım kırılabilir; o zaman dizin kendi bağımsız listesini taşır ve üstten kural almaz. Bu düzeyleri doğru seçmek izin yönetiminin özüdür: fazlasını verirsen açık bırakırsın, azını verirsen iş aksar.

C:\Paylasim\Muhasebe> icacls .
Muhasebe BUILTIN\Administrators:(OI)(CI)(F)
         ALTAYKARGO\Muhasebe-Grubu:(OI)(CI)(M)
         Everyone:(OI)(CI)(RX)

Successfully processed 1 files; Failed processing 0 files.
Paylaşım klasöründeki izinleri icacls listeler.

Çıktıdaki her satır bir ACE'dir. Başındaki parantezli harfler kalıtımı ve hakkı özetler: (OI)(CI) iznin hem dosyalara hem alt dizinlere indiğini, (F), (M) ve (RX) ise sırasıyla Tam Denetim, Değiştir ve Okuma-Yürütme haklarını gösterir. Muhasebe-Grubu burada Değiştir hakkına sahip ve bu iş için yeterli; kimseye Tam Denetim vermeden dosya ekler, düzenler ve siler.

Everyone grubu ise ayrı bir hikâye. Bu grup makinedeki her kullanıcı hesabını kapsar. Daha dar bir seçenek Authenticated Users'tır (S-1-5-11); o yalnız kimliği doğrulanmış hesapları alır, Guest hesabını almaz. Everyone için doğru olan çoğu zaman yalnız okuma hakkıdır; bu çıktıdaki RX satırı bu yüzden ölçülü.

Etkinlik 1 / 5

Bir kullanıcı hem miras yoluyla Değiştir izni alıyor hem de aynı dosyada açıkça Ret (Deny) ile yazma engelleniyor. Kullanıcı dosyayı nasıl kullanır?

Paylaşım izni NTFS izniyle birleşince

Paylaşım izni (share permission) ayrı bir katmandır ve yalnız ağ üzerinden erişimde devreye girer. Kullanıcı makineye doğrudan oturum açtığında paylaşım izni hiç uygulanmaz; o anda yalnız NTFS izni konuşur. Bir klasör ağda paylaşıldığında ise iki katman aynı anda geçerli olur: hem paylaşım izni hem NTFS izni. Sistem bu iki kümenin kesişimini alır, yani en kısıtlayıcı olanı uygular.

Diyelim paylaşım tarafı bir kullanıcıya Değiştir, NTFS tarafı yalnız Okuma veriyor; kullanıcı ağdan bağlandığında yalnız okur. Tersi de doğrudur. İki katmanı birlikte düşünmezsen izin hatalarını yanlış yerde ararsın.

Yaygın bir hata şu: ekip paylaşım ekranında Herkes'e Tam Denetim verir, sonra güvenliği NTFS tarafında kurmaya çalışır. Mantık şudur: nasılsa NTFS kısıtlar. Çoğu zaman tam tersi olur. NTFS izni aynı kullanıcıya zaten geniş hak tanıyorsa, paylaşım ekranındaki Tam Denetim hiçbir şeyi daraltmaz ve iki katman da açık kalır.

Güvenliği tek bir katmana yaslamak yerine ikisini de dar tutarsın. İş gereği neyse onu ver: muhasebe ekibine Değiştir yeter, Tam Denetim gerekmez. Katmanları ayrı ayrı sıkı tutmak, birini unutsan bile ötekinin seni koruması demektir.

Etkinlik 2 / 5

Paylaşım izni Herkes için Okuma, NTFS izni aynı klasörde Muhasebe-Grubu için Değiştir olarak tanımlı. Muhasebe-Grubu üyesi klasöre ağdan bağlandığında hangi hakka sahip olur?

Önce kodu oku, sonra çıktıyı seç.

Paylasim: Herkes -> Okuma
NTFS: Muhasebe-Grubu -> Degistir

Etkin erişim ve komut satırından tarama

Bir kullanıcının bir dosyada gerçekte hangi hakka sahip olduğunu elle hesaplamak zorlaşır, çünkü kişi birden çok gruba üye olabilir ve her grubun kendi ACE'si vardır. Windows bu yüzden dosya özelliklerinde Etkin Erişim (Effective Access) sekmesini sunar. Bir kimlik seçersin, araç o kimliğin bütün grup üyeliklerini ve kalıtımı birleştirip tek bir sonuç gösterir.

Denetimde bu, ACL'yi tek tek gözle okumaktan çok daha hızlıdır. Aynı bilgiyi komut satırından da alırsın. PowerShell'de Get-Acl bir nesnenin güvenlik tanımlayıcısını döndürür; Format-List ile açık okursun. icacls ise ACL'yi düz metin basar ve betikte yüzlerce klasörü taramaya uygundur.

PS C:\Paylasim> Get-Acl .\Muhasebe | Format-List Path,Owner,AccessToString

Path           : Microsoft.PowerShell.Core\FileSystem::C:\Paylasim\Muhasebe
Owner          : ALTAYKARGO\yonetici
AccessToString : BUILTIN\Administrators Allow  FullControl
                 ALTAYKARGO\Muhasebe-Grubu Allow  Modify, Synchronize
                 Everyone Allow  ReadAndExecute, Synchronize
Get-Acl aynı klasörün izinlerini nesne olarak döndürür; Format-List seçilen alanları alt alta yazar.

Çıktıyı yukarıdan oku. Owner alanı klasörün sahibini verir. Sahip önemlidir, çünkü ACL'de kendisine ret yazılsa bile listeyi yeniden düzenleyebilir.

AccessToString satırları icacls'te gördüğün üç ACE'nin aynısıdır; yalnız kısaltma yerine tam adları yazar. F burada FullControl, M Modify, RX ise ReadAndExecute olur. Yanlarındaki Synchronize küçük bir yardımcı haktır; M ve RX kısaltmaları onu zaten içerir.

Muhasebe klasörü temiz görünüyor: Everyone yalnız okuyup çalıştırabiliyor. Get-Acl'in asıl gücü nesne döndürmesidir. Çıktıyı Where-Object ile süzer, Everyone'a FullControl ya da Modify veren satırları yüz klasörde tek komutla toplarsın. Uyarının kaynağı başka bir klasördeyse, böyle bir tarama onu dakikalar içinde bulur.

Etkinlik 3 / 5

Bordro klasöründeki izinleri komut satırından listele.

ogrenci@lab

Gizli izler: alternatif veri akışları

NTFS'in az bilinen bir özelliği, bir dosyanın birden çok veri akışı taşıyabilmesidir. Normalde içerik adsız akışta durur, ama dosyaya adlandırılmış ek akışlar da iliştirilebilir. Bunlara alternatif veri akışı (ADS) denir.

Meşru bir kullanımı var: internetten indirdiğin dosyalara Windows bir Zone.Identifier akışı ekler, buna web işareti (mark of the web) denir. Aynı özellik saklama için de kötüye kullanılır. Bir saldırgan bir betiği sıradan görünen bir dosyanın akışına gizleyebilir; dosyanın boyu ve görünümü değişmez, bu yüzden hızlı bir bakışta fark edilmez.

MITRE ATT&CK bu tekniği T1564.004 olarak izler. Bunu yalnız kendi lab ortamında ya da yazılı iznin olan bir hedefte dene.

C:\muhasebe> type gizli.ps1 > rapor.pdf:ekip
C:\muhasebe> dir
12.05.2026  23:41             1.024 rapor.pdf
C:\muhasebe> dir /r
12.05.2026  23:41             1.024 rapor.pdf
                                148 rapor.pdf:ekip:$DATA

PS C:\muhasebe> Get-Item .\rapor.pdf -Stream * | Select-Object Stream, Length

Stream  Length
------  ------
:$DATA    1024
ekip       148
İlk komut veriyi gizli bir akışa yazar. Düz dir onu göstermez; dir /r ve Get-Item -Stream gösterir.

Çıktı tekniğin hem gücünü hem zayıflığını gösterir. Düz dir yalnız rapor.pdf'i listeler ve boyutu 1.024 bayt gösterir; akış görünmez. dir /r ise her dosyanın yanında ona bağlı adlandırılmış akışları da basar.

rapor.pdf:ekip satırı 148 baytlık gizli veriyi ele verir. PowerShell'de Get-Item -Stream aynı bilgiyi nesne olarak döndürür: :$DATA dosyanın asıl içeriğidir, ekip ise sonradan eklenen akıştır. Savunan taraf bunu elle denetime bırakmaz.

Sysmon'un 15 numaralı olayı (FileCreateStreamHash), adlandırılmış bir akış oluştuğunda dosyanın özetini ve akışın içeriğini kaydeder. İndirmelerdeki web işareti de bu olayla yakalanır. Akışa gizlenmiş bir PowerShell betiği çalıştırılırsa, betik bloğu günlüğü onu yine kayda geçirir. Yani saklamak akışı görünmez yapar, ama çalıştırmak iz bırakır.

Etkinlik 4 / 5

muh-pc07'de bir dizindeki gizli alternatif veri akışlarını komut satırından listele.

ogrenci@lab

Sahada: bir ACL'yi hızlı okumak

Bir denetimde ACL'yi şu sırayla okursun. Önce kimliklere bak: satırda Everyone ya da Authenticated Users gibi geniş bir grup var mı? Sonra hakka bak: o geniş grup F ya da M mi alıyor, yoksa yalnız R mi? Son olarak kalıtıma bak: (OI)(CI) bu hakkın bütün alt öğelere indiğini söyler, yani hata tek bir dosyada değil, ağacın tamamında demektir.

Everyone:(OI)(CI)(F) satırı bu üç kırmızı bayrağı bir arada taşır ve ilk incelenmesi gereken satırdır. Düzeltme hep aynıdır: hakkı yalnız gereken gruba ve yalnız gereken düzeyde ver, kalanı kaldır. Bu üç adımlı okuma, dakikalar süren bir denetimi saniyelere indirir. Buradaki her karar bir kimliğe dayanır: Muhasebe-Grubu, Everyone, Administrators.

Peki bu kimlikler tam olarak ne ve sistem onları nasıl ayırt ediyor? Bir ACE'nin kime izin verdiğini bilmek için önce o kimliğin ne olduğunu bilmen gerekir: yerel kullanıcı mı, yerleşik grup mu, yoksa bir alan hesabı mı? Aynı ada sahip iki hesap bile aslında ayrı kimlikler olabilir, çünkü Windows onları ad yerine bir numarayla tanır.

Bir izin hatasını kök nedenine kadar çözmek, çoğu zaman o numaraya inmeyi gerektirir. Sonraki derste bu kimlikleri, onların SID numaralarını ve yetki kullanımını kısıtlayan UAC mekanizmasını görürsün.

Etkinlik 5 / 5

icacls kısaltmasını anlamıyla eşleştir.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.
Derinleş:ACE'lerin kurallı sıralaması

Çekirdek erişim kararını verirken ACL'yi baştan sona tarar ve istenen hakka yetecek kadar ACE buldu mu diye bakar. Bu yüzden ACE'lerin sırası önemlidir ve Windows kurallı (canonical) bir sıra uygular: önce açık ret ACE'leri, sonra açık izin ACE'leri, sonra miras gelen ret, en sonda miras gelen izin. Bu sıra şunu güvence altına alır: aynı dosyada hem açık ret hem açık izin varsa, ret önce okunduğu için erişimi gerçekten engeller.

İnce bir ayrıntı da burada saklı: açık bir izin, miras gelen bir reddi geçebilir, çünkü bütün açık ACE'ler miras gelenlerden önce gelir. Araçlar ACE eklerken bu düzeni korur ve icacls /verify kurallı olmayan bir listeyi bildirir. Günlük okumada kuralı 'ret izni ezer' diye sadeleştirebilirsin, ama kesin kural bu sıralamadır.

Derinleş:Web işareti (mark of the web)

İnternetten inen her dosyaya Windows, Zone.Identifier adlı bir alternatif veri akışı iliştirir. İçinde dosyanın hangi güvenlik bölgesinden geldiği yazar; bölge 3, internet demektir. Office ve tarayıcılar bu işarete bakar: işaretli bir belge Korumalı Görünüm'de açılır, işaretli bir betik RemoteSigned ilkesinde imzasızsa çalışmaz. PowerShell'de Get-Item -Stream Zone.Identifier ile bu akışı okur, Unblock-File ile silip işareti kaldırırsın.

Saldırganların bir hedefi de bu işareti düşürmektir; indirdiği aracı akışından arındırıp korumaları atlatmaya çalışır. Tam tersi de olur: bir dosyanın hiç olmaması gereken bir web işareti taşıması, onun dışarıdan geldiğini ele verir. Web işaretinin varlığını ya da beklenmedik biçimde kaybını izlemek, savunan taraf için ucuz ama değerli bir sinyaldir. Bu yüzden disk incelemesinde Zone.Identifier akışı, bir dosyanın geçmişini okumanın ilk duraklarından biridir.

Bu derste bir hata mı gördün? Bildir