SMB Enumeration

Server Message Block (SMB) protokolü, karmaşık yapısı ve açık doğası nedeniyle yıllardır siber güvenlik dünyasının en çok konuşulan konularından biri olmuştur. Windows 2000 ve XP dönemlerindeki kimlik doğrulamasız (unauthenticated) null session zafiyetlerinden günümüzdeki karmaşık istismar yöntemlerine kadar, SMB her zaman sızma testi uzmanları ve bug bounty avcıları için bir altın madeni olmuştur.

Elbette Microsoft da boş durmadı; Windows sürümleri geliştikçe SMB protokolü de güncellendi ve sıkılaştırıldı. Ancak, geriye dönük uyumluluk (backward compatibility) ihtiyacı ve kurumsal ağlardaki yapılandırma hataları, SMB enumeration’ı (bilgi toplama) hala sızma testlerinin en kritik aşamalarından biri yapmaya devam ediyor.

Bu makalede, hedef ağdaki SMB servislerini nasıl tespit edeceğimizi, numaralandıracağımızı ve bu verileri nasıl “Domain Admin” giden yolda bir basamak olarak kullanacağımızı inceleyeceğiz.

SMB ve NetBIOS: Farkı Anlamak

İşe temelden başlayalım. SMB denilince akla genellikle iki port gelir: TCP 139 ve TCP 445. Ancak bu ikisi teknik olarak farklı şeyleri ifade eder.

  • NetBIOS (TCP 139 ve UDP portları): Bağımsız bir oturum katmanı (session layer) protokolüdür. Yerel ağdaki bilgisayarların birbirleriyle iletişim kurmasını sağlar.
  • SMB (TCP 445): Modern SMB uygulamaları NetBIOS’a ihtiyaç duymadan doğrudan TCP 445 üzerinden çalışabilir.

Ancak, geriye dönük uyumluluk nedeniyle NetBIOS over TCP (NBT) genellikle aktif bırakılır ve bu iki servis birbirine entegre çalışır. Bu yüzden SMB enumeration yaparken bu iki servisi her zaman birlikte tararız.

Adım 1: Ağdaki SMB Hedeflerinin Keşfi

İlk adımımız, ağda hangi makinelerde 139 ve 445 numaralı portların açık olduğunu bulmaktır. Bunun için nmap kullanıyoruz:

Bash

kali@kali:~$ nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
kali@kali:~$ cat smb.txt
...
Host: 192.168.50.21 () Status: Up
Host: 192.168.50.21 () Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
...

Bu temel tarama bize açık hedefleri verecektir. Ancak sadece portların açık olması bize yetmez; makinenin rolünü de anlamamız gerekir. Bunun için nbtscan aracı biçilmiş kaftandır. nbtscan, NetBIOS isim servisini (UDP 137) sorgulayarak ağdaki cihazların NetBIOS isimlerini ve MAC adreslerini çeker.

Bash

kali@kali:~$ sudo nbtscan -r 192.168.50.0/24
Doing NBT name scan for addresses from 192.168.50.0/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
192.168.50.124   SAMBA            <server>  SAMBA            00:00:00:00:00:00
192.168.50.134   SAMBAWEB         <server>  SAMBAWEB         00:00:00:00:00:00

Neden Önemli? Bir NetBIOS ismi, o makinenin organizasyon içindeki rolü hakkında muazzam ipuçları verir. İsminde “DC”, “SQL”, “BACKUP” veya “DEV” geçen bir makine, sızma testi sırasındaki önceliklerimizi tamamen değiştirebilir.

Adım 2: Nmap Scripting Engine (NSE) ile Derinlemesine Analiz

Nmap, sadece bir port tarayıcı değil, aynı zamanda barındırdığı NSE (Nmap Scripting Engine) scriptleri ile güçlü bir zafiyet tarama ve enumeration aracıdır. Kali Linux üzerinde SMB ile ilgili scriptleri listelemek için şu komutu kullanabiliriz:

Bash

kali@kali:~$ ls -1 /usr/share/nmap/scripts/smb*

Burada smb-enum-users, smb-enum-shares, smb-vuln-* gibi çok değerli scriptler göreceksiniz. Ancak en sık başvurduğumuz scriptlerden biri smb-os-discovery‘dir.

Bu script hedef makinenin işletim sistemini, domain adını, bilgisayar adını ve sistem saatini bulmamıza yarar:

Bash

kali@kali:~$ nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152

| smb-os-discovery:
|   OS: Windows 10 Pro 22000 (Windows 10 Pro 6.3)
|   Computer name: client01
|   NetBIOS computer name: CLIENT01\x00
|   Domain name: megacorptwo.com
|   Forest name: megacorptwo.com
|_  System time: 2022-03-17T11:54:20-07:00

Not: Bu scriptin doğru çalışabilmesi için hedeflerde genellikle (artık modern Windows’larda varsayılan olarak kapalı olan) SMBv1‘in aktif olması gerekir. Kurumsal ağlarda hala bolca legacy (eski) sistem bulunduğundan, bu script hayat kurtarır. Ayrıca nmap’in OS tahmin algoritması hiçbir zaman %100 kusursuz değildir; örneğin hedef aslında Windows 11 iken, nmap bunu Windows 10 olarak raporlayabilir. Bu çıktıları her zaman diğer enumeration bulgularıyla doğrulamak gerekir.

Ayrıca NSE üzerinden elde edilen işletim sistemi bilgisi ve Active Directory domain detayları, standart Nmap OS fingerprinting (-O parametresi) işlemine göre ağda çok daha az gürültü yaratır ve normal kurumsal trafik arasına rahatça gizlenebilir.

Adım 3: Windows Ortamından “Living off the Land” Yaklaşımı ile SMB Enumeration

Sızma testlerinde her zaman Linux tabanlı araçlara sahip olmayabiliriz. Zafiyetli bir Windows makinesine sızdığımızda (veya bir istemci simülasyonu yaparken), işletim sisteminin kendi araçlarını (Living off the Land) kullanmak zorundayız.

Windows ortamında uzak paylaşımları numaralandırmanın en pratik yolu net view komutudur. Örneğin, sızdığımız bir client01 makinesinden, Domain Controller (dc01) üzerindeki paylaşımları listelemek için şunu kullanabiliriz:

DOS

C:\Users\student>net view \\dc01 /all
Shared resources at \\dc01

Share name   Type   Used as  Comment
-------------------------------------------------------------------------------
ADMIN$       Disk            Remote Admin
C$           Disk            Default share
IPC$         IPC             Remote IPC
NETLOGON     Disk            Logon server share
SYSVOL       Disk            Logon server share
The command completed successfully.

/all parametresi, sonundaki $ işareti ile gizlenmiş olan “Administrative Shares” (Yönetimsel Paylaşımlar) dahil tüm paylaşımları dökmemizi sağlar. Bu dizinlere yetkisiz erişim bulmak, çoğu zaman hedefe giden en kısa yoldur.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir