Hacker Directory — Understand what you hack.Hacker Directory — Understand what you hack.
Öğrenmeye devam et
EN
İçindekiler15 bölüm · 82 ders
DERS 08.01DERİN TEKNİK İNCELEME

Hesap yaşam döngüsü: Oluşturma, devre dışı bırakma, kilitlenme, silme ve sahipsizlik.

Bir hesap nesnesinin enabled/disabled, locked, deleted ve stale görünümü farklı kaynaklardan anlaşılır. Disabled, userAccountControl içindeki ACCOUNTDISABLE bitidir; locked, lockoutTime ve policy/zaman hesabından türetilen computed görünümle okunur; deleted nesnenin silinmiş işaretlenip Deleted Objects yaşam döngüsüne girmesidir; stale ise lastLogonTimestamp gibi yaklaşık bir değerden çıkarılır. Bu ders geçiş event'lerini, bir DC'deki güncel directory niteliğini ve replikasyon durumunu ayrı tutar; mevcut session veya önceden verilmiş access context'inin disable anında otomatik silinmediğini de gösterir.

1. Core Mechanism / Temel mekanizma

Bir hesabın yaşam döngüsü durumu tek bir yerde tutulmaz. Enabled/disabled için userAccountControl içindeki ACCOUNTDISABLE (0x0002) bitine bakılır. Locked durumu lockoutTime ve policy/zaman koşullarından hesaplanan msDS-User-Account-Control-Computed görünümüyle değerlendirilir; LOCKOUT (0x0010) kalıcı bir userAccountControl alanı gibi okunmamalıdır. Deleted nesne isDeleted=TRUE ile Deleted Objects yaşam döngüsüne girer; Recycle Bin etkinliği, niteliklerin korunmasını ve restore penceresini değiştirir. Stale bir bit değildir; lastLogonTimestamp gibi yaklaşık bir zaman değerinden yapılan çıkarımdır. Audit event bir geçişi, bir DC'den okunan directory attribute o DC'nin gördüğü güncel durumu anlatır; replikasyon yakınsaması ayrı bir katmandır. Grup üyeliği 07.x'te, parola politikası 08.02'de, ACL sahipliği 05.x'tedir.

Arabirimler ve belirtimler

  • userAccountControl: ACCOUNTDISABLE = 0x0002 değişikliği almış DC’nin bu hesap için yeni çevrimiçi domain authentication isteğini reddetmesini sağlar. Cached desktop logon ve daha önce açılmış oturumlar ayrı yollardır. AD DS'de etkin lockout görünümü, lockoutTime ve hesaplanan msDS-User-Account-Control-Computed niteliğindeki ADS_UF_LOCKOUT (0x0010) üzerinden okunur; bu biti kalıcı userAccountControl değeri sanma.
  • Account Lockout Policy: başarısız parola denemeleri yapılandırılmış Account lockout threshold değerine ulaştığında lockout uygulanır; Account lockout duration ve Reset account lockout counter after davranışı belirler.
  • lastLogonTimestamp: domain logon etkinliğini yaklaşık izleyen replicated nitelik; yalnızca değer yapılandırılmış msDS-LogonTimeSyncInterval'dan eskiyse güncellenir. Yaygın varsayılan davranış yaklaşık 9–14 günlük güncelleme eşiği oluşturur; değer tam son etkinliği kanıtlamaz. badPwdCount ve lastLogon ise non-replicated, DC başına tutulur.
  • Deleted object: silinen nesne isDeleted=TRUE ile Deleted Objects içine alınır. AD Recycle Bin silme öncesinde etkinse silinmiş nitelikler deleted-object lifetime boyunca restore edilebilir; sonraki recycled/tombstone ve kalıcı temizleme aşamaları tombstoneLifetime ile yapılandırmaya bağlıdır. Tek bir evrensel 180 günlük varsayım kullanma.
  • Windows Security 4725 (disabled), 4722 (enabled), 4726 (deleted), 4740 (locked out), 4767 (unlocked): Audit User Account Management geçiş kayıtlarıdır; DC/domain ve yerel hesap olaylarının üretildiği bilgisayar bağlamını ayır.

Beş durum, beş farklı saklama yeri

Enabled/disabled durumu userAccountControl içindeki ACCOUNTDISABLE (0x0002) bitine bağlıdır. Disable nesneyi silmez. Değişikliği görmüş bir DC’ye yapılan yeni domain authentication reddedilir; başka DC’nin eski replica görünümü ve DC yokken yerel cached logon ayrı koşullardır. Cached desktop, domain doğrulaması isteyen network resource’a erişim kanıtı değildir.

Locked bundan farklıdır: başarısız deneme sayacı yapılandırılmış Account lockout threshold değerine ulaştığında sistem lockoutTime'ı günceller. Etkin lockout durumu AD DS'de lockoutTime ve msDS-User-Account-Control-Computed çıktısından değerlendirilir; 0x0010 değeri kalıcı userAccountControl niteliği değildir. Süre dolunca kilit kalkabilir; manuel unlock ayrıca 4767 kaydı üretebilir.

Deleted, nesnenin yaşam döngüsünü değiştirir; immediately kalıcı yok oluş demek değildir. Recycle Bin silinmeden önce etkinse silinmiş nesnenin nitelikleri deleted-object lifetime boyunca korunup restore edilebilir. Recycle Bin kapalıysa veya geri yükleme penceresi geçtiyse nesne farklı tombstone/recycled aşamalarına ilerler. Bu sürelerin varsayılanı forest'in geçmişine ve yapılandırmaya göre değişir. Stale ise bir bit değildir: hesap enabled olabilir ama lastLogonTimestamp uzun süredir yenilenmemiştir; bu, kesin son kullanım kanıtı değil bir çıkarımdır.

Geçiş kaydı ile güncel durum aynı şey değildir

Bir 4725 kaydı 'op.admin, abdulvehhab'ı devre dışı bıraktı' der. Bu bir GEÇİŞTİR: kim, ne zaman, hangi eylem. Ama 'abdulvehhab şu anda disabled mı?' sorusunun yanıtı 4725'te değil, nesnenin güncel userAccountControl değerindedir. Birisi 4725'ten sonra hesabı yeniden etkinleştirmiş (4722) olabilir.

Bu ayrım pratik bir teşhis kuralına dönüşür: 'nesne hangi durumda?' sorusu directory'den okunur (userAccountControl, lockoutTime, isDeleted); 'bu duruma nasıl gelindi?' sorusu audit log'dan okunur (4725/4726/4740/4767). Audit log geçmişi anlatır, nitelik bugünü söyler.

İki tarafı karıştırmak yaygın bir hatadır: eski bir 4725'i görüp hesabı hâlâ disabled sanmak, ya da güncel disabled bitini görüp bunun ne zaman/kim tarafından yapıldığını nitelikten okumaya çalışmak. Her soru kendi katmanına sorulur.

Durum ile session state farklı katmanlardır

Bir hesabı disable etmek, daha önce kurulmuş session’ı veya access token’ı anında sonlandırmaz. Değişikliği görmüş DC’deki yeni domain authentication reddedilir; mevcut service ticket, target context ve offline cached desktop bundan ayrı değerlendirilir.

Bu yüzden 'hesabı kapattım' demek 'erişimi anında kestim' demek değildir: mevcut session veya hedef hizmetin önceden kabul ettiği ticket, hedefin yaşam döngüsü/yeniden doğrulama davranışına göre sürebilir. Yeni ticket taleplerinin sonucu ise KDC hesabı, policy ve replikasyon kontrollerine bağlıdır; yalnızca var olan TGT'ye bakarak devam edeceğini varsayma. Incident response sırasında hedef sistemlerdeki etkin oturumları da ele al.

Aynı mantık lockout için de geçerlidir: lockout yeni authentication/logon girişimlerini reddeder ama zaten kurulmuş bir oturumu otomatik düşürdüğü anlamına gelmez. Directory account state ile canlı session/access state ayrı katmanlardır.

Silme, tombstone ve 'sahipsiz' nesneler

Silme anlık fiziksel yok oluş değildir. Recycle Bin önceden etkinse nesne, korunan nitelikleriyle deleted-object yaşam süresi içinde geri yüklenebilir; bu özelliğin kapalı olduğu ormanda ise restore olanakları ve kalan nitelikler farklıdır. Silinmiş, recycled/tombstone ve kalıcı temizleme aşamalarının süreleri forest yapılandırmasına bağlıdır; bu nedenle '180 gün'ü her orman için sabit varsayma.

Sahipsiz (orphaned) hesap ayrı bir kavramdır: nesne silinmemiştir, enabled'dır, ama arkasındaki gerçek sahip (ayrılan çalışan, kaldırılan servis) yoktur. Bu hesabın kimliği hâlâ geçerlidir; parolası biliniyorsa veya bir yerde saklıysa erişim üretmeye devam eder. Sahipsizlik bir durum biti değil, organizasyonel bir gerçeğin çıkarımıdır.

Bu iki kavram 08.01'in Red katmanının çekirdeğidir: silme penceresi ve sahipsiz-ama-geçerli hesap, 'kapatıldı sanılan ama hâlâ kimlik üreten' nesnelerin iki tipik kaynağıdır.

Beş ayrı yerde tutulan erişim

Finance üyeliğini kaldırdığını düşün. Directory’deki üyelik, kullanıcının parolasına bağlı credential, istemci process token’ı, ticket cache ve dosya sunucusunun kabul ettiği session aynı yerde tutulmaz. Üyelik değişikliği mevcut process token’ını baştan üretmez. Parola değiştirmek de o token’daki grup SID’lerini düzenleyen bir işlem değildir. Yeni authentication’ın sonucu, kullanılan DC’nin gördüğü durum ve policy ile ayrıca değerlendirilir.

Karşılaştırmadaki her seçeneği bu yüzden ayrı oku: hesap kapatma directory durumunu, parola değişikliği credential zamanını, ticket cache temizliği istemcideki cache’i etkiler. Cache temizlenirken hedefte açık olan bağlantının context’i otomatik yeniden oluşturulmaz. Kontrollü yeni bir target context ise yeniden ölçüm fırsatıdır; farklı bir DC veya başka bir izin yolu kullanılıyorsa aynı sonuç çıkabilir. 02.03 token’ın oluşumunu, 06.02 ticket’ın yolunu, 10.07 replica’nın güncelliğini ayrı açıklar.

Durum ve veri akışı

  1. Başlangıç: DC01’in güncel attribute görünümü ile daha önce kurulmuş token, ticket ve target session ayrı kayıtlardır.
  2. Seçilen hesap değişikliği fixture’a uygulanır. Disable/enable, 4725/4722; lockout/unlock, 4740/4767 ayrı geçişlerdir.
  3. Önceden oluşmuş token ve target session geriye dönük yeniden kurulmaz. Ticket’ın endtime’ı tek başına session’ın kapanma anı değildir.
  4. Yeni authentication’ın yolu ayrı değerlendirilir: güncel DC, eski replica görünümü ve offline cached desktop aynı karar değildir.
  5. Yeni target context gerekiyorsa ayrıca oluşturulup sonucu gözlenir. Cache temizliği, hedefteki mevcut bağlantının kendiliğinden yenilendiğini göstermez.
  6. Son karşılaştırma: event geçmişi hangi geçişi anlatıyor; seçilen DC’nin güncel attribute’u ne; target session’ın gerçek sonucu ne?

2. Exploitation / İstismar

Broken trust assumption

Kırılan varsayım şudur: 'Bir hesabı disable ettiysem veya lockout olduysa o kimlikle kurulmuş erişim anında biter.' Disable/lock yeni girişimleri engelleyebilir; fakat önceden kurulmuş session, access token veya hizmetin kabul ettiği ticket'ı otomatik geri çağırmaz. Recycle Bin ile silinmiş nesne ancak doğru özellik ve yaşam süresi koşullarında restore edilebilir; enabled kalan sahipsiz hesap ise parolası erişilebiliyorsa geçerli kalır. Risk, account state ile gerçek session/resource access state'ini aynı sanmaktan doğar.

Technical prerequisites

  • Yeni online domain authentication’ın hangi DC’ye gittiği ve o DC’nin ACCOUNTDISABLE değişikliğini görüp görmediği bilinmelidir. Güncel disabled durumdaki DC bu yolu reddeder; offline cached desktop ve eski replica görünümü ayrı koşullardır.
  • Disable/lock anından önce kurulmuş session/access token veya hedef hizmetin kabul ettiği bir service ticket bulunması; mevcut erişim, hedef oturumun ve ticket'ın yaşam döngüsüne bağlıdır. Yeni service-ticket isteğinin başarılı olacağını TGT'nin varlığından tek başına çıkarma.
  • Geri yükleme riski için AD Recycle Bin silinmeden önce etkin, nesne restore süresi içinde ve restore işlemini yapan principal yetkili olmalıdır; geri gelen nitelikler ile üyelikler bu feature/lifetime koşullarına bağlıdır.
  • Stale hesabın hâlâ ayrıcalıklı grup üyeliği taşıması; kullanılmayan ama yetkili bir hesap, unutulmuş bir attack surface'tir (üyelik 07.x'te).

Exploitation mechanism / İstismar mekanizması

Mekanizma account state ile kaynak üzerinde zaten kurulmuş access context arasındaki farktır. Disable ACCOUNTDISABLE'ı set eder ve yeni logon/authentication girişimlerini engeller; fakat mevcut access token'ı, açık session'ı veya bir hizmetin daha önce kabul ettiği ticket'ı geriye dönük silmez. TGT ile yeni service ticket alınacağını ise her durumda varsayma: KDC'nin yeni talepte uyguladığı hesap/policy durumu ayrıca belirleyicidir. Lockout da mevcut session'ı otomatik sonlandırmaz. Sahipsiz ama enabled hesap geçerli credential ile giriş yüzeyi olmaya devam eder. Silinmiş nesnenin attribute ve üyelikleriyle geri gelmesi, Recycle Bin'in önceden etkin olması, süre ve restore yetkisi gibi koşullara bağlıdır.

Devre dışı hesap, canlı oturum

Hesabı disable etmek, o kimlikle daha önce açılmış oturumu anında düşürmez. Hedef sistemdeki session, access token veya servisin daha önce kabul ettiği ticket kendi yaşam döngüsüne göre kalabilir. Yeni service-ticket talebinin sonucu ayrıca KDC ve account policy kontrollerine bağlı olduğundan, yalnızca TGT varlığıyla devam eden erişimi garanti sayma. Incident response'ta hesabı kapatmanın yanında hedeflerdeki etkin oturumları da gözden geçir.

Ticket ömrünü kısaltmak gelecekteki ticket kullanımını sınırlar; daha önce kabul edilmiş target session’ı tek başına kapatmaz. Fiili kesinti, ilgili service’in reauthentication/session davranışına ve açık oturumun sonlandırılmasına bağlıdır. Disable ile erişimin bitmesi arasına her service için sabit bir ticket-lifetime süresi yazılamaz.

Sahipsiz ve stale: en sessiz yüzey

Sahipsiz hesap bir alarm üretmez çünkü teknik olarak her şey normaldir: enabled, parola geçerli, belki de düzenli 'çalışıyor'. Risk, arkasında bir insan/servis sahibinin olmaması ve kimsenin onu izlememesidir. Parolası eski ve hiç değişmiyorsa, bir sızıntıda uzun ömürlü bir giriş noktası olur.

Stale hesap benzer biçimde radar altındadır: lastLogonTimestamp aylardır güncellenmemiştir ama hesap silinmemiş, disable edilmemiştir. Eğer bu hesap ayrıcalıklı bir grupta kalmışsa, kullanılmayan ama yetkili bir hedef olur. Her iki durumda da 'zafiyet' bir bit değil, yönetimsel bir kör noktadır ve tam da bu yüzden envanter/expiry kontrolleriyle kapatılır (Blue).

Silme penceresi ve yanlış restore: geri gelen ayrıcalık

Silinen kimliğin geri gelmesi uzaktan sömürü değildir: Recycle Bin silinmeden önce etkinleştirilmiş ve deleted-object lifetime sürüyor olmalı; ayrıca restore işlemini yapacak principal yeterli yetkiye sahip olmalıdır. Bu koşullar sağlanırsa korunan SID, grup üyelikleri ve diğer nitelikler geri dönebilir. Retention değerleri forest yapılandırmasına bağlıdır; her yerde 180 gün varsayma.

Olası etki, restore edilen kimliğin eski ayrıcalıklarıyla geri dönmesidir: eğer silinen hesap bir yönetici grubundaysa, naif bir restore o üyeliği de geri getirir ve fark edilmeyen bir ayrıcalıklı hesap yeniden erişim üretir. Bunu engelleyen kontrol, silme/restore'u kontrollü bir süreç yapmaktır: Recycle Bin'i bilinçli yönet, restore'ları onaya bağla ve geri getirilen ayrıcalıklı hesapların üyeliğini restore sonrası doğrula. Böylece silme penceresi bir saldırı yüzeyi değil, denetlenen bir yaşam döngüsü adımı olur.

Bu örneğin risk sınırı

“Hesabı kapattık” ifadesinden bütün hedeflerdeki erişimin sona erdiği sonucu çıkmaz. İncelenen context’in nerede ve ne zaman oluşturulduğunu belirle; eski TGT’den yeni taleplerin mutlaka kabul edileceğini de varsayma.

3. Defense & Detection / Savunma ve tespit

Telemetry scope

  • userAccountControl içindeki ACCOUNTDISABLE, enabled/disabled durumunu gösterir. Lockout için lockoutTime ve policy/zamanla hesaplanan msDS-User-Account-Control-Computed niteliğini de incele; isDeleted ve lastLogonTimestamp farklı lifecycle sorularına yanıt verir. Directory okuması bağlandığın DC'nin görünümüdür; replication convergence ayrıca değerlendirilir. Audit event ise yalnız geçişi kaydeder.
  • 4725/4726/4740/4767 gibi hesap yönetimi olayları Audit User Account Management alt kategorisine bağlıdır ve hesap işleminin gerçekleştiği bilgisayarda üretilir: domain hesapları için ilgili DC'de, yerel (SAM) hesaplar için ilgili üye sunucu/istemcide. Bunlar SACL gerektirmez, User Account Management denetimi açık olmalıdır.
  • 4740 (lockout) kaydı, hesabın kilitlenmesinin kaydedildiği bilgisayarda üretilir (bu senaryodaki domain hesabında ilgili DC). Başarısız deneme sayacı badPwdCount replicated değildir ve her DC'de ayrı tutulur (AD replikasyon modeli); bu yüzden tek bir DC'nin görüntüsü tüm ormanın başarısız deneme toplamını vermez.
  • Stale hesabı tek bir event yerine lastLogonTimestamp toplu sorgusuyla yaklaşık değerlendir. Değer yalnız msDS-LogonTimeSyncInterval eşiğini geçtiğinde yenilenir; varsayılan eşik yaklaşık 9–14 gün davranışı gösterebilir ve yapılandırılabilir. Bu nedenle yakın tarihli kullanım yorumunda alanı kesin son-logon zamanı gibi okuma.
  • 4726, account deletion geçişini kaydeder; Deleted Objects retention, restore ve nihai temizleme davranışı AD Recycle Bin'in silme öncesinde etkin olup olmamasına ve deleted-object/tombstone lifetime yapılandırmasına bağlıdır. 4726 fiziksel yok oluşu kanıtlamaz.

Events and relevant fields

  • 4725 / SubjectUserName + TargetUserName: devre dışı bırakma geçişinde eylemi yapan (Subject) ile etkilenen hesabı (Target) ayırır; TargetSid kalıcı kimliktir, ad değişse de sabittir.
  • 4740 / TargetDomainName ile Caller Computer Name ayrı alanlardır: domain hesabında TargetDomainName hesap domain'ini taşır; kilitlenmeyle sonuçlanan denemenin kaynağı Microsoft'un Additional Information / Caller Computer Name alanında gösterilir. Bu alanları SIEM şemasında aynı kolona eşleme.
  • 4740 / SubjectUserSid: kilitlenme otomatik olduğu için genellikle S-1-5-18 (Local System) ve DC hesabıdır; bir kullanıcı 'kilitledi' demek yanlıştır, eylem sistemseldir.
  • 4767 / TargetUserName: bir hesabın manuel açılmasını (unlock) kaydeder; art arda kilitlenme + hızlı unlock deseni, hem yanlış yapılandırma hem de olası bir brute-force belirtisi olabilir.
  • 4722 / TargetUserName: bir hesabın yeniden etkinleştirilmesini kaydeder; disable geçmişini okurken 4725'i tek başına değil, sonraki 4722 ile birlikte değerlendirmek gerekir, aksi hâlde güncel durum yanlış çıkarılır.

Hangi soru hangi katmana sorulur

İlk kural, soruyu doğru katmana yöneltmektir. Güncel enabled/disabled için userAccountControl içindeki ACCOUNTDISABLE; lockout için lockoutTime ve computed msDS-User-Account-Control-Computed; silinme için isDeleted; yaklaşık kullanım için lastLogonTimestamp okunur. 'Kim, ne zaman değiştirdi?' sorusu audit event'tir.

Bu ayrım, yaygın bir yanlış çıkarımı önler: eski bir 4725'i görüp hesabı hâlâ disabled sanmak. Doğru okuma, geçiş olaylarını zaman sırasıyla değerlendirip güncel durumu her zaman nitelikten teyit etmektir. Event geçmişi anlatır; nitelik bugünü söyler.

Durum       Güncel kaynak                                  Geçiş event'i
----------  --------------------------------------------  ---------------------
disabled    userAccountControl / ACCOUNTDISABLE           4725 / 4722
locked      lockoutTime + computed UAC view                4740 / 4767
deleted     isDeleted + Deleted Objects lifecycle          4726
stale       lastLogonTimestamp (yaklaşık çıkarım)           -- tek event yok
orphaned    -- organizasyonel sahiplik durumu                -- envanter/sahiplik

Replikasyon durumu ile denetim çıkarımını ayır

Bir hesabın durumunu birden çok DC'de sorgularsan, replikasyon gecikmesi yüzünden farklı yanıtlar görebilirsin: bir DC hesabı hâlâ enabled, diğeri disabled gösterebilir. Bu bir çelişki değil, replikasyonun henüz yakınsamamış (converge) olmasıdır. userAccountControl gibi replicated nitelikler eninde sonunda tüm DC'lerde aynı olur; badPwdCount ve lastLogon gibi non-replicated nitelikler ise her DC'de ayrıdır ve hiçbir zaman tek bir 'doğru' değere yakınsamaz.

Bu, denetim çıkarımını dikkatli yapmayı gerektirir. Directory replikasyon protokolünün taşıdığı şey nesne durumudur (nitelik değerleri, versiyon ve originating bilgisi); audit log ise ayrı bir kanaldır ve olayları üreten DC'de tutulur. İki hesap değişikliği farklı DC'lerde neredeyse aynı anda yapılırsa, hangisinin 'kazandığı' bir conflict-resolution kuralıyla belirlenir — ama bu kural, senin audit log'dan yaptığın 'kim önce yaptı' çıkarımınla aynı şey değildir. Bu derste replikasyonun iç metaverisi (versiyon sayaçları, originating DC) uydurulmaz; yalnızca şu ilke tutulur: gördüğün durum bir DC'nin o andaki görüntüsüdür, olayların mutlak sırası değil.

Pratik sonuç: 'kim/ne zaman' çıkarımını tek bir DC'nin audit log'una dayandır, ama 'nesne şu an hangi durumda' sorusunu yanıtlarken hangi DC'ye sorduğunu ve replikasyonun yakınsayıp yakınsamadığını hesaba kat. Non-replicated bir niteliği (badPwdCount) tek DC'den okuyup tüm ormanın gerçeği sanmak, en sık yapılan çıkarım hatasıdır.

Değişiklik sonrası doğrulama

Değişikliği yapan DC’deki güncel state’i, istemci cache’ini ve hedef session’ı ayrı zamanlarla kaydet. Kapanışta aynı kaynak ve requested right için yeni context sonucunu ve yetkili kullanıcının çalışabildiğini doğrula.

Detection logic · Sigma

title: Hesap disable ve otomatik lockout gecisleri (hesap yasam dongusu)
id: 0801-account-lifecycle-transitions
status: experimental
description: >
  User Account Management gecislerini (disable/lockout/unlock) gozlem noktasi
  olarak secer; directory'nin guncel account state'ini vermez.
logsource:
  product: windows
  service: security
detection:
  transitions:
    EventID:
      - 4725   # disabled
      - 4740   # locked out
      - 4767   # unlocked
  condition: transitions
fields:
  - EventID
  - TargetUserName
  - TargetSid
  - TargetDomainName     # hedef account domain/computer baglami
  - CallerComputerName   # 4740 icin kaynak computer; ayri alan
  - SubjectUserName
falsepositives:
  - Rutin yonetim: planli disable, mesru unlock islemleri
  - Yanlis kaydedilmis parola kaynakli mesru lockout
level: low

Query assumptions

  • Sigma logsource windows/security kanalını varsayar; bu kural bir korelasyon değil, gözlem noktası seçimidir ve 'güncel durumu' vermez, yalnız geçiş kayıtlarını toplar.
  • TargetDomainName hedef hesabın domain/computer bağlamıdır. 4740'taki Caller Computer Name ayrı ek bilgidir; event şemasında iki alanı tek alana indiren bir backend kaynak ayrımını kaybettirir.
  • 4740 hesabın kilitlenmesinin kaydedildiği bilgisayarda oluşur; domain hesaplarında DC Security log'ları toplanmalıdır. badPwdCount non-replicated ve DC başına tutulur; tek DC değeri domain toplamı değildir. Caller Computer Name kaynağı gösterebilir ama her senaryoda IP adresi sağlamaz.
  • Bu seçim canlı bir sistemde çalıştırılmadı; yalnızca bu dersin sentetik 4725/4740 örnekleri üzerinde alanların seçilebilirliği doğrulandı.

False positives

  • Planlı hesap devre dışı bırakma (ayrılan çalışan süreci) meşru 4725 üretir; tek başına saldırı değildir.
  • Yanlış kaydedilmiş parola art arda başarısız denemeyle meşru lockout/4740 üretebilir; kaynak için 4740 Caller Computer Name alanını kullan, TargetDomainName'i değil.
  • Negatif örnek: sahipsiz ama enabled ve düzenli kullanılan bir hesap hiçbir geçiş olayı üretmez; bu filtre onu göremez. Stale/orphaned tespiti event değil, nitelik sorgusu gerektirir.

Hardening

  • Hesap kapatmayı, ilgili DC’nin güncel read-back’i ve target’taki etkin oturumların incelenmesiyle doğrula. Kısa ticket lifetime gelecekteki kullanımı sınırlayabilir; mevcut session’ın kapandığını ayrı gözlemle. Service’in reauthentication davranışını ve oturum sonlandırma politikasını birlikte değerlendir (06.07).
  • lastLogonTimestamp temelli düzenli stale-account envanteri yap; ~14 günlük güncelleme gecikmesini hesaba katarak eşiği (örneğin 90 gün) buna göre seç, dar pencerelerle yanlış 'aktif' etiketi verme.
  • Ayrıcalıklı gruplardaki stale ve sahipsiz hesapları öncelikle temizle; kullanılmayan yetkili hesap, en sessiz attack surface'tir. Kaldırma öncesi bağımlılıkları (servis, scheduled task) doğrula.
  • AD Recycle Bin'i etkinleştir ve tombstone lifetime'ı politikayla yönet; silme sonrası geri getirmeyi kontrollü bir süreç yap, yanlış restore ile ayrıcalıklı bir kimliğin geri canlanmasını engelle.
  • Account lockout threshold/duration/observation window değerlerini denge gözeterek ayarla; çok düşük eşik meşru kullanıcıyı kilitleyip DoS'a yol açar, çok yüksek eşik brute-force'a alan açar. Değişiklik sonrası bilinen bir iş akışıyla doğrula: meşru giriş kilitlenmemeli, eşik aşımında 4740 üretilmeli.
  • Denetim kapsamını doğrula: Audit User Account Management açık olmalı ve hesap işlemlerinin üretildiği bilgisayarların (domain hesapları için DC'ler) Security log'ları merkezîleştirilmeli; aksi hâlde lockout ve disable geçişleri eksik toplanır.

Örnekler üzerinde oku / Read the examples

ÖRNEĞİ BİRLİKTE OKUYALIM

EĞİTİM İÇİN HAZIRLANDI

Kim, hangi hesabı devre dışı bırakmış?

4725 · bir kullanıcı hesabı devre dışı bırakıldı (Event XML, Version 0)

01
İşlemin hesabıS-1-5-21-3623811015-3361044348-30300820-1105

SubjectUserName=op.admin; bu SID işlemi yapan hesaptır. Devre dışı bırakılan hesabın kimliği TargetSid alanındadır.

02
Devre dışı bırakılan hesapS-1-5-21-3623811015-3361044348-30300820-1188

TargetUserName=abdulvehhab. Bu SID, Subject SID’den farklı roldedir; açık session’ların durumunu taşımaz.

03
Aktörün session bağı0x3e9f1

Kaydı yazan host ve ilgili zaman aralığında aktörün logon’u ile ilişkilendir. Hedef hesabın token ID’si değildir.

04
Değişikliği kaydeden hostDC01.outreason.example

Bu örnekte DC01 değişikliği kaydetmiş. Diğer DC’nin durumu ve resource server session’ı bu kesitte yok.

Buradan çıkaracağın fikir

4725 hesabın devre dışı bırakılmasını kaydeder. Replication yakınsaması, önceden verilmiş ticket/token ve açık application session’ın sonlanması ayrı zaman ve kanıt ister.

Rehber bu sentetik örneğin seçilmiş alanlarını açıklar. Ham metni değiştirirsen genel okumaya dönülür; Windows işlemi veya olayın gerçekliği doğrulanmaz.

Bu örneğin kapsamı

Sentetik 4725 kaydı; gerçek bir domain controller'dan alınmadı. Bu olay bir yönetim eyleminin (op.admin, abdulvehhab hesabını devre dışı bıraktı) audit kaydıdır: nesnenin userAccountControl niteliğindeki ACCOUNTDISABLE (0x0002) bitinin set edilmesine karşılık gelir. İncelenecek alanlar: Subject (SubjectUserSid/SubjectUserName/SubjectLogonId) eylemi yapan; Target (TargetUserName/TargetSid) etkilenen nesnedir; TargetSid kalıcı kimliktir ve hesap adı değişse bile sabittir. Keywords 0x8020...0000 Audit Success'i işaret eder; EventID 4725 Audit User Account Management alt kategorisine bağlıdır ve hesap işleminin gerçekleştiği bilgisayarda üretilir (domain hesabı için DC, yerel hesap için üye sunucu/istemci); bu sentetik senaryoda kaynak DC01'dir. Kayıt bir DURUM değil, bir GEÇİŞ kaydıdır: nesnenin şu anki disabled olup olmadığını değil, kimin ne zaman bu geçişi yaptığını söyler. Nesnenin güncel durumu userAccountControl'den okunur. Tam Version 0 alan kümesinin derse ilgili alt kümesidir; alan değerleri sentetiktir.

Ham kaydı aç · EVENT-XML
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
    <EventID>4725</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>13824</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2026-09-29T08:12:03.7710000Z" />
    <EventRecordID>90114</EventRecordID>
    <Correlation />
    <Execution ProcessID="724" ThreadID="4360" />
    <Channel>Security</Channel>
    <Computer>DC01.outreason.example</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="TargetUserName">abdulvehhab</Data>
    <Data Name="TargetDomainName">OUTREASON</Data>
    <Data Name="TargetSid">S-1-5-21-3623811015-3361044348-30300820-1188</Data>
    <Data Name="SubjectUserSid">S-1-5-21-3623811015-3361044348-30300820-1105</Data>
    <Data Name="SubjectUserName">op.admin</Data>
    <Data Name="SubjectDomainName">OUTREASON</Data>
    <Data Name="SubjectLogonId">0x3e9f1</Data>
  </EventData>
</Event>

ÖRNEĞİ BİRLİKTE OKUYALIM

EĞİTİM İÇİN HAZIRLANDI

Hangi hesap kilitlenmiş, hangi kaynak adı kaydedilmiş?

4740 · bir kullanıcı hesabı kilitlendi (Event XML, Version 0)

01
Kilitlenen hesapS-1-5-21-3623811015-3361044348-30300820-1188

TargetUserName=abdulvehhab. Subject SID kilitleme işleminin hesabıdır; bu örnekte Local System.

02
Giriş denemesinin kaynak ipucuWS-FIN07

WS-FIN07, kilitlenmeye yol açan giriş denemesinin alındığı bilgisayar adı. IP adresi, process veya bütün kötü parola denemeleri değildir.

03
Kilitleme işleminin hesabıS-1-5-18

S-1-5-18 Local System’dir; saldırganın veya kaynak bilgisayardaki kişinin kimliği değildir.

04
Kaydı yazan hostDC01.outreason.example

DC01 bu kaydı yazmıştır. CallerComputerName ve TargetDomainName farklı soruları yanıtlar; DC01 kaynağın adı değildir.

Buradan çıkaracağın fikir

4740 kilitlenen hesabı ve kaynak bilgisayar ipucunu gösterir. Kök neden, kullanıcı niyeti, eski ticket’ların durumu ve açık session’ların kapanması bu kayıttan çıkmaz.

Rehber bu sentetik örneğin seçilmiş alanlarını açıklar. Ham metni değiştirirsen genel okumaya dönülür; Windows işlemi veya olayın gerçekliği doğrulanmaz.

Bu örneğin kapsamı

Sentetik 4740 örneği; gerçek bir DC'den alınmadı. Eşik karşılandığında oluşan otomatik lockout geçişini temsil eder. TargetDomainName bu domain hesabında OUTREASON'tur; CallerComputerName kaynak bilgisayarı WS-FIN07 olarak ayrı gösterir. Microsoft'un belge örneği TargetDomainName'i hedef hesabın domain/computer bağlamı olarak, Caller Computer Name'i ayrı Additional Information alanı olarak tanımlar. Subject S-1-5-18 / DC01$ sistem bağlamıdır. Event 4740'ın üretim yeri Microsoft'un belgesindeki kapsamla sınırlıdır. badPwdCount non-replicated ve DC başına tutulur; değerler sentetiktir ve Event XML'nin derse ilgili alt kümesidir.

Ham kaydı aç · EVENT-XML
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
    <EventID>4740</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>13824</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2026-09-29T08:41:57.2030000Z" />
    <EventRecordID>90260</EventRecordID>
    <Correlation />
    <Execution ProcessID="724" ThreadID="5012" />
    <Channel>Security</Channel>
    <Computer>DC01.outreason.example</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="TargetUserName">abdulvehhab</Data>
    <Data Name="TargetDomainName">OUTREASON</Data>
    <Data Name="CallerComputerName">WS-FIN07</Data>
    <Data Name="TargetSid">S-1-5-21-3623811015-3361044348-30300820-1188</Data>
    <Data Name="SubjectUserSid">S-1-5-18</Data>
    <Data Name="SubjectUserName">DC01$</Data>
    <Data Name="SubjectDomainName">OUTREASON</Data>
    <Data Name="SubjectLogonId">0x3e7</Data>
  </EventData>
</Event>

ÖRNEĞİ BİRLİKTE OKUYALIM

EĞİTİM İÇİN HAZIRLANDI

Bu gözlem bize neyi söylüyor?

Karşılaştırmanın gözlem tablosu · sentetik

01
directoryViewmembership removed on A/B

Directory üyeliği A/B üzerinde kaldırılmış. Bu gözlem eski ticket, target token veya açık session’ın içeriğini ölçmez.

02
TGTissued before change

Değişiklikten önce verilmiş TGT. Sonraki service ticket veya target token, bu alanla aynı gözlem değildir.

03
serviceTicketissued before change

Bu service ticket da değişiklikten önce verilmiş. Ticket endtime, target session’ın sonlandığını tek başına göstermez.

04
targetTokenaccepted at 09:10

09:10’da kabul edilen target context. applicationSession aynı bağlantının 10:05’teki durumunu anlatır; yeni context’in Finance SID taşımaması eski bağlantıyı otomatik kapatmaz.

Buradan çıkaracağın fikir

Aynı belirtiyi farklı nedenler üretebilir. Bu tabloyu dersteki karar sınırlarıyla birlikte karşılaştır.

Bu JSON bir eğitim kaydıdır; Windows çıktısı veya çalıştırılabilir istek değildir.

Bu örneğin kapsamı

Bu eğitim tablosu native Windows çıktısı değildir. Değerler karşılaştırmanın varsayımlarıdır; üstteki kontroller hangi sonucun henüz bilinmediğini gösterir.

Ham kaydı aç · MODEL-JSON
{
  "kind": "teaching-record",
  "synthetic": true,
  "scenario": "E01",
  "directoryView": "membership removed on A/B",
  "TGT": "issued before change",
  "serviceTicket": "issued before change",
  "targetToken": "accepted at 09:10",
  "applicationSession": "same connection at 10:05",
  "comparison": "fresh target context observed without Finance SID, old connection still usable",
  "sessionLifetimeBoundary": "Ticket endtime does not by itself establish target session termination; service reauthentication and session state are separate."
}

İki yanlış kanı / Two reality checks

Sanılan: Bir hesabı devre dışı bıraktığımda o kimliğin tüm erişimi anında biter.
Gerçekte: Hayır. Disable userAccountControl içindeki ACCOUNTDISABLE (0x0002) bitini set eder ve yeni logon/authentication girişimlerini engeller; mevcut access token, kurulmuş session veya hedef hizmetin kabul ettiği ticket'ı geriye dönük geri çağırmaz. Yeni service-ticket isteğinin sonucu TGT'nin varlığından tek başına çıkarılamaz; KDC account/policy kontrolleri ayrıca önemlidir. Gerçek erişim kesme, hedef sistemlerdeki mevcut oturumları da ele almayı gerektirebilir.
Sanılan: 4740 olayındaki TargetDomainName kaynak bilgisayarı gösterir.
Gerçekte: Hayır. Domain account örneğinde TargetDomainName hedef hesabın domain bağlamıdır. Kaynak makine Microsoft'un 4740 dokümanında Additional Information / Caller Computer Name olarak ayrı tanımlanır. Event Viewer veya SIEM görünümünde bu iki alanı karıştırma; kaynak alanı eksik/boş olabilir ve IP adresi garantilemez. Subject'in genellikle Local System olması, Target ve Caller alanlarının anlamını değiştirmez.

SIRA SENDE

Bu hikâyeyi sen çöz.

Bilgiyi hatırlamaktan bir adım ileri: koşulu değiştir, kanıtı oku, kararın nedenini anlat.

1 / 3 · SONUCU TAHMİN ET

DC01’de hesabı disable etmek hangi sonucu tek başına kanıtlamaz?

Bir cevap seç

Bir ipucu

Directory durumu ile mevcut target session farklı nesnelerdir.

Cevabın gerekçesini oku

FS01’de önceden kurulmuş bütün session’ların anında kapandığını.

Doğru. Disable eski token/context’i geriye dönük yeniden kurmaz; session sonucu ayrıca gözlenir.

2 / 3 · KANITI OKU

Bu eski event hesabın şu anda hâlâ disabled olduğunu kanıtlar mı?

Yeni sentetik pratik örneği; ders artifact’inden bağımsızdır.
EventID
4725
Computer
DC01.iyelabs.example
TargetUserName
tunahan
TimeCreated/SystemTime
2026-10-08T09:00:00Z
Güncel directory görünümü / Current directory view
not observed
Bir cevap seç

Bir ipucu

Geçiş kaydı ile güncel directory snapshot’ını ayır.

Cevabın gerekçesini oku

Hayır; yalnız o andaki disable geçişini anlatır.

Doğru. Güncel attribute, seçilen DC/replica ve session sonucu ayrıca okunur.

3 / 3 · KENDİN ANLAT

Yeni domain authentication reddedilirken eski FS01 session’ı neden ayrı incelenir?

Bir ipucu

Eski context’in oluşma zamanı ile yeni isteğin otoritesini ayır.

Cevabın gerekçesini oku

Yeni authentication, ulaştığı otoritenin güncel hesap görünümüyle değerlendirilir. Önceden kurulmuş FS01 session’ı ise eski context’i kullanıyor olabilir; disable event’i bu session’ın kapanmış olduğunu tek başına göstermez.

  • Eski context’in otomatik yeniden kurulmadığını anlattım.
  • Yeni authentication yolu ile session gözlemini ayırdım.

Açıklaman otomatik puanlanmaz. Kontrol noktalarını kendi cevabınla karşılaştır.

Bu pratikler öğrenme amaçlıdır; sertifika sınavının puanını etkilemez.

Kaynaklar / Sources