Port taraması tespiti
- Güvenlik duvarı, Zeek ve Wireshark kayıtlarında kaynak başına yarım kalan bağlantıları sayıp tarayanı bulur, iç ağdan gelen taramayı öne alırsın.
- Tarama, saldırganın hangi servisin dinlediğini öğrendiği ilk keşif adımıdır.
- Her tarama türü, üçlü el sıkışmanın farklı bir noktasında iz bırakır.
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 dış güvenlik duvarı her gün binlerce bağlantı denemesi kaydeder. Bunların çoğu internetin arka plan gürültüsüdür: araştırma projeleri ve otomatik tarayıcılar adres bloklarını sürekli yoklar. Bir sabah aynı örüntü iç ağdaki bir muhasebe bilgisayarından gelir ve tablo değişir.
Port taraması kendi başına zarar vermez, ama saldırganın sonraki adımını seçtiği haritadır. Bu derste taramanın el sıkışmada nerede durduğunu ve hangi kayıtta ne iz bıraktığını görürsün. Tarayanı sayılarla bulur, eşik kuralını yazar, yetkili tarayıcıyı ayırır ve içeriden gelen taramayı önceliklendirirsin.
Tarama el sıkışmada nerede durur
İki bilgisayar arasında bir TCP bağlantısı kurulmadan önce üçlü el sıkışma çalışır. İstemci SYN paketi gönderir, sunucu SYN-ACK ile yanıtlar, istemci son olarak ACK gönderir ve bağlantı bu üç adımdan sonra açılır. Uygulama trafiği yalnız bu üçü tamamlandıktan sonra akar. Port taraması, saldırganın bir sunucuda hangi portun açık, hangisinin kapalı olduğunu öğrenmek için attığı ilk adımdır.
Amaç veri çalmak değildir, yalnız hangi servisin dinlediğini haritalamaktır. MITRE ATT&CK bunu ayrı bir keşif tekniği olarak sayar, çünkü saldırgan bu bilgiyle sonraki hedefini seçer. Açık bir port her zaman açık kapı anlamına gelmez, ama saldırganın haritasında ilk işaretlenen noktadır.
Tam bağlantı taraması üç adımı da tamamlar, sonra bağlantıyı hemen kapatır. Bu iz uygulama loglarına düşer, çünkü sunucu bağlantıyı tam kabul etmiştir. Yarı açık tarama ise SYN gönderir, SYN-ACK'yi alır ama son ACK'yi hiç göndermez.
Bağlantı ikinci durakta asılı kalır ve uygulama seviyesinde neredeyse hiç iz bırakmaz. Yalnız güvenlik duvarının ya da işletim sisteminin yarım kalan bağlantı kaydında görünür. Bu yüzden yarı açık tarama daha sessiz sayılır, tam bağlantı taraması ise daha kolay yakalanır.
Taramanın sorduğu soru basittir: bu portta biri dinliyor mu? Cevap üç biçimde gelir. Açık port SYN'e SYN-ACK ile yanıt verir. Kapalı port RST ile yanıt verir; dinleyen bir servis yoktur ama sunucu oradadır.
Süzülmüş port hiç yanıt vermez ya da araya giren güvenlik duvarı bir ICMP ulaşılamaz mesajı döner. Tarayıcı açık portta SYN-ACK'yi aldığı anda bilgiyi elde eder ve bağlantıyı RST ile keser. Tespit açısından önemli olan, üç durumda da kaynağın yarım bir deneme bırakmasıdır. Tek deneme sıradandır; aynı kaynaktan yüzlerce yarım deneme ise bir haritalama işidir.
Etkinlik 1 / 5
Yarı açık (SYN) taramada saldırgan son adımı hiç göndermez. Bağlantı hangi durakta asılı kalır?
Diyagramda doğru kutuyu tıkla.
Sayı ve zaman örüntüsü
Tespit tek bir pakete değil, sayı ve zaman örüntüsüne bakar. En güvenilir ölçü kaynak başına benzersiz hedef port sayısıdır. Sıradan bir istemci gün boyu birkaç porta bağlanır: 443, 80, belki 53. Bir tarama ise dakikalar içinde yüzlerce farklı porta dokunur ve bunların çoğu tamamlanmaz.
Port sırasına güvenme. Nmap tarayacağı portların sırasını varsayılan olarak rastgele seçer, yalnız sık kullanılan bazı portları öne alır. Sıralı ilerleyen bir deneme dizisi yine taramadır, ama sırasız olan da aynı ölçüde taramadır. Eşiği kendi ağının taban trafiğine göre kurarsın; çok düşük bir eşik, bir yazılım güncelleyicisinin normal denemelerini bile alarma çevirir.
Taramanın biçimi de iz bırakır. Dikey tarama tek bir hedefte çok sayıda portu yoklar; amaç belirli bir sunucuda hangi servislerin açık olduğunu öğrenmektir. Yatay tarama tek bir portu çok sayıda hedefte yoklar; örneğin bütün alt ağda 445 ya da 3389 numaralı portu arar.
Yatay taramada kaynak başına benzersiz port sayısı düşük kalır, bu yüzden ikinci bir ölçü gerekir: kaynak başına benzersiz hedef IP sayısı. Kaynağın yeri önceliği belirler. İnternetten gelen tarama günlük arka plan gürültüsüdür. İç ağdaki bir istemciden gelen tarama ise ele geçirilmiş bir makinenin yanal hareket hazırlığı olabilir.
Etkinlik 2 / 5
Bir güvenlik duvarı, tek bir kaynak IP'den üç saniye içinde elli farklı porta SYN paketi gönderildiğini ve hiçbirinin ACK ile tamamlanmadığını görüyor. Bu örüntü en çok neyi işaret eder?
Kayıtta tarayanı bulmak
Zeek her bağlantı için conn.log'a bir satır yazar ve sonucunu conn_state alanında özetler. Tarama için üç değer önemlidir. S0, bağlantı denemesinin görüldüğünü ama hiç yanıt gelmediğini söyler; süzülmüş portların izidir. REJ, denemenin reddedildiğini, yani sunucunun RST döndüğünü söyler; kapalı portların izidir.
Açık bir porta yapılan yarı açık deneme ise history alanında ShR olarak görünür. Büyük S kaynaktan SYN, küçük h hedeften SYN-ACK, büyük R kaynaktan RST demektir. Bu harfler, tarayıcının el sıkışmayı nerede kestiğini tek bakışta gösterir.
$ zeek-cut id.orig_h id.resp_h id.resp_p conn_state < conn.log \
| awk '$4=="S0" || $4=="REJ" {print $1, $3}' \
| sort -u | awk '{print $1}' | uniq -c | sort -rn | head -5
980 192.0.2.44
41 10.20.4.17
6 10.20.0.9
3 10.20.1.33
2 10.20.5.80Hattı soldan sağa oku. zeek-cut dört sütun alır: kaynak IP, hedef IP, hedef port ve bağlantı durumu. İlk awk yalnız S0 ve REJ satırlarını tutar, kaynak ile portu yazar. sort -u aynı kaynak-port çiftini bir kez bırakır; aynı porta yüz kez bağlanan istemci bir sayılır.
İkinci awk yalnız kaynağı alır, uniq -c her kaynağın kaç benzersiz porta takıldığını sayar. 192.0.2.44 dışarıdan gelir ve 980 porta dokunmuştur. Nmap varsayılan olarak en sık kullanılan 1000 portu tarar; kalanlar açık olabilir ve ShR satırlarında durur.
Asıl dikkat 10.20.4.17'dedir: iç ağdan 41 porta yarım deneme. Hedefleri saymak için print $1, $3 yerine print $1, $2 yazarsın; yatay tarama böyle görünür.
Her ortamda Zeek olmaz. Güvenlik duvarı kaydında da her satır kaynak IP'yi, hedef portu ve bağlantı durumunu taşır.
Durumu yarım kalan satırları süzen bir düzenli ifade, elle taramaktan çok daha hızlı çalışır ve büyük bir günlük dosyasında saniyeler içinde şüpheli satırları çıkarır. Aynı ifadeyi bir sonraki gün de kullanabilir, yalnız kaynak IP'yi değiştirerek farklı bir taramayı ararsın. Süzülen satırları kaynağa göre sayarsan Zeek hattındaki sonucun aynısına ulaşırsın.
Etkinlik 3 / 5
Aşağıdaki güvenlik duvarı kayıtlarında yalnız 'durum=YARIM' ile biten, tamamlanmamış SYN denemelerini yakalayan bir düzenli ifade yaz.
Yazdıkça eşleşen satırlar işaretlenir. Hedef: yalnız doğru satırlar eşleşsin.
Tam bağlantı, UDP ve keşif taramaları
Tam bağlantı taraması farklı bir iz bırakır. Bağlantı gerçekten kurulduğu için uygulama seviyesinde görünür, ama hemen ardından kapanır ve hiç veri taşımaz.
Sıradan bir istemci bağlandıktan hemen sonra bir istek gönderir; tarama aracı bağlanır, kapatır ve sıradaki porta geçer. Bu fark, uygulama loglarını okurken taramayı gerçek bir kullanıcıdan ayırmanı sağlayan asıl ipucudur. Bağlantı sayısı azsa bu farkı elle de görürsün, ama günde binlerce satır varsa otomatik bir kural gerekir.
UDP taramasının izi farklıdır, çünkü UDP'de el sıkışma yoktur. Tarayıcı küçük bir UDP paketi gönderir. Kapalı port çoğu zaman ICMP Tip 3 Kod 3, yani port ulaşılamaz mesajıyla yanıt verir. Tek bir hedeften aynı kaynağa giden yüzlerce port ulaşılamaz mesajı, UDP taramasının en belirgin izidir.
İşletim sistemleri bu mesajların gönderim hızını sınırladığı için UDP taraması yavaş ilerler. Taramadan önce çoğu zaman canlı makine keşfi gelir. Yerel segmentte bu, tek kaynaktan ardışık adreslere giden ARP istekleri olarak görünür. Yönlendirilen ağlarda ise bir ICMP echo isteği dalgası olarak görünür.
# Yarı açık tarama: yalnız SYN taşıyan paketler tcp.flags.syn == 1 && tcp.flags.ack == 0 # Tarayıcının SYN-ACK'ye RST ile dönmesi ip.src == 192.0.2.44 && tcp.flags.reset == 1 # UDP taramasına kapalı portların cevabı icmp.type == 3 && icmp.code == 3 # Yerel segmentte ARP ile canlı makine keşfi arp.opcode == 1 && arp.src.proto_ipv4 == 10.20.4.17
İlk filtre el sıkışmanın yalnız ilk adımını gösterir. Bunu Statistics menüsündeki Conversations penceresiyle birleştirirsen, tek kaynağın yüzlerce hedef portla birkaç paketlik kısa konuşmalar yaptığını görürsün. İkinci filtre yarı açık taramanın imzasını tamamlar: hedef SYN-ACK döner, kaynak ACK yerine RST gönderir.
Üçüncü filtre port ulaşılamaz mesajlarını, dördüncüsü aynı kaynaktan çıkan ARP isteklerini süzer. Hedef adresler 10.20.4.1, 10.20.4.2, 10.20.4.3 diye art arda ilerliyorsa bir makine segmentteki canlı cihazları sayıyordur. Normal bir istemci yalnız konuştuğu birkaç cihazın adresini sorar.
Etkinlik 4 / 5
Doğru mu, yanlış mı?
Tam bağlantı (full connect) taraması el sıkışmanın son ACK adımını da gönderdiği için bağlantı uygulama seviyesinde görünür.
Eşik kuralı ve öncelik
Bu örüntüyü her saat elle aramazsın, bir kurala bağlarsın. Suricata gibi bir saldırı tespit sistemi eşik mantığını kuralın içinde taşır.
detection_filter anahtar kelimesi, aynı izleme anahtarı için belli bir sürede belli sayıda eşleşme olunca alarm üretir. Hazır kurallardan da yararlanırsın; Emerging Threats Open kural setinin SCAN kategorisi yaygın tarama araçlarının bilinen imzalarını içerir. Kendi kuralını yazarken amaç aracın imzasını değil davranışı yakalamaktır: tek kaynaktan, kısa sürede, çok sayıda yalnız SYN taşıyan paket.
alert tcp any any -> $HOME_NET any (msg:"Olası tarama: 60 sn içinde 100'den fazla SYN"; \ flags:S; flow:stateless; \ detection_filter: track by_src, count 100, seconds 60; \ classtype:attempted-recon; sid:1000101; rev:1;)
Kuralı parça parça oku. alert tcp any any -> $HOME_NET any, herhangi bir kaynaktan iç ağa giden TCP trafiğine bakar. flags:S yalnız SYN biti kalkık paketleri seçer; ACK taşıyan normal trafik dışarıda kalır. flow:stateless, bağlantı durumuna bakmadan her paketi değerlendirir.
detection_filter satırı asıl eşiktir: track by_src sayacı kaynak IP başına tutar, count 100 ve seconds 60 ise altmış saniyede yüzü aşan eşleşmeden sonra alarm verir. Bu kural paket sayar, benzersiz port saymaz. Suricata'nın güncel belgeleri farklı portları sayan unique_on seçeneğini de anlatır; kullanmadan önce kurulu sürümün belgesine bak.
MITRE ATT&CK iki taramayı ayrı yerlere koyar. Dışarıdan adres bloklarını yoklamak T1595 (Active Scanning) koduyla keşif aşamasındadır. Bu taramalar kurumun denetimi dışında gerçekleşir; çoğunu engelleyemez, kayıt altına alırsın.
İç ağdan servis aramak ise T1046 (Network Service Discovery) koduyla, saldırganın içeri girdikten sonraki keşfidir. Bu ayrım alarmın önemini belirler. Kendi ağını tarayan ekibin de bir çerçevesi olmalıdır.
NIST SP 800-115, yetkili güvenlik testinin planını, kapsamını ve kaydını anlatır. Yazılı izin, zaman penceresi ve tarayıcı adresi önceden bilinirse gerçek tarama yetkili testten hemen ayrılır.
Derinleş:Yavaş ve dağıtık taramayı yakalamak
Sabırlı bir tarayıcı saatte birkaç port dener ve kısa pencereli eşikleri hiç aşmaz. Bu durumda pencereyi büyütürsün. Günlük ya da haftalık özet tablolarında kaynak başına benzersiz port ve benzersiz hedef sayısı tutulur. conn.log ya da güvenlik duvarı kayıtları SIEM'e akıyorsa, yedi günlük bir sorgu aynı kaynağın her gün birkaç yeni porta yarım deneme bıraktığını gösterir.
İkinci zorluk dağıtık taramadır. İş birden çok kaynak adrese bölünürse kaynak başına sayı düşük kalır. O zaman ölçüyü ters çevirirsin: hedef başına benzersiz kaynak sayısına ve aynı ağ bloğundan gelen adreslerin toplamına bakarsın. Bu sorgular pahalıdır; gerçek zamanlı kural yerine gece çalışan bir toplu iş olarak kurulur ve sonucu ertesi sabah triyaja düşer.
Etkinlik 5 / 5
Her örüntüyü tarama izi ya da normal trafik olarak ayır.
Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.
0/4 seçenek yerleşti.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.