22 Haziran 2015 Pazartesi

TCP SEQUENCE ve ACKNOWLEDGEMENT (ONAY ve SIRA) NUMARA ANALİZİ


Giriş

TCP protokolü çok uzun zamandır kullanılmasına rağmen, bu protokol nispeten karmaşık ve yakından bilinmeye değer bir protokoldür. Bu makale TCP sequence ve acknowledgement (sıra ve onay) numaralandırmalarını derinlemesine incelemek için hazırlanmıştır. Makale için segmentler WireShark paket analiz programı vasıtasıyla incelenmiştir.

Örnek veriler için bir web adresine girilmiş ve elde edilen veriler üzerinden analizler yapılmıştır. Aşağıdaki şekilde görüldüğü gibi iletimde; veri iletimi başlamadan önce bağlantı kurma aşaması (3’lü el sıkışma) yapılır, bağlantı kurulduktan sonra veri transferi işlemi ve en son olarak bağlantı kapatma işlemi (burada aktif kapatma resmedilmiştir, farklı türlü bağlantı kapatma olabilir) gerçekleştirilir.


Bu makalede, 3’lü el sıkışmayla ve sonrasında veri transferiyle sıra ve onay numaralarının nasıl değiştiği anlatılacaktır.

3’LÜ EL SIKIŞMA (Three-way Handshake)
Bağlantı durumunu kontrol etmek için TCP başlığında bayraklar ya da 1 bit mantıksal bir kaç alan kullanır. Bu makalede en çok ilgilendiğimiz iki bayrak şunlardır:
·         SYN: Bir bağlantıyı ilklendirir (başlatır)
·         ACK: Alınan verileri kabul ettiğini bildirir
Bağlantı kurulumu için istemciden (Makine A) önce SYN bayrağı işaretli (syn:1) bir segment gönderilir. Bu sunucu ile sıra numarasını senkronize etmek için gönderilen bir istektir. Bu istek üçlü el sıkışmanın ilk bölümü olması nedeniyle onay numarası (ACK:0) sıfır olarak ayarlanır. Aşağıda 19 numaralı SYN (Syn:1) segment içeriği görülmektedir. Şekilde de görüldüğü gibi SYN segmentinde sıra numarası 339291796 olarak belirlenmiştir.

19    0.584958000 192.168.20.5      193.140.108.92    TCP   66    50179→80 [SYN] Seq=339291796 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1     80


Sıra numarası olan 339291796 rastgele bir başlangıç sıra numarası (ISN = Initial Sequence Number) olarak üretilir. Bu rakam üretiminde farklı algoritmalar kullanılabilmektedir. Şubat 2012 yılında yayınlanan RFC6528 numaralı sıra numarası ataklarından korunmak adlı dokümanda başlangıç sıra numarası belirlenmesinde bir algoritma önerilmektedir. Örnek olması açısından bu algoritmadan kısaca bahsedelim.
      ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
Denklemde verilen değerleri kısaca değinelim. M değeri 4 mikro saniye zamanlayıcı, F() sözde rastsal bağlantı fonksiyonudur. F() değeri dışarıdan hesaplanamamalıdır. F değeri, bazı gizli veriler ile bağlantı numarasının birleşiminin kriptografik bir özeti olabilir. Fakat daha güvenli olması için saldırganın bilemeyeceği gizli anahtar ve/veya gerçek rastsal gibi değişik bilgilerle oluşturulan bir değer olması önerilmektedir.
3’lü el sıkışmanın 2. aşamasında SYN, ACK (SYN:1, ACK:1) bayrakları “1” değerine sahip bir segment gönderilir. Burada da sunucu (Makine B) kendi ürettiği başlangıç sıra numarasını gönderir. Aşağıda elde edilmiş 20 numaralı segment bilgileri görülmektedir. Sunucu (Makine B) kendisi için başlangıç sıra numarasını (ISN) 2501784198 olarak belirlemiştir. Ayrıca istemci (Makine A) makinesine bir önceki segmenti aldığına dair bir onay numarası döner. Bu numara istemci makinesinden aldığı sıra numarasının “1” fazlası olan 339291797 (339291796+1) değeridir.
20    0.621642000 193.140.108.92    192.168.20.5      TCP   66    80→50179 [SYN, ACK] Seq=2501784198 Ack=339291797 Win=14600 Len=0 MSS=1412 SACK_PERM=1 WS=128    50179

Son aşamada ise sunucu (Makine B) makineden istemci (Makine A) makineye gönderilenlerin alındığına dair ACK (Ack:1) bayrağı “1” değerli bir segment gönderilir. Aşağıda 21 numara ile bu segment bilgileri gösterilmektedir. Burada istemci makinesi sunucu makinesi tarafından gönderilen sıra numarasının “1” fazlası olan 2501784199 (2501784198+1) numarasını dönmüştür.

21    0.621749000 192.168.20.5      193.140.108.92    TCP   54    50179→80 [ACK] Seq=339291797 Ack=2501784199 Win=66304 Len=0     80


3’lü el sıkışma tamamlandıktan sonra istemci ve sunucu makineler arasında veri iletimi için bağlantı sağlanmış olur. Bundan sonraki iletimde belirlenmiş bu sıra numaraları başlangıç olarak alınıp kullanılır.
Veri Transferi
3’lü el sıkışma tamamlandıktan sonra 44 numara olarak aşağıda gösterildiği gibi istemciden (192.168.20.5) sunucu (193.140.108.92) makinesine segment uzunluğu 513 olan bir HTTP Get isteği yapıldığı görülmektedir. Dikkat edildiği gibi sıra ve onay numaraları 3’lü el sıkışmada belirlenen rakamlar olduğu görülmektedir.

44    1.002040000 192.168.20.5      193.140.108.92    HTTP  567   GET / HTTP/1.1    80
Transmission Control Protocol, Src Port: 50179 (50179), Dst Port: 80 (80), Seq: 339291797, Ack: 2501784199, Len: 513

44 numaralı isteğe karşılık sunucu aldığını dair teyit bilgisini de barındıran 47 numaralı bir segment göndermiştir. Burada sıra numarası sabit kalırken istemciden gönderilen 513 uzunluğundaki paketi aldığını teyit eden 339292310 numarası döndürdüğü görülmektedir. Bu rakam kendisine gönderilen Sıra numarasının (Seq: 339291797) gönderilen segment boyutu kadar eklenmiş olan halidir. Yani 339292310 = 339291797 + 513

47    1.040696000 193.140.108.92    192.168.20.5      TCP   54    80→50179 [ACK] Seq=2501784199 Ack=339292310 Win=15744 Len=0   50179

İnternet tarayıcıları bir web sitesine erişirken birden fazla porttan sayfa içeriğine ulaşmaktadırlar. Yine aynı şekilde aynı siteye bağlantısı kurulmuş tcp haberleşmesinde sıra ve onay numaraları nasıl değişiyor gözlemleyelim.

1339  31.491546000      192.168.20.5      193.140.108.92    HTTP  700   GET /ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js HTTP/1.1     80
Transmission Control Protocol, Src Port: 50019 (50019), Dst Port: 80 (80), Seq: 4176971481, Ack: 2256792393, Len: 646

1343  31.520661000      193.140.108.92    192.168.20.5      TCP   54 80→50019 [ACK] Seq=2256792393 Ack=4176972127 Win=16000 Len=0  50019
Transmission Control Protocol, Src Port: 80 (80), Dst Port: 50019 (50019), Seq: 2256792393, Ack: 4176972127, Len: 0
(4176972127 = 4176971481 + 646)   [1339 numaralı paket len: 646]

1344  31.522969000      193.140.108.92    192.168.20.5      TCP   1466  [TCP segment of a reassembled PDU]  50019
Transmission Control Protocol, Src Port: 80 (80), Dst Port: 50019 (50019), Seq: 2256792393, Ack: 4176972127, Len: 1412
(2256792393 = 2256792393 + 0)      [1343 numaralı paket len: 0]

1345  31.524381000      193.140.108.92    192.168.20.5      TCP   1466  [TCP segment of a reassembled PDU]  50019
Transmission Control Protocol, Src Port: 80 (80), Dst Port: 50019 (50019), Seq: 2256793805, Ack: 4176972127, Len: 1412
(2256793805 = 2256792393 + 1412)   [1344 numaralı paket len: 1412]

Görüldüğü üzere bağlantı kurulduktan sonraki veri iletimlerinde sıra ve onay numaraları, başlangıçta belirlenen sıra numaralarına TCP segment uzunluğu eklenerek devam eden bir şekilde artarak çalışmaktadır.

KAYNAKLAR

TCP/IP Illustrated Volume 1, The Protocols, Kevin R.Fall, W. Richard Stevens

1 yorum:

  1. teşekkürler.. yakında hazırladığım diğer yazıları da paylaşacağım. Tabii vakit bulabilirsem:)

    YanıtlaSil