Blog

TCP Flag Değerleri (Decimal Values)

TCP Flaglarının İncelenmesi

Merhaba !

IP, TCP, UDP ve ICMP olmak üzere dört temel ağ protokolü bulunmaktadır. Normal durumlarda bir protokol başlığının öğelerini sıfırıncı indisten saymaya başlamaktayız. Tcp paketlerinde başlık bilgisinin baştan (sıfırıncı indisten) itibaren 13. bayt offsetinde TCP flag değerleri yer almaktadır. Bunlar FIN, SYN, RST, PSH, ACK, URG bayrakları olarak adlanrılmaktadır. Tcp paketlerini incelediğimiz zaman bu bayrakları birbirlerinden ayırt etmek için yada kombin olarak pakette yer alan bayrakların hangi bayraklar olduğunu tespit edebilmek için her bir bayrak türüne kendisine özel bir bayrak değeri atanmaktadır. Bu değerler standart olarak sabit tutulmaktadır. Değişken değerler burada söz konusu değildir.

(Şekil 1: TCP Flag Değer Karşılıkları)

Her bir TCP bayrak değeri için tanımlanan değerler yukarıdaki diyagramda gösterilmektedir. Buradaki flag değerleri bilgisine sahip olduktan sonra spesifik olarak çeşitli flag kombinasyonları üretilebilmektedir. Kombinasyonlar oluşturulurken bileşik içerisinde yer alacak olan bayrak değerleri toplanmaktadır. Bu değerlerin toplamı kombinasyon değerini verir ve TCP bayrak çiftlisinin uniq değerini ifade etmektedir. Örneğin TCP Tree-Way-Handshake işleminin ikinci aşaması olan SYN-ACK flag değerlerinin içeren paket içerisindeki flag değeri SYN flag değeri olan 2 değeri ve ACK flag değeri olan 16 değerinin toplamı olan 18 değeri olarak ifade edilmektedir.

Burada belirtilen TCP Flaglarına karşılık gelen değerleri kullanarak ağ üzerinde paketlerin içerdikleri bayraklara göre filtreleme işlemlerini daha kolay bir şekilde yapabiliriz. Örnek olarak aşağıdaki ifadede PSH-ACK flag değerini içeren paketlerin filtrelenmesine yönelik bir söz dizimi oluşuturulmuştur.

>> tcpdump host 192.168.1.1 and tcp[13] = 24

(Şekil 2: Tcpdump ile PSH-ACK Paketlerinin Filtrelenmesi)

Yukarıda uygulanan filtrede ACKnowledgement ve PuSH bayraklarının ondalık değerlerini toplayarak 24 ondalık değerine (decimal ifade) ulaşmaktayız. Bu komut ile TCP başlık bilgisinin sıfırıncı byte offsetinden itibaren 13. bayt offsetine bakmasını ve bu baytın ondalık değerinin 24 değerine eşit olup olmadığını sorgulamasını ve eğer eşleşme sağlanıyorsa bunu bize terminal üzerinde göstermesini sağlamış bulunmaktayız.

Bağlı olduğumuz ağ üzerinde tcpdump aracı kullanılarak kendi yerel bağlantımızın filtrelemesini basit bir şekilde yapabiliriz. Örneğin aşağıdaki ifadede basite indirgenmiş bir şekilde yalnızca SYN flag değerinin taşıyan paketlerin filtrelenmesine yönelik bir komut vermiş oluyoruz.

>>> sudo tcpdump tcp[13] = 2

(Şekil 3: Tcpdump ile SYN Paketlerinin Filtrelenmesi)

Yukarıda uygulanan filtrede Syn paketlerinin ondalık değeri olan 2 ondalık değerine (decimal ifade) ulaşmaktayız.

TCP Flag 24 = ACK-PSH

TCP Flag 16 = ACK

TCP Flag 2 = SYN

TCP Flag 0 = Nothing

..

.

Bağlı bulunduğumuz ağ üzerinde bizim tarafımıza iletilen ve bizim tarafımızdan gönderilen TCP paketlerinin filtrelenerek TCP Header bilgilerinin çıkarılmasına yönelik aşağıdaki python kodu yazılabilir. Bu kod içerisinde görülen “tcp flag value” ifadesi yukarıda açıklamasını yaptığım TCP Flag değerlerinin decimal karşılıklarının TCP paketinin header bilgisi içerisinden çıkarılarak atanacağı bağımsız değişkeni ifade etmektedir.

(Şekil 4: Ağ Paketi İçerisinden TCP Header Bilgilerinin Extract Edilmesi)

Yukarıdaki görselde yer alan kod parçası sayesinde bir TCP paketinin üst bilgisi yani header verisi çıkarılmaktadır. Burada sırasıyla tcp kaynak port bilgisi, tcp hedef port bilgisi, tcp paketinin sıra numarası bilgisi, tcp paketinin alındı bilgisi, ayrılmış offset bilgisi, tcp flag değeri (decimal olarak), tcp paketinin pencere boyutu (yani kabul edilen veri boyutu diyebiliriz.), tcp header sağlama değeri, ve aciliyet belirteç bilgisi yer almaktadır.

Burada elde ettiğimiz header bilgilerini tek tek bir sözlük tipindeki değişkene atayarak düzenli bir şekilde görüntüleyebilir yada farklı işlemler için kullanılabilirliğini sağlayabiliriz.

(Şekil 5: TCP Header Bilgilerinin Sözlük İçerisine Tutulması)

Yukarıda şekilde gösterilen kod parçası sayesinde TCP header bilgileri bir sözlüğe atanmaktadır. Daha sonrasında bu bilgiler terminal ekranında karmaşıklığı engellemek adına renklendirilerek ekrana basılmaktadır. Programın temel bir çıktısını aşağıdaki görselde inceleyebiliriz. Network Filter kodlarını ve program çıktısını yukarıda öğrendiğimiz Tcp bayraklarının decimal değer karşılıkları bilgisi eşliğinde incelediğimizde konuyu daha net bir şekilde anlamamız kolaylaşacaktır.

(Şekil 6: Sniff Programının Terminal Görüntüsü ve Paketlerin Taşıdıkları TCP Flag Değerleri)

Konuyla ilgili diğer blog yazılarıma aşağıdaki bağlantıları kullanarak ulaşabilirsiniz.

Tcpdump İle Ağ Dinleme (https://www.hasanbaskin.com/tcpdump-ile-sniffing/)

Tshark Paket Analizi (https://www.hasanbaskin.com/tshark-paket-analizi/)

Teşekkür ederim, iyi günler dilerim.


Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir