İçeriğe atla
0 XP 0
12 dkderinleşmeyle 13 dk50 XP6 etkinlik

Ağ davranışını gözlemek

Bu derste
  • Örnek ağda kime bağlanıyor, ne gönderiyor ve ne sıklıkla soruyor, bunları tshark ile çıkarır ve bulguları engelleme kuralına çevirirsin.
  • Wireshark ile tshark trafiği kaydeder, taklit servis karşılığını üretir.
  • Bu derste alan adı sorgusundan kalp atışı desenine kadar izleri okumayı öğrenirsin.

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 örneği laboratuvarda çalışırken sessiz kalmadı. Önce bir ad sordu, sonra bir sunucuya bağlandı, sonra her dakika aynı uca küçük bir paket yolladı. Ağ tarafı çoğu zaman en değerli bulguları verir.

Komuta adresi, kullanılan protokol ve veri sızdırma denemesi burada görünür. Üstelik bu bulgular doğrudan engelleme kuralına çevrilir: bir alan adını DNS'te, bir adresi güvenlik duvarında, bir istek desenini vekil sunucuda durdurursun. Bu derste kaydı doğru yerde alır, süzgeç diliyle daraltır, sonra DNS sorgularını, istekleri ve zamanlamayı okursun. Son olarak şifreli trafikte bile işe yarayan üstveriyi toplarsın.

Kaydı doğru yerde al, süzgeçle daralt

Trafiği örneğin çalıştığı makinede değil, yanındaki Linux makinesinde kaydedersin. Bu makine iç ağın ağ geçidi ve taklit DNS sunucusudur, yani örneğin her paketi ondan geçer. Kayıt aracı analiz makinesinde durmadığı için örnek onu süreç listesinde göremez.

Kaydı örnek çalışmadan önce başlatırsın, çünkü ilk DNS sorgusu çoğu zaman ilk saniyede gider. tcpdump kaydı bir pcap dosyasına yazar, Wireshark ve onun komut satırı eşi tshark bu dosyayı okur. Çıplak IP'ye giden trafiği de karşılamak istersen ağ geçidinde bütün çıkışı taklit servise çeviren bir yönlendirme kuralı kurarsın.

analist@remnux:~$ sudo tcpdump -i eth1 -w kayit.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C1842 packets captured
1842 packets received by filter
0 packets dropped by kernel

analist@remnux:~$ tshark -r kayit.pcap -Y 'ip.src==10.0.0.20 && tcp.flags.syn==1 && tcp.flags.ack==0' -T fields -e ip.dst -e tcp.dstport | sort | uniq -c
      2 10.0.0.1      443
      3 10.0.0.1      80
      4 203.0.113.44  80
Önce kaydı al, sonra analiz makinesinin kime bağlandığını say.

Kaydı oku. tcpdump eth1 arayüzünü, yani iç ağa bakan kartı dinler ve paketleri kayit.pcap dosyasına yazar. Durdurduğunda kaç paket yakaladığını ve kaçını kaçırdığını söyler. Kaçırılan paket sayısı sıfır değilse kaydın eksik olduğunu bilirsin.

İkinci komut kayıttan yalnız analiz makinesinin, yani 10.0.0.20'nin başlattığı bağlantıları seçer. Bunlar ACK taşımayan ilk SYN paketleridir. Hedef adres ve bağlantı noktası basılır, sort ile uniq -c aynı hedefleri sayar. Sonuç iki hedef adres gösterir: 80 ve 443 numaralı bağlantı noktalarından ulaşılan taklit sunucu 10.0.0.1 ve hiç DNS sorgusu yapılmadan doğrudan bağlanılan 203.0.113.44.

Wireshark ve tshark aynı görüntüleme süzgeci dilini konuşur. Tek koşul kaba bir kesit verir. İki koşulu && ile, yani VE ile birleştirmek kesiti daraltır.

İstek türünü belirli bir hedef adresle birlikte yazarsan yalnız o adrese giden o türden istekler kalır. Bu daraltma veri sızdırma şüphesinde işe yarar, çünkü binlerce paket arasından tek bir sohbeti çekip çıkarırsın. Sık yapılan hata iki dili karıştırmaktır.

tcpdump'ın kayıt süzgeci host 10.0.0.20 and port 80 biçimindedir. Görüntüleme süzgeci ise ip.addr==10.0.0.20 && tcp.port==80 diye yazılır. Birinin sözdizimini ötekine yazarsan araç hata verir.

Etkinlik 1 / 6

Wireshark süzgeci ne gösterir?

Önce kodu oku, sonra çıktıyı seç.

http.request.method == "POST" && ip.dst == 203.0.113.44

Kime soruyor: DNS sorguları

İlk bakılacak yer alan adı sorgularıdır. Örnek hangi adı çözmeye çalışıyor? Tek bir sabit ad varsa iş kolaydır: o ad bir gösterge olur ve engelleme listesine girer. Art arda rastgele görünen adlar varsa alan adı üretim algoritması, kısaca DGA işliyor olabilir.

DGA tarih gibi bir tohumdan her gün çok sayıda aday ad üretir. Saldırgan bunlardan yalnız birkaçını kaydeder, savunma ise hepsini hesaba katmak zorunda kalır. Sabit adresi engellemek tek kural yazmaktır. DGA'yı durdurmak ise algoritmayı çözüp gelecekteki adları önceden hesaplamayı ister.

$ tshark -r kayit.pcap -Y 'dns.flags.response==0' -T fields -e frame.time_relative -e dns.qry.name
0.412000000     guncelleme-servis.example
2.287000000     guncelleme-servis.example
95.004000000    kdjfh3kd.example
95.118000000    kdjfh3ke.example
95.231000000    kdjfh3kf.example
239.871000000   cdn-guncelleme.example
Önce sabit ad, bir buçuk dakika sonra yedek adlar, en sonda yeni bir ad.

Çıktıyı oku. Süzgeç yalnız sorguları bırakır, yanıtları atar. İlk sütun kaydın başından bu yana geçen saniyedir, ikincisi sorulan addır.

Örnek ilk saniyede guncelleme-servis.example adını sorar ve iki saniye sonra yeniden sorar. Ardından bir buçuk dakika susar ve birbirine çok benzeyen adları art arda sormaya başlar. Bu geçiş bir ipucudur.

Taklit DNS her ada yanıt verdiği için örnek adresi buldu, ama taklit sunucunun döndüğü yanıt beklediği biçimde değildi. Örnek birincil sunucuyu ölü sayıp yedek ad listesine geçti. Bu yedek liste tek bir koşudan bile toplanır ve engelleme listesini baştan genişletir.

Dördüncü dakikada bir ad daha belirir: cdn-guncelleme.example. Bu adı şifreli trafik bölümünde yeniden görürsün.

Laboratuvarın burada bir kör noktası vardır. Gerçek ağda DGA'nın en belirgin izi çok sayıda başarısız sorgudur, yani NXDOMAIN yanıtıdır, çünkü üretilen adların neredeyse hiçbiri kayıtlı değildir. Taklit DNS her ada yanıt verdiği için bu desen laboratuvarda görünmez. DNS kayıtlarını izleyen savunma ekibi ise tam bu deseni arar.

Alan adı sorguları ayrıca veri taşıyabilir. Uzun ve rastgele görünen alt alan adları kodlanmış veri parçaları olabilir. Sık TXT sorguları da aynı şüpheyi doğurur. Bu yöntem çıkış trafiği kısıtlı ağlarda sık kullanılır ve sorgu kayıtlarında açıkça görünür.

Etkinlik 2 / 6

Kaydedilmiş trafik dosyasındaki DNS sorgularını tshark ile listele.

ogrenci@lab

Ne gönderiyor: istekler ve kodlanmış veri

İkinci bakılacak yer isteklerin kendisidir. HTTP açıksa yol, üstbilgiler ve gövde okunur. tshark ile bir TCP oturumunu baştan sona metin olarak izleyebilirsin. Bir isteği okurken üç soru sorarsın.

Hedef bir alan adı mı, çıplak bir IP mi? Tarayıcı kimliği dizesi gerçek bir tarayıcıya benziyor mu? Gövde ya da çerez düz metin mi, kodlanmış mı? Sabit ve tuhaf bir tarayıcı kimliği dizesi ailenin parmak izi olur ve vekil sunucu kuralına girer.

$ tshark -r kayit.pcap -q -z follow,tcp,ascii,4
Follow: tcp,ascii
Filter: tcp.stream eq 4
Node 0: 10.0.0.20:49713
Node 1: 203.0.113.44:80
746
POST /api/ping HTTP/1.1
Host: 203.0.113.44
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Content-Type: application/octet-stream
Cookie: sid=aG9zdD1BTkFMSVotUEN8dXNlcj1hbGl8aXA9MTAuMC4wLjIw
Content-Length: 512
Çıktı kısaltıldı. 4 numaralı TCP oturumunun ilk isteği.

İsteği satır satır oku. Node satırları oturumun iki ucunu, altındaki 746 ise istemcinin bu parçada yolladığı bayt sayısını verir. Yöntem POST, yol /api/ping.

Host satırında alan adı değil çıplak IP durur ve meşru yazılımlar bunu nadiren yapar. Tarayıcı kimliği yirmi yıldan eski bir tarayıcıyı ve işletim sistemini anlatıyor, laboratuvar makinesi ise güncel bir Windows. Bu uyumsuzluk sabit bir dizeyi, yani ailenin parmak izini gösterir.

Gövde türü ham ikili veridir. Çerezdeki sid değeri ise Base64 görünümündedir: yalnız harf ve rakamdan oluşur, uzunluğu dördün katıdır. Sıradaki adım bu değeri çözmektir.

Veri çoğu zaman kodlanmış gider. Base64 bir şifreleme değildir. İkili veriyi metin olarak taşımanın bir yoludur ve anahtarsız çözülür.

Çözülen içerikte çoğu zaman makine adı, kullanıcı adı ve yerel adres çıkar. Buna kurban tanıtma paketi denir: ajan ilk temasta sunucuya kim olduğunu bildirir.

Bazı aileler Base64'ün üstüne basit bir XOR ya da gerçek şifreleme ekler. O durumda çözülmüş çıktı da anlamsız görünür. Anahtarı hata ayıklayıcıyla çözme yordamında ararsın.

Etkinlik 3 / 6

Çerezdeki sid değerini çöz. Örnek sunucuya hangi bilgileri bildiriyor?

Araçları sırayla dene. Yanlış araç bozuk çıktı verir.

aG9zdD1BTkFMSVotUEN8dXNlcj1hbGl8aXA9MTAuMC4wLjIw

Ne sıklıkla: kalp atışı ve zamanlama

Üçüncü desen zamanlamadır. Ajan sunucuya düzenli aralıkla sorar: yeni komut var mı? Bu tekrara kalp atışı denir. Aralık yapılandırmada yazılıdır; hata ayıklayıcıyla bellekten okuduğun sleep=60 değeri tam olarak budur.

Saldırganlar deseni gizlemek için aralığa rastgelelik ekler ve buna sapma payı denir. Yüzde on sapma, altmış saniyelik aralığı 54 ile 66 saniye arasında oynatır. Yine de desen istatistiksel olarak görünür kalır. Yüzlerce bağlantının aralığı aynı ortalama çevresinde toplanır, boyutları da birbirine çok yakındır.

$ tshark -r kayit.pcap -Y 'ip.dst==203.0.113.44 && http.request.method=="POST"' -T fields -e frame.time_relative -e frame.time_delta_displayed -e http.content_length
2.311000000                      512
62.297000000     59.986000000    516
121.904000000    59.607000000    512
182.950000000    61.046000000    520
Aralık ve boyut aynı kalıbı tekrar eder.

Komutu oku. Süzgeç yalnız 203.0.113.44 adresine giden POST isteklerini bırakır. İlk alan kaydın başından bu yana geçen süredir.

İkinci alan bir önceki görüntülenen paketten bu yana geçen süredir. Süzgeç uygulandığı için bu değer doğrudan iki istek arasındaki aralığı verir; ilk istekte önceki paket olmadığından boş kalır.

Üçüncü alan gövde boyudur. Aralıklar 59,6 ile 61,0 saniye arasında, boyutlar 512 ile 520 bayt arasında. İnsan eliyle gezinen bir tarayıcı böyle bir düzen üretmez. Bu sayılar tespit kuralının eşiklerini de belirler: aynı hedefe, dakikada bir, küçük ve neredeyse eşit boyutlu istekler.

Etkinlik 4 / 6

Ağ günlüğünde komuta kanalına işaret eden satırları işaretle.

Şüpheli satırlara tıkla. Birden fazla olabilir.

Şifreli trafik ve savunmaya aktarım

Trafik şifreliyse içerik kapalı kalır, yine de üstveri konuşur. Hedef adres, paket boyutları ve zamanlama her durumda elinde kalır. TLS el sıkışmasının ilk mesajı olan ClientHello, bağlanılan sunucunun adını SNI uzantısında açık taşır. TLS 1.2'de sunucu sertifikası da açıkta akar, TLS 1.3 ise sertifikayı şifreler.

Yaygınlaşmaya başlayan Encrypted Client Hello, kısaca ECH, sunucu adını da gizler ve RFC 9849 ile standartlaştı. ECH kullanan trafikte elinde adres, boyut ve zamanlama kalır. Bu yüzden zamanlama ve boyut desenine dayanan kurallar şifrelemeden etkilenmez.

ClientHelloanahtar payıServerHelloanahtar payıSertifikazincir + imzaFinishediki tarafŞifreli verioturum anahtarı
ClientHello şifrelemeden önce gider. Sunucu adı ve istemcinin seçenekleri bu mesajda okunur.
$ tshark -r kayit.pcap -Y 'tls.handshake.type==1' -T fields -e frame.time_relative -e ip.dst -e tls.handshake.extensions_server_name
240.118000000    10.0.0.1    cdn-guncelleme.example
300.402000000    10.0.0.1    cdn-guncelleme.example
Her satır bir TLS bağlantısının başlangıcıdır.

Komutu oku. tls.handshake.type==1 yalnız ClientHello mesajlarını seçer. Her satır bir TLS bağlantısının başlangıcıdır: kaçıncı saniyede, hangi adrese, hangi sunucu adıyla.

İçerik şifreli olsa da örneğin cdn-guncelleme.example adıyla altmış saniyede bir HTTPS bağlantısı açtığını görürsün. Bu ad, hata ayıklayıcıyla bellekten okuduğun yapılandırmadaki addır ve iki bulgu birbirini doğrular. Bir adım ötede, ClientHello'daki şifre takımlarının ve uzantıların listesi istemci yazılımının parmak izini verir. Aynı aile hangi adrese bağlanırsa bağlansın çoğu zaman aynı parmak izini taşır.

Etkinlik 5 / 6

Şifreli TLS trafiğinde içeriği okuyamazken hangi bilgi yine de değerlidir?

Topladığın ağ bulgularını gösterge listesine yazarsın: alan adları, adresler, yol, tarayıcı kimliği dizesi, sunucu adı ve aralık değeri. Bu kalemler savunma ekibine doğrudan arama ölçütü verir. DNS çözücü kayıtlarında adı, güvenlik duvarında adresi, vekil sunucu kayıtlarında yolu ve tarayıcı kimliğini ararlar. Göstergeleri hızla paylaşırsın, çünkü ağ bulguları en çabuk eskiyen bulgulardır.

Bir adres birkaç gün sonra kapanır, alan adı el değiştirir. Davranışa dayanan kurallar ise daha uzun yaşar. Dakikada bir, aynı uca giden eşit boyutlu istek deseni adres değişse de yakalanır.

Taklit servis burada da işe yarar. Sahte sunucu bağlantıyı kabul eder ve örneğe yanıt döner. Bazı aileler yanıt alamazsa hiç ilerlemez; sahte yanıt zinciri açar ve sonraki aşamayı görmeni mümkün kılar.

Statik analizden örneğin sunucudan hangi biçimde komut beklediğini biliyorsan, INetSim'in sahte yanıtlarını o biçime uyacak şekilde düzenlersin. Böylece gerçek sunucuya hiç dokunmadan komut işleme kodunu da çalışırken izlersin ve örneğin hangi komutları tanıdığını öğrenirsin.

Derinleş:Acı piramidi: hangi gösterge ne kadar yaşar

Güvenlik araştırmacısı David Bianco 2013'te göstergeleri, engellendiklerinde saldırgana verdikleri zahmete göre bir piramide dizdi. En altta özet değerleri durur. Saldırgan tek baytı değiştirip yeni bir özet üretir ve engellediğin değer anında eskir.

Bir üst basamakta IP adresleri, sonra alan adları gelir. Onları değiştirmek biraz uğraştırır ama ucuzdur. Ortada ağ ve sistem izleri durur: tarayıcı kimliği dizesi, istek yolu, mutex adı. Bunları değiştirmek saldırganı uğraştırır, çoğu zaman aracını yeniden yapılandırmasını gerektirir.

Üst basamaklarda araçlar, en tepede ise taktik, teknik ve prosedürler yer alır. Dakikada bir küçük istek atan kalp atışı davranışını yakalayan kural, saldırganı çalışma biçimini değiştirmeye zorlar. Piramit bir öncelik sırası verir. Özet ve adresi hızla paylaşırsın, kalıcı savunmayı ise üst basamaklara yatırırsın.

Derinleş:JA3 ve JA4: istemcinin TLS parmak izi

ClientHello mesajı şifrelenmeden önce gider ve istemcinin desteklediği TLS sürümünü, şifre takımlarını, uzantıları ve imza algoritmalarını sıralar. Bu liste istemci yazılımına özgüdür. 2017'de yayımlanan JA3 listeyi tek bir özet değerine indirdi ve aynı aileyi farklı adreslerde tanımayı kolaylaştırdı. 2023'te Chromium tabanlı tarayıcılar uzantı sırasını her bağlantıda karıştırmaya başlayınca aynı tarayıcı farklı JA3 değerleri üretti.

JA4 bu sorunu uzantıları sıralayarak çözer ve okunabilir bir biçim kullanır; değerin başı TLS sürümünü, sunucu adı olup olmadığını ve takım sayısını açıkça yazar. Yine de parmak izi tek başına karar vermez. Aynı kütüphaneyi kullanan meşru bir program aynı değeri üretebilir. Parmak izini hedef, zamanlama ve boyutla birlikte değerlendirirsin.

Etkinlik 6 / 6

Doğru mu, yanlış mı?

Analiz sırasında örneğin gerçek komuta sunucusuna bağlanmasına izin vermek risksizdir.

Bu derste bir hata mı gördün? Bildir