Beacon tespiti
- Giden bağlantılarda aralık, boyut ve sayı ölçüsüyle beacon desenini bulur, TLS zarfını ve DNS izini okur, bağlantıyı açan süreci Sysmon'la eşlersin.
- Komuta sunucusuna bağlanan zararlı, düzenli aralıklarla küçük istekler atar. Buna beacon denir.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Zararlı yazılım içeri girdikten sonra emir bekler. Emri almak için komuta sunucusuna düzenli aralıklarla bağlanır ve sorar: yeni iş var mı? Bu düzenli yoklamaya beacon denir.
Her bağlantı kısadır ve küçük veri taşır. Tek tek bakınca hiçbiri şüpheli görünmez; çoğu zaman 443 portundan, şifreli ve sıradan bir web isteği gibi akar. ATT&CK bu davranışı Komuta ve Kontrol (TA0011) taktiği altında toplar.
Web protokolü üzerinden konuşan beacon T1071.001, DNS üzerinden konuşan beacon T1071.004 tekniğine girer. Trafiği şifreliyorsa T1573 de eşlemeye eklenir. Beacon avı imza aramaz. Zamanın düzenliliğine, boyutun tekdüzeliğine ve bağlantının zarfına bakar.
Beacon'ın ritmi
Desen tek bağlantıda değil, toplamda ortaya çıkar. İnsan trafiği düzensizdir: bazen üç istek, sonra yirmi dakika sessizlik, sonra yirmi istek. Beacon ise saat gibi çalışır: altmış saniyede bir, aynı hedefe, benzer boyutta. Avcı dört ölçüye bakar.
Birincisi aralığın kararlılığıdır. İkincisi boyutun tekdüzeliğidir. Üçüncüsü bağlantı sayısıdır; aynı hedefe günde binlerce kısa bağlantı, tarayıcı davranışına benzemez.
Dördüncüsü bağlantı süresidir. Bazı araçlar kısa yoklama yerine saatlerce açık kalan tek bir bağlantı kurar; bu da ayrı bir işarettir. Aşağıdaki satırlar Altay Kargo'nun güvenlik duvarından alındı ve finans birimindeki fin-pc12 makinesinin giden bağlantılarını gösteriyor.
src=10.20.30.61 dst=203.0.113.19:443 09:00:04 bytes_out=412 bytes_in=190 src=10.20.30.61 dst=203.0.113.19:443 09:01:03 bytes_out=409 bytes_in=190 src=10.20.30.61 dst=203.0.113.19:443 09:02:07 bytes_out=415 bytes_in=190 src=10.20.30.61 dst=203.0.113.19:443 09:03:02 bytes_out=411 bytes_in=190 src=10.20.30.61 dst=203.0.113.19:443 09:04:05 bytes_out=413 bytes_in=190
Tabloyu okurken önce zaman damgalarına bak. Art arda gelen iki bağlantı arasındaki farkı çıkar, sonra bütün farkların ortalamasını al. Boyut sütunu da ipucu taşır: giden bayt sayısı birkaç bayt sapsa bile aynı aralıkta kalıyorsa, bu elle yazılmış istek değil, otomatik döngüdür.
İnsan sayfaya bu kadar düzenli tıklamaz. Kaynak ve hedef adresin sabit kalması da önemlidir; insan trafiği onlarca farklı adrese dağılır, beacon ise tek hedefe kilitlenir. Bu üç sütunu birlikte okumak, tek satıra bakmaktan çok daha güvenilir karar verdirir.
Etkinlik 1 / 7
Yukarıdaki bağlantıların ortalama aralığı kaç saniyedir?
Tahminini kaydır, sonra gönder.
Çift başına aralık: Zeek ve SIEM
Beş satırı gözle okumak kolaydır, bir günlük trafiği değil. Bu iş için ağ trafiğini özetleyen bir kayıt gerekir. Zeek, ağ trafiğini dinleyip her bağlantıyı conn.log dosyasına bir satır olarak yazan açık kaynak bir izleme aracıdır.
Her satır bir bağlantıdır. ts alanı başlangıç zamanını, id.orig_h kaynak adresi, id.resp_h hedef adresi, id.resp_p hedef portu verir. duration bağlantı süresini, orig_bytes ve resp_bytes iki yöndeki yük baytlarını yazar.
Av ilk olarak çiftleri sayar: hangi kaynak hangi hedefe kaç kez bağlandı? Sonra çok bağlantı kuran çiftlerin her biri için aralıkları ayrı ayrı hesaplar. zeek-cut aracı istediğin sütunları sekmeyle ayrılmış olarak verir.
$ zeek-cut ts id.orig_h id.resp_h id.resp_p orig_bytes resp_bytes < conn.log | grep 203.0.113.19 | head -4 1789722004.118 10.20.30.61 203.0.113.19 443 412 190 1789722063.402 10.20.30.61 203.0.113.19 443 409 190 1789722127.035 10.20.30.61 203.0.113.19 443 415 190 1789722182.771 10.20.30.61 203.0.113.19 443 411 190
Aralığı her çift için ayrı hesaplamak gerekir. Aşağıdaki kısa Python betiği zeek-cut çıktısını okur, kaynak, hedef ve port üçlüsüne göre gruplar, en az yirmi bağlantısı olan çiftlerde ardışık damgaların farkını alır. Sonra üç sayı üretir: ortalama aralık, standart sapma ve değişim katsayısı. Değişim katsayısı (CV) standart sapmanın ortalamaya bölümüdür.
Birimsizdir, bu yüzden altmış saniyelik bir beacon ile bir saatlik bir beacon'ı aynı ölçekte karşılaştırır. Değer sıfıra yaklaştıkça aralık düzenlidir. İnsan trafiğinde CV çoğu zaman 1'in üstündedir.
import sys, statistics
from collections import defaultdict
zaman = defaultdict(list)
for satir in sys.stdin:
ts, kaynak, hedef, port, giden, gelen = satir.rstrip("\n").split("\t")
zaman[(kaynak, hedef, port)].append(float(ts))
sonuc = []
for cift, t in zaman.items():
if len(t) < 20:
continue
t.sort()
fark = [b - a for a, b in zip(t, t[1:])]
ort, sd = statistics.mean(fark), statistics.pstdev(fark)
sonuc.append((sd / ort, cift, len(t), ort, sd))
for cv, (k, h, p), n, ort, sd in sorted(sonuc):
print(f"{k} -> {h}:{p} n={n} ort={ort:.1f} sd={sd:.1f} cv={cv:.2f}")
$ zeek-cut ts id.orig_h id.resp_h id.resp_p orig_bytes resp_bytes < conn.log | python3 aralik.py
10.20.30.61 -> 10.20.0.10:123 n=96 ort=900.0 sd=0.4 cv=0.00
10.20.30.61 -> 203.0.113.19:443 n=1432 ort=60.2 sd=1.9 cv=0.03
10.20.30.61 -> 198.51.100.40:443 n=214 ort=402.7 sd=731.5 cv=1.82Çıktıyı satır satır oku. İlk satır en düzenli çifttir: CV sıfır. Ama hedef iç ağdaki saat sunucusu, port 123; bu saat eşitlemesidir ve meşrudur. En düzenli satır her zaman zararlı değildir.
İkinci satır dış bir adrese günde 1432 bağlantıdır: ortalama aralık 60,2 saniye, sapma 1,9 saniye, CV 0,03. Yirmi dört saat boyunca dakikada bir, neredeyse hiç sapmadan. Bu satır incelenir.
Üçüncü satır bir tedarikçi portalıdır. Aralıklar birkaç saniyeden bir saate kadar dağılır ve CV 1,82 çıkar; bu tipik insan trafiğidir. Açık kaynak RITA aracı aynı işi büyük ölçekte yapar.
Zeek günlüklerini TSV ya da JSON biçiminde alır ve dört ana tespit sunar: beacon, uzun bağlantı, DNS tünelleme ve tehdit istihbaratı listelerine karşı eşleşme. Her çift için aralık ve boyut düzenliliğini puanlayıp birleşik bir beacon puanı verir. İlk elemede ise çoğu zaman çiftleri saymak yeter: kaynak ve hedefi birlikte alır, sayar ve çoktan aza sıralarsın.
Etkinlik 2 / 7
Güvenlik duvarı kaydından en çok bağlantı kuran kaynak ve hedef çiftlerini çoktan aza sıralayan boruyu kur.
Parçalara tıklayarak komutu soldan sağa kur.
Dağılma, pencere ve meşru periyodik trafik
Beacon üreten yazılımlar bu ölçüyü bildiği için aralığa rastgele sapma ekler. Buna dağılma (jitter) denir. Altmış saniye yerine elli ile yetmiş arasında rastgele bekler. Ortalama yine altmıştır, ama damgalar tam üst üste binmez.
Sapma ortalamanın iki yanına eşit dağıldığında ortalama yerinde kalır, yalnız CV büyür. Dağılmalı beacon da insan trafiğinden hâlâ çok daha düzenlidir. Bu yüzden eşiği tek bir sayıya bağlama. CV'nin yanında aralık histogramına da bak: beacon'ın histogramı ortalama çevresinde tek ve dar bir tepe çizer, insan trafiği ise geniş ve dağınık bir şekil verir.
index=ag sourcetype=zeek_conn src_ip=10.20.30.0/24 | sort 0 _time | streamstats current=f last(_time) as onceki by src_ip dest_ip dest_port | eval delta=_time-onceki | stats count avg(delta) as ort stdev(delta) as sd by src_ip dest_ip dest_port | eval cv=round(sd/ort, 2) | where count>50 AND cv<0.1 | sort cv
Sorguyu satır satır oku. sort 0 _time olayları eskiden yeniye dizer; 0, sonuç sayısı sınırını kaldırır. streamstats her çift için bir önceki bağlantının zamanını onceki alanına taşır, current=f o anki olayı hesaba katmaz.
eval iki damganın farkını alır. stats her çift için sayı, ortalama ve standart sapma üretir. Son iki satır en az elli bağlantısı olan ve CV'si 0,1'in altında kalan çiftleri tutar.
0,1 eşiği bir başlangıçtır. Elli ile yetmiş saniye arasında eşit dağılan bir sapma CV'yi yaklaşık 0,1'e çıkarır; daha geniş dağılma bu eşiği aşar. Eşiği kendi verindeki meşru çiftlere bakarak ayarla. KQL'de aynı mantığı sıralanmış satırlarda prev() işleviyle kurarsın.
Derinleş:Dağılma CV'yi ne kadar büyütür
Aralık a ile b arasında eşit olasılıkla seçiliyorsa standart sapma (b - a) bölü 12'nin karekökü olur. 12'nin karekökü yaklaşık 3,46'dır. Altmış saniyelik bir beacon elli ile yetmiş arasında bekliyorsa aralığın genişliği yirmi saniyedir.
Standart sapma 20 / 3,46, yani yaklaşık 5,8 saniye olur; CV 5,8 / 60 ile yaklaşık 0,1 çıkar. Aynı beacon otuz ile doksan arasında bekliyorsa genişlik altmış saniyedir. Standart sapma yaklaşık 17,3, CV yaklaşık 0,29 olur. İki durumda da insan trafiğinin 1'in üstündeki değerinden çok uzaktır.
Buradan iki sonuç çıkar. Birincisi, sabit bir 0,1 eşiği yüksek dağılmalı beacon'ı kaçırır. İkincisi, eşiği yükseltmek yerine aralık dağılımının biçimine bakmak daha sağlamdır. Eşit dağılım histogramda düz bir blok çizer, insan trafiği ise uzun kuyruklu ve dağınıktır.
Pencerenin boyu da sonucu değiştirir. Beacon aralığı her zaman kısa olmaz. Sabırlı operasyonlarda aralık saatlerle, bazen günlerle ölçülür.
Bir saatlik pencereye bakan analiz, günde dört kez bağlanan bir yazılımı hiç göremez. Bu yüzden aynı analizi hem saatlik hem haftalık pencerede çalıştır. Veri yönü ayrı bir ipucudur. Beacon aşamasında giden veri de gelen veri de küçüktür.
Sızdırma aşamasında ise giden veri aniden büyür. Aynı çiftte bu değişimi görmek, operasyonun evre atladığını söyler. İş saatleri de bir mercektir. Kullanıcı bilgisayarından gece üçte düzenli giden bağlantı, makinenin kimsenin başında olmadığı saatte konuştuğunu gösterir.
Düzenli trafiğin çoğu meşrudur. Saat eşitlemesi, yazılım güncelleme denetimi, işletim sistemi telemetrisi, uç nokta güvenlik ajanlarının bulut çağrıları ve izleme ajanları saat gibi çalışır. Bu hedefleri bir istisna tablosunda tut: hedef, port, beklenen aralık, hangi makinelerden geldiği, sahibi ve bir sonraki gözden geçirme tarihi. Tabloyu sorguda dışlama listesi olarak kullan.
Tabloyu güncel tutmayan ekip her avda aynı meşru bağlantıları yeniden inceler. Tersine, hiç gözden geçirilmeyen bir istisna da tehlikelidir. Saldırgan meşru bir bulut hizmetini komuta kanalı olarak kullanırsa, trafiği tam da o istisnanın içine saklanır.
Etkinlik 3 / 7
Giden bağlantı desenlerini 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/5 seçenek yerleşti.
Etkinlik 4 / 7
Doğru mu, yanlış mı?
Aralığa eşit dağılan rastgele sapma eklenmiş bir beacon'da aralıkların ortalaması da kayar, bu yüzden aralık analizi bu tür beacon'ı yakalayamaz.
TLS zarfı ve DNS izi
Şifreli trafikte içeriği göremezsin, ama zarfı görürsün. TLS el sıkışmasının ilk mesajı olan ClientHello açıkta akar ve sunucu adını (SNI) taşır. TLS 1.2'de sunucunun sertifikası da açıkta akar; TLS 1.3 ise sertifikayı şifreler. Zeek bu bilgileri ssl.log dosyasına yazar: sürüm, şifre takımı, sunucu adı, el sıkışmanın tamamlanıp tamamlanmadığı ve TLS 1.2'de sertifikanın konu (subject) ve düzenleyen (issuer) alanları.
Sertifikanın ayrıntıları ve geçerlilik süresi x509.log dosyasına düşer. JA4 parmak izi ise istemcinin ClientHello mesajını kısa bir dizgiye çevirir. Aynı yazılım farklı adreslere bağlansa da parmak izi çoğu zaman aynı kalır. FoxIO'nun Zeek paketi bu alanı ssl.log'a ekler.
$ zeek-cut id.resp_h server_name version subject issuer ja4 < ssl.log | sort -u 203.0.113.19 guncelleme-merkezi.example TLSv12 CN=localhost CN=localhost t12d110700_4b22cbed5bed_2dae41c691ec 198.51.100.40 portal.tedarikci.example TLSv13 - - t13d1516h2_8daaf6152771_b186095e22b6
İki satırı karşılaştır. Portal bağlantısı TLS 1.3 kullanır, bu yüzden konu ve düzenleyen alanları boştur; sertifika şifreli akmıştır. Parmak izinin başındaki t13d1516h2, modern bir tarayıcıdan beklenen türdendir: TLS 1.3, sunucu adı var, on beş şifre takımı, on altı uzantı ve HTTP/2. Beacon hedefinde ise tablo farklıdır.
İstemci yalnız TLS 1.2 önerir. Sertifikanın konu ve düzenleyen alanları aynıdır, yani sertifika kendi kendine imzalanmıştır.
Parmak izi on bir şifre takımı ve yedi uzantı gösterir, sondaki 00 da uygulama katmanı protokolü (ALPN) önerilmediğini söyler. Bunların hiçbiri tek başına zararlı demek değildir. Düzenli aralıkla birleşince soruyu kesinleştirir.
Derinleş:JA4 parmak izini okumak
JA4, FoxIO'nun geliştirdiği bir TLS istemci parmak izidir ve alt çizgiyle ayrılmış üç parçadan oluşur. İlk parça okunabilir bir özettir. İlk harf taşımayı gösterir: t, TCP üstünde TLS; q, QUIC; d, DTLS. Ardından gelen iki rakam TLS sürümüdür: 13, TLS 1.3 demektir.
Sonraki harf sunucu adının varlığını söyler: d, SNI var; i, SNI yok, yani doğrudan IP adresine bağlanılmıştır. Sonra iki basamaklı şifre takımı sayısı, iki basamaklı uzantı sayısı ve ilk ALPN değerinin ilk ve son karakteri gelir. İkinci parça, sıralanmış şifre takımı listesinin SHA-256 özetinin ilk on iki karakteridir.
Üçüncü parça, sıralanmış uzantı listesi ile imza algoritmalarının aynı biçimde kısaltılmış özetidir. İmza algoritmaları sıralanmaz, geldiği sırayla alınır. Sunucu adı ve ALPN uzantıları ilk parçada sayıldığı için bu listeye girmez.
Aile genişler: JA4S sunucu cevabını, JA4X sertifikayı, JA4H HTTP isteğini parmak izine çevirir. Sıralama sayesinde uzantıların yerini karıştıran istemci aynı izi korur.
Beacon DNS üzerinden de konuşabilir. Bu durumda HTTP isteği yoktur, sorgunun kendisi mesajdır. İz, DNS günlüğündedir: tek bir alan adının altında çok sayıda benzersiz alt alan adı, olağandışı uzun etiketler, sık TXT sorguları ve düzenli aralıkla tekrar eden sorgular.
Zeek bu sorguları dns.log dosyasına yazar. Aynı ölçüler burada da işler: kaynak ve alan adı çiftine göre grupla, aralığı ölç, benzersiz alt alan adlarını say.
Bazı zararlılar alan adını da bir algoritmayla üretir. O zaman tek alan adının altındaki alt alan adları yerine, rastgele görünen çok sayıda farklı alan adı sorgulanır ve çoğu yanıtsız kalır. Saha bölümünde iki görev bu ölçüleri tam bir günlükte çalıştırır: 'Sessiz Nabız' düzenli aralığı, 'Rastgele Görünen Adlar' ise algoritmayla üretilmiş alan adlarını ayıklatır.
Etkinlik 5 / 7
ssl.log satırında subject ve issuer alanları aynı değeri taşıyor. Bu ne gösterir?
Süreçle eşleme ve sık hatalar
Ağ görünümü sana makineyi verir, süreci vermez. Hangi program bu bağlantıyı açıyor? Cevap uç noktadadır. Sysmon'un 3 numaralı olayı ağ bağlantısını yazar ve bağlantıyı ProcessGuid alanıyla bir sürece bağlar.
Bu olay varsayılan olarak kapalıdır, yapılandırmada açılması gerekir. 22 numaralı olay ise hangi sürecin hangi alan adını sorduğunu yazar. İkisi birlikte, ağda gördüğün deseni birkaç dakikada bir dosya yoluna çevirir. Aşağıdaki çıktı fin-pc12'den alındı.
Network connection detected:
UtcTime: 2026-09-18 23:14:07.412
ProcessGuid: {4f1c2a9e-8b3d-66ea-1c04-000000002a00}
ProcessId: 6120
Image: C:\Users\Public\svc.exe
Protocol: tcp
Initiated: true
SourceIp: 10.20.30.61
DestinationIp: 203.0.113.19
DestinationPort: 443
Dns query:
UtcTime: 2026-09-18 23:14:06.980
ProcessGuid: {4f1c2a9e-8b3d-66ea-1c04-000000002a00}
QueryName: guncelleme-merkezi.example
QueryResults: ::ffff:203.0.113.19;
Image: C:\Users\Public\svc.exeÇıktıyı oku. İki olayın ProcessGuid değeri aynıdır, yani aynı süreç önce adı sormuş, yarım saniye sonra dönen adrese bağlanmıştır. İkili C:\Users\Public altında durur; yazılabilir, herkese açık bir dizin.
UtcTime alanı saati UTC olarak yazar: 23:14, Türkiye saatiyle gece 02:14 demektir. Vaka şöyle kapandı: fin-pc12 gece boyunca tek bir adrese dakikada bir bağlanıyordu. Kullanıcı o saatte evdeydi ve makine açık unutulmuştu.
Süreç kaydı, bağlantıyı açan programın birkaç gün önce indirilen sahte bir kurulum dosyasının bıraktığı svc.exe olduğunu gösterdi. Desen önce ağda görüldü, zararlı sonra uç noktada bulundu. Sonraki adım olay müdahalesidir: makineyi ağdan ayır, ikilinin özetini al, aynı ProcessGuid'in başka hangi olayları ürettiğine bak.
Etkinlik 6 / 7
Sysmon'da ağ bağlantısını ProcessGuid alanıyla bir sürece bağlayan olayın numarası: ____
Beacon avında dört hata sık görülür. Birincisi tek pencereye bakmaktır; saatlik pencere yavaş beacon'ı, günlük pencere kısa süreli bir patlamayı kaçırır. İkincisi vekil sunucu (proxy) ya da NAT arkasında kaynağı kaybetmektir.
Güvenlik duvarı bütün bağlantıları vekil sunucudan çıkıyor görür. Bu durumda analizi vekil sunucu günlüğünde yap; orada istemci adresi ve çoğu zaman kullanıcı adı durur. Üçüncüsü dağılmayı insan davranışı sanmaktır.
İnsan trafiği mesai ritmine uyar ve gece susar, dağılmalı beacon ise gece gündüz aynı ortalamayla sürer. Dördüncüsü istisna tablosunu gözden geçirmemektir.
Etkinlik 7 / 7
Bir makine 24 saat boyunca tek bir dış adrese, 300 saniyede bir, hep 200 bayt civarı istek atıyor. İlk değerlendirmen ne olur?
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.