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

Domain join: Bilgisayar hesabı ve Netlogon secure channel nasıl oluşur?

Bir bilgisayarı domain'e katmak, dizinde bir computer object oluşturup makineye bir hesap ve parola vermektir. Bu makine parolası, istemci ile bir DC arasındaki Netlogon secure channel'ın temelini oluşturur ve varsayılan olarak periyodik (yaklaşık 30 gün) yenilenir. Bu ders join/reuse hakkının kimde olduğunu, makine parolasının nasıl yönetildiğini ve secure channel'ın hangi güven varsayımına dayandığını ayırır; asıl sürpriz, hesabı oluşturmak için domain admin olmanın gerekmemesidir.

1. Core Mechanism / Temel mekanizma

Domain'e katılan istemci, dizindeki computer object (objectClass computer), makine hesabının parolası (LSA secret olarak istemcide saklanır) ve istemci Netlogon service ile bir DC arasında kurulan secure channel. Bu ders computer account'un yaratımını/yeniden kullanımını ve secure channel'ın kimlik temelini ele alır; DC Locator ile DC bulmayı 04.01'e, Kerberos bilet mekaniğini 06 bölümüne, makine parolasının kriptografik kullanımını ileri Netlogon derslerine bırakır.

Arabirimler ve belirtimler

  • computer object (objectClass: computer): domain'e katılan makineyi temsil eden dizin nesnesi; sAMAccountName sonu '$' ile biter (ör. WS-034$).
  • ms-DS-MachineAccountQuota: quota-managed “Add workstations to domain” user-right yolu için domain düzeyinde varsayılan izin sayısı; varsayılan değer 10.
  • Makine hesabı parolası: join sırasında belirlenen, istemcide LSA secret olarak tutulan ve varsayılan ~30 günde bir yenilenen kimlik materyali.
  • Netlogon secure channel: istemci Netlogon service ile bir DC arasında, makine hesabı kimliğine dayanan güvenli iletişim kanalı.
  • Directory userAccountControl / WORKSTATION_TRUST_ACCOUNT (0x1000): computer account türünü belirten AD attribute biti. Event 4741’deki NewUacValue ise ayrı SAM User Account code alanıdır; örnekte 0x80 workstation trust hesabını gösterir.
  • primaryGroupId 515: makine hesaplarının varsayılan birincil grubu Domain Computers'ı gösterir.
  • SeMachineAccountPrivilege: “Add workstations to domain” kullanıcı hakkı; yeni computer account için quota-managed yetki yoludur, quota’dan bağımsız ikinci bir kapı değildir.
  • Create Computer Objects (ACTRL_DS_CREATE_CHILD): hedef OU/container üzerindeki explicit ACL izni; yeni account yaratmak için quota-managed kullanıcı hakkına alternatif bir yoldur. Var olan account’u reuse etmek ayrı izin koşullarına tabidir.

Domain join bir 'nesne + parola' işlemidir

Bir makineyi domain'e katmak, dizinde onu temsil eden bir computer object oluşturur ya da var olan bir nesneyi yeniden kullanır. Bu nesne bir security principal'dır: kendi SID'i, sAMAccountName'i (WS-034$) ve parolası vardır. Makine, kullanıcılar gibi domain'de 'birisi' hâline gelir.

Join sırasında belirlenen makine parolası dizinde hesapla ilişkilendirilir; istemci tarafında ise açık metin değil, LSA secret olarak saklanır. Bu parola bir insanın yazdığı parola değildir; işletim sistemi tarafından üretilir ve yönetilir.

Bu ders boyunca tek bir nesneyi izleyelim: WS-034$ oluşturulur (4741), primaryGroupId 515 (Domain Computers) atanır ve UAC değeri WORKSTATION_TRUST_ACCOUNT içerir. Event 4741’in NewUacValue alanı ayrı SAM kodlamasını kullanır: örnek 0x80, directory userAccountControl içindeki 0x1000 bitiyle aynı numeric representation değildir.

Yeni computer account için iki alternatif yetki yolu vardır

Yaygın yanılgı, bilgisayarı yalnız yöneticilerin domain’e ekleyebildiğidir. Varsayılan ms-DS-MachineAccountQuota = 10, kimliği doğrulanmış kullanıcılara “Add workstations to domain” (`SeMachineAccountPrivilege`) yolu üzerinden en çok 10 yeni computer account oluşturma izni verir. Quota bu kullanıcı hakkındaki sayısal allowance’ı yönetir; privilege’dan bağımsız ikinci bir kontrol değildir.

Yeni account oluşturmanın alternatif yolu, hedef OU/container üzerinde açık Create Computer Objects (`ACTRL_DS_CREATE_CHILD`) iznine sahip olmaktır. Bu ACL yolu ile quota-managed kullanıcı hakkı birbirinin alternatifi; ikisi birlikte zorunlu değildir. Var olan bir computer account’u join sırasında reuse etmek ise ayrı owner/ACL koşullarına tabidir.

İncelemede önce yeni nesne mi yaratıldı, önceden yaratılmış nesne mi reuse edildi diye ayır; yeni nesne için de quota-managed user-right yolunu hedef OU/container ACL yolundan ayırt et. Quota’yı 0 yapmak varsayılan allowance’ı kapatır, ancak explicit Create Computer Objects ACL’lerini silmez.

Secure channel makine kimliğine dayanır ve parola yenilenir

Join tamamlandığında istemci Netlogon service'i, bir DC ile makine hesabı kimliğine dayalı bir secure channel kurar. Bu kanal, pass-through authentication ve makine ile domain arasındaki güvenli işlemler için kullanılır; temeli join'de belirlenen makine parolasıdır.

Makine parolası sabit değildir: 'Domain member: Maximum machine account password age' politikasıyla varsayılan olarak yaklaşık 30 günde bir domain üyesi tarafından değiştirilir. Değişikliği başlatan taraf üye makinedir; DC bunu kabul eder. Bu döngü, çalınan eski bir makine parolasının ömrünü sınırlar.

Parolanın istemci ile dizindeki değeri arasındaki uyumsuzluk (ör. eski bir snapshot'tan geri dönen makine, çevrimdışı kalıp senkronu kaçıran cihaz) secure channel'ı bozar ve makine 'domain ile güvenli oturum kuramadı' sınıfı hatalar üretir.

Durum ve veri akışı

  1. Join isteği: bir kullanıcı bağlamında dizinde computer object oluşturulur veya mevcut nesne yeniden kullanılır.
  2. Yetki kontrolü: yeni nesne için quota-managed Add workstations to domain hakkı veya hedef OU/container’daki explicit Create Computer Objects ACL’i değerlendirilir; var olan nesnenin reuse akışı ayrıdır.
  3. Yeni nesneye SID, sAMAccountName, primaryGroupId ve account flags atanır. Uygun auditing varsa creation 4741 üretebilir. Var olan nesnenin reuse edilmesi yeni SID veya yeni-account olayı anlamına gelmez.
  4. Makine parolası belirlenir; istemcide LSA secret olarak, dizinde hesapla ilişkili olarak saklanır.
  5. İstemci Netlogon, bir DC ile makine kimliğine dayalı secure channel kurar.
  6. Member OS/Netlogon parola değişimini başlatır. Client LSA secret ve DC hesap verisi güncellenir; sonraki secure-channel check uyuma dayanır. Current/previous history toleransı dışındaki uyuşmazlık başarısızlık doğurabilir.

2. Exploitation / İstismar

Broken trust assumption

Kırılan varsayım, computer account oluşturmanın yalnız yönetimsel bir işlem olduğu ve makine hesabının 'sadece bir bilgisayar' olduğu için saldırı yüzeyi taşımadığıdır. Aslında makine hesabı, düşük yetkili kullanıcıların bile üretebildiği ve sonraki abuse zincirlerine giriş olabilen bir security principal'dır.

Technical prerequisites

  • Geçerli, kimliği doğrulanmış bir domain kullanıcısı (yönetici olması gerekmez).
  • Varsayılan ms-DS-MachineAccountQuota = 10 ise authenticated user quota-managed user-right yolu üzerinden yeni computer account oluşturabilir; hedef OU/container’daki explicit Create Computer Objects ACL’i alternatif bir yoldur.
  • Sonraki etki için oluşturulan makine hesabının özniteliklerinin (ör. SPN, delegation ayarları) hedef abuse tekniğinin gerektirdiği biçimde ayarlanabilmesi ve o tekniğin diğer önkoşullarının sağlanması.

Exploitation mechanism / İstismar mekanizması

Varsayılan quota, authenticated user'a quota-managed Add workstations to domain hakkı üzerinden kontrol ettiği bir computer account yaratma imkânı verir; hedef OU/container'daki explicit Create Computer Objects ACL'i yeni account yaratmanın alternatif yoludur. Bu tek başına domain compromise değildir; ancak saldırgan-kontrollü bir machine principal, sonraki abuse zincirlerine giriş olabilir. Quota hangi varsayılan allowance'ın mevcut olduğunu belirler; ACL/delegation ve hedef servis yapılandırması ise sonraki tekniğin etkisini belirler. Makine parolası tarafında risk, uzun ömürlü veya değişmesi devre dışı bırakılmış parolaların çalınırsa daha uzun süre kullanılabilmesidir.

Düşük yetkiyle principal üretmek bir başlangıçtır

Saldırgan-kontrollü bir makine hesabı oluşturmak, yetki kazanımının kendisi değil, sonraki adımların önkoşuludur. Etki, bu principal'a hangi hakların/özniteliklerin verilebildiğine ve hedef sistemlerin yapılandırmasına bağlıdır.

Bu yüzden 'quota 10' varsayılanı bir zafiyet değil, bir risk çarpanıdır: gereksizse sınırlandırıldığında birçok abuse zincirinin giriş adımı kapanır.

Makine parolasının ömrü etki penceresidir

İşletim sistemi varsayılan yaklaşık 30 günlük policy ile makine parolasını yeniler. Bu, kullanılan secret’ın yaşını sınırlar; yüksek entropili makine parolasının brute-force dayanımıyla aynı ölçüt değildir. Windows current/previous password geçmişiyle bazı eşitleme gecikmelerini tolere edebilir. Bu yüzden tek rotasyon, çalınan eski secret’ın her yerde anında işe yaramadığını veya compromise’ın giderildiğini kanıtlamaz.

Bu dersin saldırı odağı parolanın kriptografik kullanımının detayı değil; yalnız 'kimliğin nasıl üretildiği ve ne kadar süreyle güvenildiği'dir. İleri Netlogon güvenlik konuları ayrı derslerde ele alınır.

3. Defense & Detection / Savunma ve tespit

Telemetry scope

  • Computer account yaşam döngüsü olayları yalnız domain controller'larda üretilir ve Audit Computer Account Management alt kategorisinin Success ayarını gerektirir.
  • 4741 (A computer account was created) yeni bir computer object oluşturulduğunda üretilir; Subject alanı işlemi kimin yaptığını, New Computer Account alanı hangi nesnenin oluştuğunu gösterir.
  • 4741'de SubjectUserSid ile SamAccountName birlikte okunmalıdır: 'kim' oluşturdu ve 'ne' oluştu ayrı sorulardır. Beklenmeyen Subject inceleme sinyalidir; olay tek başına quota-managed user-right yolunun mu yoksa hedef OU/container ACL yolunun mu kullanıldığını kanıtlamaz.
  • Secure channel arızası farklı bir kanıttır: istemci System log'unda NETLOGON kaynaklı 5719 gibi olaylar ('güvenli oturum kurulamadı') makine parolası/DC erişimi sorununu gösterir. 4741 ile 5719'u aynı kova saymayın.

Events and relevant fields

  • 4741 / SubjectUserSid, SubjectUserName, SubjectDomainName, SubjectLogonId: computer object'i oluşturan aktör ve oturum korelasyon anahtarı.
  • 4741 / TargetUserName, TargetSid, SamAccountName: oluşturulan computer account'un adı ('$' ile biter) ve SID'i.
  • 4741 / PrimaryGroupId: makine hesapları için tipik 515 (Domain Computers).
  • 4741 / OldUacValue, NewUacValue, UserAccountControl: NewUacValue event içindeki SAM User Account code’larını kullanır (workstation trust için örnekte 0x80); directory userAccountControl attribute’undaki WORKSTATION_TRUST_ACCOUNT ise 0x1000’dir. Alanları aynı numeric bitmask sanmayın.
  • 4741 / DnsHostName, ServicePrincipalNames: makinenin adı ve SPN'leri; anormal veya saldırgan tarafından ayarlanmış SPN'ler için inceleme noktası.
  • 4741 Version 0'dır ve olay yalnız DC'de üretilir; bu alanlar sürüm ötesi varsayımlarla değil belge şemasıyla yorumlanmalıdır.

'Kim oluşturdu' ile 'ne oluştu' ayrı sorulardır

4741'de Subject (oluşturan) ve New Computer Account (oluşan) iki ayrı kimlik bloğudur. Beklenmeyen sıradan Subject inceleme sinyalidir; ancak 4741 tek başına quota-managed user-right yolunu mu yoksa hedef OU/container'daki Create Computer Objects ACL yolunu mu kullandığını göstermez.

Bu yüzden alarm eşiği ham 4741 sayısı değil, 'beklenen provisioning kimlikleri dışındaki Subject' olmalıdır. Bu ayrım envanter (delege hesaplar, OSD servisleri) gerektirir.

Oluşturma olayı ile secure channel arızasını karıştırma

4741 dizinde bir nesnenin doğduğunu söyler. Makinenin bir DC ile güvenli oturum kurup kuramadığı ise istemci tarafındaki NETLOGON olaylarında (ör. 5719) görünür; bu genelde parola uyumsuzluğu, DC erişimi veya zaman/DNS sorunlarıyla ilgilidir.

İki kanıt kümesi farklı kök nedenlere işaret eder: biri 'yetki/oluşturma', diğeri 'kimlik/güven sürekliliği'. İncelemede hangi soruyu yanıtladığınızı netleştirin.

Detection logic · Sigma

title: Sıradan kullanıcı tarafından computer account olusturma
status: experimental
logsource:
  product: windows
  service: security
detection:
  selection:
    EventID: 4741
  filter_expected_provisioning:
    SubjectUserSid:
      - 'S-1-5-21-000-000-000-519'   # placeholder: envanterle degistir (delege provisioning/OSD hesaplari)
  condition: selection and not filter_expected_provisioning
fields:
  - SubjectUserSid
  - SubjectUserName
  - TargetUserName
  - SamAccountName
  - NewUacValue
  - ServicePrincipalNames
falsepositives:
  - Yetkili OSD/provisioning sistemleri ve delege edilmis help desk hesaplari
  - Otomatik cihaz kayit is akislari
level: medium

Query assumptions

  • 4741 yalnız DC'de ve Audit Computer Account Management / Success acikken uretilir; toplama bunu gerektirir.
  • filter_expected_provisioning listesi ortamdaki gercek delege hesaplarla doldurulmalidir; bos placeholder ile kural anlamli degildir.
  • SubjectUserSid alan adi ve degeri collector normalizasyonuna gore dogrulanmalidir.
  • Kural gercek bir SIEM veya veri kumesi uzerinde calistirilmadi.

False positives

  • Yetkili işletim sistemi dağıtımı (OSD) ve otomatik makine provisioning işlemleri.
  • Delege edilmiş yardım masası hesaplarının rutin makine kaydı.
  • Toplu yeniden dağıtım/yenileme kampanyaları sırasında beklenen 4741 artışı.

Hardening

  • Önce join/provisioning akışlarını envanterle. Quota-managed allowance gerekiyorsa bunu ayrıca değerlendir; hedef OU/container Create Computer Objects ACL’lerini bağımsız incele ve yalnız gerekli provisioning kimliklerine delege et. Quota gerekmiyorsa ms-DS-MachineAccountQuota=0 seçeneğini pilot ve rollback planıyla değerlendir.
  • 'Domain member: Maximum machine account password age' değerini makul (varsayılan ~30 gün) tut; parola değişimini gereksiz yere devre dışı bırakma — bu, çalınmış makine sırlarının ömrünü uzatır.
  • Yeni computer account'ları (özellikle beklenmeyen SubjectUserSid ile) ve anormal SPN/delegation ayarlarını izle; join sonrası nesne özniteliklerini beklenen baseline ile karşılaştır.

Örnekler üzerinde oku / Read the examples

ÖRNEĞİ BİRLİKTE OKUYALIM

EĞİTİM İÇİN HAZIRLANDI

Kim oluşturdu, hangi hesap oluştu?

4741 · computer account created (Event XML, Version 0)

01
Oluşturan aktörS-1-5-21-1533101619-2072831041-1560920683-1442

SubjectUserName=seyma; SubjectLogonId=0x5f3ac1. Bu SID oluşturan hesabındır; oluşan computer hesabının SID’si değildir.

02
Oluşan computer hesabıWS-034$

TargetSid=S-1-5-21-1533101619-2072831041-1560920683-6412; SamAccountName=WS-034$. Subject alanlarıyla ayrı oku.

03
Event içindeki account kodu0x80

Bu örnekte 0x80, event’in SAM account code mapping’inde workstation-trust hesabını gösterir. Directory userAccountControl içindeki ilgili bit 0x1000’dir; sayıları eşitleme.

04
Hesabın primary group RID’i515

515, bu computer hesabının Domain Computers primary group RID’idir; oluşturan aktörün grup üyeliği değildir.

Buradan çıkaracağın fikir

4741’de Subject aktörü ve Target computer hesabı ayrıdır. Creation kaydı, quota mı explicit ACL mi kullanıldığını, reuse yolunu veya secure-channel başarısını tek başına göstermez.

Burada bir örnek kaydı okuyoruz. Windows’a bağlanmıyoruz; olayın gerçekten yaşandığını veya saldırı olduğunu doğrulamıyoruz.

Bu örneğin kapsamı

Sentetik örnektir; gerçek Windows veya lab kaydı değildir. Alan adları ve şema Microsoft'un 4741 belgesindeki Version 0 örneğine dayanır; değerler outreason.example/OUTREASON, sentetik SID ve makine adıyla üretilmiştir. Dikkat: SubjectUserName 'seyma' domain admin değil sıradan bir kullanıcı olarak seçildi — bu, varsayılan ms-DS-MachineAccountQuota ile join senaryosunu vurgular. Parser namespace, Provider, EventID (4741), Version ve EventData alanlarını doğrulamak için kullanılmalı; olay tek başına bir kötü niyeti kanıtlamaz, yalnız bir computer object'in kim tarafından oluşturulduğunu gösterir. NewUacValue=0x80, Event 4741’in SAM account-code alanına aittir; directory userAccountControl WORKSTATION_TRUST_ACCOUNT biti 0x1000 olarak ifade edilir.

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>4741</EventID>
    <Version>0</Version>
    <Channel>Security</Channel>
    <Computer>DC01.outreason.example</Computer>
  </System>
  <EventData>
    <Data Name="TargetUserName">WS-034$</Data>
    <Data Name="TargetDomainName">OUTREASON</Data>
    <Data Name="TargetSid">S-1-5-21-1533101619-2072831041-1560920683-6412</Data>
    <Data Name="SubjectUserSid">S-1-5-21-1533101619-2072831041-1560920683-1442</Data>
    <Data Name="SubjectUserName">seyma</Data>
    <Data Name="SubjectDomainName">OUTREASON</Data>
    <Data Name="SubjectLogonId">0x5f3ac1</Data>
    <Data Name="SamAccountName">WS-034$</Data>
    <Data Name="PrimaryGroupId">515</Data>
    <Data Name="OldUacValue">0x0</Data>
    <Data Name="NewUacValue">0x80</Data>
    <Data Name="UserAccountControl">%%2087</Data>
    <Data Name="DnsHostName">ws-034.outreason.example</Data>
    <Data Name="ServicePrincipalNames">HOST/ws-034.outreason.example HOST/WS-034 RestrictedKrbHost/ws-034.outreason.example RestrictedKrbHost/WS-034</Data>
  </EventData>
</Event>

İki yanlış kanı / Two reality checks

Sanılan: Bilgisayarı domain'e yalnız yöneticiler ekleyebilir.
Gerçekte: Varsayılan ms-DS-MachineAccountQuota = 10, authenticated user için quota-managed “Add workstations to domain” yoluyla 10’a kadar yeni computer account allowance’ı sağlar. Hedef OU/container’daki explicit Create Computer Objects izni alternatif yoldur; bu nedenle quota 0, tek başına “yalnız yöneticiler account oluşturabilir” anlamına gelmez.
Sanılan: Domain'e katıldıktan sonra makine parolası, kullanıcı parolası gibi sabittir ve elle yönetilir.
Gerçekte: Makine parolası OS tarafından yönetilir; varsayılan yaklaşık 30 günlük değişimi üye makine başlatır. Client LSA secret ile DC’nin hesap verisi arasında uyum gerekir; current/previous history bazı gecikmelere tolerans sağlar. Bu bakım döngüsü, credential compromise remediation’ının tamamlandığının kanıtı değildir.

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

MachineAccountQuota 0 ise hiçbir delege rol yeni computer object oluşturamaz mı?

Bir cevap seç

Bir ipucu

Quota-managed yol ile OU üzerindeki explicit ACL farklıdır.

Cevabın gerekçesini oku

Hayır; explicit Create Computer Objects izni ayrı değerlendirilir.

Doğru. Var olan object’in reuse koşulları da yeni object creation’dan ayrıdır.

2 / 3 · KANITI OKU

Bu zarf hangi sonucu henüz göstermiyor?

Yeni sentetik pratik örneği; ders artifact’inden bağımsızdır.
EventID
4741
Computer
DC01.iyelabs.example
TargetUserName
WS01$
Client secure channel sonucu / Client secure channel outcome
not observed
Bir cevap seç

Bir ipucu

Account creation ile client’ın local secret’ını eşitleme.

Cevabın gerekçesini oku

WS01 secure channel’ının başarıyla kurulduğunu.

Doğru. Creation olayı client secret uyumunu ve channel sonucunu göstermez.

3 / 3 · KENDİN ANLAT

Yeni WS01 account’u oluşturma ile mevcut WS01 account’unu reuse etmenin neden aynı kanıt olmadığını açıkla.

Bir ipucu

Object kimliği, creation olayı, secret ve channel.

Cevabın gerekçesini oku

Yeni creation yeni computer object ve kendi kimliğini oluşturur; reuse mevcut object üzerinde ayrı yetki ve koşullarla ilerler, yeni SID veya 4741 varsayılmaz. Her iki yolda WS01 local secret’ı ile DC account verisinin uyumu ve secure channel sonucu ayrıca incelenir.

  • Reuse’ın yeni SID/creation event gerektirmediğini belirttim.
  • Secret uyumu ile channel sonucunu ayrı tuttum.

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