IP-spoofing çeşitli parçalardan oluşan kompleks bir teknik saldırıdır. Gerçekte IP-spoofing saldırı değil saldırının bir aşamasıdır. Fakat bu yazıda IP-spoofing’den saldırının tümü olarak bahsedilecektir. Ayrıca bu yazıda saldırıyı, alakalı işletim sistemi ve ağ bilgisi ile detaylı olarak anlatacağım.
[BÖLÜM I. ALTYAPI BİLGİSİ]
--[ Oyuncular ]--
A: Hedef makine
B: Güvenilen makine
X: Ulaşılamayan makine
Z: Saldıran makine
(1)2: Makine 1 kendisini makina 2 olarak gösteriyor
--[ Figürler ]--
Yazıda pek çok figür var ve aşağıdaki örnekteki gibi gösteriliyorlar:
tick makine a kontrol makine b
1 A ---SYN---> B
tick: Bir zaman süresi. Ne kadar süre geçtiği konusunda bir belirleme yapılmamıştır. Sadece bir sürenin geçtiğini belirtir. Genelde çok da önemli değildir.
makine a: TCP-tabanlı bir bağlantıda yer alan bir makine.
kontrol: Bu alan TCP başlığında hangi bit’lerin ayarlanmıi olduğunu ve bilginin akış yönünü gösterir.
makine b: TCP-tabanlı bir bağlantıda yer alan bir makine.
Bu durumda, zamanın ilk referans noktasında makine a SYN bit’I açık olan bir TCP segment’ini makine b ye göndermektedir. Özellikle belirtilmedikçe TCP segment’inin bilgi içeren kısmıyla ilgilenmiyoruz.
--[ Güven İlişkileri ]--
Unix dünyasında, güven kolaylıkla verilebilir. Diyelimki makine A da ve makine B de birer hesabınız olsun. Minimum miktarda zorlukla iki makine arasında gidip gelmeyi kolaylaştırmak için, makineler arasında full-duplex (çift yönlü) güven ilişkisi kurmanız gerekir. Makina A da ev dizininizde ‘echo “B kullanıcıismi” > ~/.rhosts’ ile bir .rhosts dosyası yaratırsınız. Makine B’de dec’echo “A kullanıcıismi” > ~/.rhosts’ ile bir .rhosts dosyası yaratırsınız. (Alternatif olarak root kullanıcısı /etc/hosts.quiv içerisinde benzer kurallar yaratabilir fakat aradaki fark bireysel değil bütün makine için geçerli oluşudur.) Artık herhangi bir r* komutunu şifre ile kimlik tanılama yapılmadan kolaylıkla kullanabilirsiniz. Bu komutlar adres-tabanlı kimlik tanılama yapacak ve servise isteği yapanın IP adresine bağlı olarak erişime izin verecek yada reddedecektir.
--[ Rlogin ]--
Rlogin TCP’yi kullanan basit bir istemci-sunucu tabanlı protokoldür. Rlogin kullanıcın bir makineden diğerine uzaktan login olabilmesini sağlar.Ve eğer hedef makine diğerine güveniyorsa rlogin şifre sormayacaktır. Bunun yerne istemcinin kimlik tanılamasını kaynak IP adresine göre yapacaktır. Yani, yukarıdaki örneğe göre, A dan B’ye, şifre sorgulaması olmadan uzaktan login olmak için kullanabiliriz.
--[ Internet Protokolü ]--
IP TCP/IP protokol takımındaki, bağlantısız, güvenilir olmayan bir ağ protokolüdür. Adres bilgisini tutmak için 2 adet 32-bit’lik başlığı vardır. Ayrıca IP TCP/IP protokol takımı içerisinde, hemen hemen tüm TCP/IP protokolleri IP datagram’ları içerisinde encapsulate edildiğinden, en meşgul olanıdır. IP’nin görevi ağda paketleri yönlendirmektir. Güvenilirlik ve dayanıklılık için hiçbir mekanizması yoktur ve bunlar için üst katmanlara dayanır. IP basitçe datagram’ları gönderir ve yerine ulaştığını umut eder. Eğer yerine varmazsa IP kaynağa ICMP hata mesajı gönderir fakat bu paketde kaybolabilir. (ICMP Internet kontrol mesajı protokolüdür ve ağ durumları ve farklı hataları IP ye ve diğer katmanlara yönlendirir) IP’nin teslimatı garantileyecek hiçbir yaptırımı yoktur. IP’de bağlantı kurulmadığından hiçbir bağlantı durumu bilgisi tutmaz. Her IP datagram’I bir önceki veya sonraki ile ilişkisi olmadan yollanır. Bu ve kaynak (ve hedef) alanlarındaki IP adreslerine istenilen değerlerin girilmesindeki kolaylık, IP’nin kolaylıkla kötü amaçla kullanılmasına yarayabilir.
--[ Transfer Kontrol Protokolü ]--
TCP, TCP/IP protokol takımında, bağlantı tabanlı ve güvenilir bir transfer protokolüdür. Bağlantı tabanlıdan maksat, bir karşılıklı konuşmada yer alacak iki makinenin, bilgiler el değiştirmeden önce bağlantı kurması gerektiğidir. Güvenilirlik bir kaç yolla sağlanır fakat bizim ilgilendiğimiz ikisi, bilgi sıralama (data sequencing) ve aldığını-onaylama (acknowledgement) dır. TCP her segment’e sıra numaraları verir ve her bir bilgi segment’inin karşı taraf tarafından alındığını onaylar. (ACK`ler sıra numarası kullanır fakat kendileri için ACK kullanılmaz.)
Bu güvenlik TCP’nin IP den daha zor kandırılmasını sağlar.
--[ Sıra numaraları, aldığını-onaylama ve diğer flag’ler ]--
TCP güvenilir olduğundan, kaybolmuş, tekrar edilmiş yada sırası bozuk bilgiler gibi durumlarla başa çıkabilmelidir. Transfer edilen her byte’a bir sıra numarası vererer ve bağlantının diğer ucundan alındığına dair onay gerektirerek güvenli teslimatı garanti edebilir. Alıcı taraf sıra numaralarını kullanarak bilginin düzenli sıralanmasını sağlar ve tekrarlanmış bilgi byte’larını yok eder.
TCP sıra numaraları basitçe 32 bitlik sayaçlar olarak düşünülebilir. 0 dan 4,294,967,295 e kadar olabilirler. Bir TCP bağlantısında takas edilen bilginin her byte’I sıralanır. TCP başlığındaki sıra numarası, TCP segment’indeki bilginin ilk byte’ının sıra numarasını içerir. TCP başlığındaki alındı-onay alanı sıradaki beklenen sıra numarasının değerini içerir. Ve ayrıca bu ACK numarasının bir eksiği değerine kadar olan tüm bilgilerin alındığını onaylar.
TCP akış kontrolü için pencere ilanı (window advertisement) kullanır. Kayan Pencere kullanarak karşı tarafa ne kadar bilgiyi tampon hafızada tutabileceğini bildirir. Pencere boyutu 16 bit olduğundan alıcı TCP maksimum 65535 byte’a kadar ilan yapabilir. Pencere ilan etmek bir TCP den diğerine kabul edilir sıra numaralarının ne kadar yüksek olabileceğini bildirmek gibi düşünülebilir.
Diğer bazı önemli TCP başlığı flag’leri RST (reset), PSH (push) ve FIN (finish) dir. Eğer bir RST alınmışsa bağlantı hemen kapatılır. RST’ler normalde taraflardan biri o anki bağlantı ile uyuşmayan bir segment aldığında gönderilir (bir örneğine aşağıda rastlayacağız). PSH flag’I alıcı tarafa uygulama için kuyruğa aldığı tüm bilgiyi en kısa zamanda geçirmesini söyler. FIN flag’I bir bağlantının başarılı bir şekilde sonlandırılmasında kullanılır (bağlantı kesilmesi 4 yönlü bir işlemdir). Bir taraf FIN aldığında onu ACK’ler ve başka bilgi almayı beklemez (fakat göndermek hala mümkündür).
--[ TCP Bağlantısı kurulması ]--
TCP kullanarak bilgi takas edilebilmesi için makinenin bir bağlantı kurması gerekir. TCP 3-yönlü el sıkışma (3-way handshake) adı verilen 3 adımlık bir işlem ile bağlantı kurar. Eğer makine A bir rlogin istemcisi çalıştırıyor ve makine B deki bir rlogin servisine bağlanmak istiyorsa işlem aşağıdaki gibidir:
fig(1)
1 A ---SYN---> B
2 A <---SYN/ACK--- B
3 A ---ACK---> B
(1) de istemci sunucuya bir bağlantı kurmak istediğini söylüyor. Bu SYN flag’inin tek amacıdır. İstemci sunucuya sıra numarasının geçerli olduğunu ve kontrol edilmesi gerektiğini söylemektedir. İstemci TCP başlığındaki sıra numarası alanını kendi ISN (başlangıç sıra numarası) na göre ayarlar. Sunucu, bu segment’I aldığında (2) kendi ISN’I ile (Bu yüzden SYN flag’I vardır.) cevap verir ve istemcinin ilk segment’inin alındığına dair bir ACK onayı (istemcinin ISN’I+1) gönderir. Sonra da istemci sunucunun ISN’ini ACK’ler (3). Artık bilgi transferi yapılabilir.
--[ ISN ve Sıra Numarası arttırımı ]--
Sıra numaralarının başlangıçta nasıl seçildiklerini ve zamanla nasıl değiştiklerini anlamak önemlidir. Başlangıç sıra numarası bir makine boot edildiğinde 1 ile başlar. (TCP bu değişkeni, başlangıç gönderme numarası olduğu için ‘tcp_iss’ diye adlandırır. Diğer sıra numarası değişkeni başlangıç alış numarası olduğundan ‘tcp_irs’ olarak adlandırılır ve 3-yönlü bağlantı kurulması sırasında öğrenilir. Aralarındaki fark bizim için şu an önemli değil.) Bunun yanlış olduğu, tcp_init() fonksiyonunda kullanıldığı yerde de yorum olarak belirtilmiştir. ISN her saniyede 128000 artar buda eğer hiç bağlantı olmazsa 32-bitlik ISN sayacının 9.32 saatte bir başa dönmesi demektir. Fakat, ne zaman bir connect() kullanılsa sayaç 64000 artar.
Bu tip tahmin edilebilir bir artışın en önemli sebeplerinden birisi o anki bağlantıya ait önceki bilgilerin tekrar gönderilip herşeyi bozmasını önlemek içindir. 2MSL bekleme süreleri bununla ilgilidir fakat bu yazının konusu dışında kalıyor. Eğer sıra numaraları bir bağlantı geldiğinde rastgele olarak seçilseydi numaraların daha önceki bir bağlantıdan kalıp kalmadığı konusunda bir garanti olmazdı. Eğer bir bilgi bir yerlerde rooting loop’a girip bir süre sonra kurtulduğunda yeni bir bağlantıya denk gelebilir ve işleri karıştırabilirdi.
--[ Port’lar ]--
TCP modülüne aynı anda farklı erişimlere olanak sağlamak için TCP, port adı verilen bir kullanıcı arabilirimi sağlar. Port’lar kernel’in ağ işlemlerini ayırt etmesinde kullanılır. Bunanlar kesin olarak transfer katmanı bireyledirler (yani IP bunlara çok önemsemez). IP adresi ile birlikte, bir TCP port’u ağ bağlantıları için bitiş noktası sağlar. Aslınd tüm internet bağlantıları istenildiğinde 4 adet numara ile tanımlanabilirler: Kaynak IP adresi, kaynak port, Hedef IP adresi ve hedef port. Sunucular farkli sistemlerde standart portlarda olsun diye ‘well-known’ port’lar olarak isimlendirilen portlara sınırlandırılmışlardır. Örneğin rlogin servisi TCP port 513 de çalışır.
[BÖLÜM 2 - SALDIRI]
...Şeytan eli boş olanlar için iş bulur....
--[ Kısaca... ]--
IP-spoofing çeşitli adımlardan oluşur. Bunların kısaca önbilgisini verip sonrada detaylı olarak açıklayacağım. Önce hedef makine seçilir. Sonra güvenilir bir makine ile güven ilişkisi bulunur. Güvenilen makine kapatılır ve hedefin TCP sıra numaraları örneklenir. Güvenilen makine sahiplenilir, sıra numaraları bulunur ve sadece adres-bazlı kimlik tanılama gerektiren bir servise bağlanılır. Eğer başarılı olursa, saldırgan `backdoor` bırakmak için basit bir komut çalıştırır.
--[ Gerekenler ]--
Bu saldırıyı birisinin gerçekleştirebilmesi için pek çok şey gereklidir:
(1) beyin, akıl, yada giğer bir düşünce cihazı
(1) hedef makine
(1) güvenilen makine
(1) saldırı yapılan makine (root yetkileri ile)
(1) IP-spoofing yazılımı
Genelde saldırı yapılan makinedeki root hesabından hedef makinedeki root hesabına saldırı yapılır.
--[ IP-Spoofing bir `Kör Saldırıdır` ]--
Çoğu zaman gözardı edilen ama IP-spoofing`de kritik bir faktör bu saldırının 'kör' (blind) oluşudur. Saldırganın hedef makinenin güvenliğini geçebilmesi için güvenilen makinenin kimliğine bürünmesi gereklidir. Güvenilen makine aşağıda tanımlanan metot ile kapatılır. Hedefin tek bildiği güvenilen bir arkadaşla konuşma olduğudur.
Gerçekte saldırgan Internet`in karanlık bir köşesinde oturup güvenilen host bir DoS savaşı ile boğuşurken onun adına paketler göndermektedir. Değiştirilmiş IP adresine sahip IP datagram`ları hedefe problemsiz ulaşır (IP hatırlayacığınız gibi bağlantısızdır-her datagram karşı taraftan bağımsız gönderilir) fakat hedefin geri döndüğü paketler (güvenilen makineye gönderilen) hedefi ıskalıyor. Saldırgan bunu hiçbir zaman görmüyor. Bağlantıyı sağlayan router`lar datagram`ların nereye gitmesi gerektiğini biliyor. Güvenilen makineye gitmeleri gerekiyor.
Ağ katmanı ile alakalı oldukça orjinal olarak geldikleri ve cevapların gideceği yer burası. Tabiki datagram’lar buraya route edildiğinde protokol takımında (stack) bilgi ayrılacak ve TCP ye vardığında da atılacaklardır (güvenilen makinenin TCP’si cevap veremez, aşağıda açıklanacak). Bu yüzden saldırgan zeki olmalı ve ne gönderildiğini ve sunucunun beklediği cevabı bilmeli. Saldırgan hedef makinenin ne gönderdiğini göremez fakat ne gönderebileceğini tahmin (predict) edebilir. Ne göndereceğini bilmekle saldırgan bu körlükle çalışmayabilir.
--[ Güven Modeli ]--
Bir hedef seçildikten sonra saldırgan güven modelini belirlemeli (hedef makinanın birilerine güvendiğini umuyoruz. Eğer güvenmeseydi saldırı burda biterdi). Bir makinenin kime güvendiğini bulmak kolay olabilirde olmayabilirde. ‘Showmount –e’ dosyas-sistemlerinin nereyle paylaşıldığını gösterebilir ve rpcinfo’da değerli bilgiler verebilir.
Eğer makine hakkında yeterli altyapı bilgisi olursa saldırı çok zor olmaz. Eğer bunlar mümkğn değilse komşu IP adresleri (brute-force metodu ile) denenebilir.
--[ Güvenilen makinenin günah seli ile kapatılması ]--
Güvenilen makine bulunduğunda kapatılmalıdır. Saldırgan onun yerini alacağı için bu makinenin hiçbir ağ trafiği almadığından ve işleri karıştırmayacağından emin olması gerekir. Bunu yapmanın pek çok yolu vardır. Benim anlatacğım yöntem TCP SYN seli (flooding).
Bir TCP bağlantısı bir istemcinin sunucuya TCP başlığında SYN etiketi olan bir istek yapmasıyla başlar. Normalde sunucu IP başlığındaki 32-bitlik adrese (istemciye) bir SYN/ACK cevabı geri dönecektir.
İstemcide sunucuya bir ACK gönderecek (figür 1 de görmüştük) ve bilgi transferi başlayacaktır. Fakat TCP’nin belirli bir soket (socket) için işleyebileceği TCP isteklerinin bir üst limiti vardır. Bu sınıra ‘backlog’ denir ve gelen (tamamlanmamış) bağlantılar burda kuyrukta bekletilirler. Bu kuyruk sınırı hem tamamlanmamış bağlantılar (3 yollu el sıkışma tamamlanmamış) hemde accept() sistem çağrısı ile uygulama tarafından kuyruktan alınmamış tamamlanmış bağlantılar için geçerlidir. Eğer bu ‘backlog’ sınırına ulaşılırsa TCP bekleyen bağlantılar ile işini bitirene kadar gelen bağlantıları atacaktır. Ve saldırı burda yatıyor.
Saldıran makine kapanmasını istediği TCP port’una çok sayıda SYN isteği gönderir. Ayrıca saldıran makine o anda ulaşılamayan bir makineyi kaynak IP adresi olarak göstermelidir (hedef makine bu adreslere cevap dönmeye kalkacaktır). IP makinenin erişilemediği konusundan TCP’yi bilgilendirir fakat TCP bu hataları geçici olarak düşünür ve çözümünü IP’ye bırakarak (paketleri tekrar yönlendir vs) gözardı eder. IP adresi erişilmez durumda olmalı çünkü saldırgan hiçbir host’un hedeften SYN/ACK alıp bir RST cevabı dönerek saldırıyı bozmasını istemez. İşlem aşağıdaki gibidir:
fig(2)
1 Z(x) ---SYN---> B
Z(x) ---SYN---> B
Z(x) ---SYN---> B
Z(x) ---SYN---> B
Z(x) ---SYN---> B
...
2 X <---SYN/ACK--- B
X <---SYN/ACK--- B
...
3 X <---RST--- B
(1) de saldıran makine hedefe çok sayıda SYN isteği göndererek ‘backlog’ kuyruğunun bekleyen bağlantılarla dolmasını sağlıyor (unutmayın, bu saldırının bu safhasında hedef güvenilen makine).
(2) de hedef makine gelen SYN’lerin kaynağı olduğu sandığı adreslere SYN/ACK cevabı dönüyor. Bu süre içerisinde bu TCP portuna yapılan tüm istekler gözardı edilecektir.
Farklı TCP uygulamalarının (implementations) farklı ‘backlog’ boyutları vardır. (BSD’nin backlog’u genelde 5, Linux’un 6 dır.) Ayrıca 3/2 ‘grace’ marjı vardır. Bunun anlamı TCP ‘backlog*3/2+1’ bağlantıya izin verecektir. Bu sokete (listen() I 0 backlog ile çağırsada) 1 bağlantı izni verecektir.
YazarınNotu: [TCP SYN flooding hakkında detaylı bilgi için Phrack 49. sayısına bakabilirsiniz.]
--[ Sıra Numarası örnekleme ve tahmin etme ]--
Şimdi saldırganın hedef TCP’nin hangi 32-bitlik sıra numarası aralığında olduğu hakkında bir fikir sahibi olması gerekiyor. Saldırgan hedefte bir TCP port’una bağlanır (SMTP iyi bir seçim) ve hedef makinanın gönderdiği ISN’I kaydeder. Çoğu zaman bu işlem birden fazla kez tekrarlanır ve son gönderilen son ISN kaydedilir. Saldırganın hedeften kendisine RTT’nin (round-trip time – tur-döngüsü süresi) ne olduğu hakkında fikir sahibi olmalıdır.
Bu işlem pek çok kez tekrarlanıp RTT’nin averajı hesaplanabilir. RTT bir sonraki ISN’I doğru olarak tahmin etmek için gereklidir. Saldırganın elinde gönderilen son ISN vardır ve sıra numaralarının nasıl arttığını bilmektedir (saniyede 128000 ve bağlantı başına 64000). Bir pakedin internette seyahat edip hedefe gitmesinin ne kadar süre aldığını da görmüştür. Bu bilgiler ile saldırgan hemen saldırının ikinci safhasına geçer.
Spoof edilmiş segment hedefe doğru yol alırken saldırganın tahminine bağlı olarak çeşitli şeyler olabilir:
- Eğer sıra numarası alıcı TCP’nin TAM olarak aynı ise, gelen veriler alım için ayrılan tampon hafızaya yerleştirilecektir.
- Eğer sıra numarası beklenenden KÜÇÜK ise bu tekrar-gönderme (retransmission) gerektirir ve paket atılacaktır.
- Eğer sıra numarası beklenenden BÜYÜK ise ve alış-penceresi (receive-window) sınırları içerisinde ise, veri byte’I gelecek bir byte olarak kabul edilip TCP tarafından tutulacak ve diğer eksik byte’ların gelmesi beklenecektir. Eğer sıra numarası beklenenden BÜYÜK bir segment alınırsa ve alış-penceresi sınırları içinde değilse TCP cevap olarak BEKLENEN sıra numarası ile bir segment gönderecektir.
--[ Yıkım... ]--
Saldırının en önemli kısmı burda gerçekleşir:
fig(3)
1 Z(b) ---SYN---> A
2 B <---SYN/ACK--- A
3 Z(b) ---ACK---> A
4 Z(b) ---PSH---> A
[...]
Saldıran makine IP adresini güvenilen makine (o hala DoS saldırısı ile boğuşuyor) gibi gösterip spoof yapar ve isteğini hedef makinedeki 513 nolu porta gönderir (1).
(2) de hedef spoof yapılmış bağlantıya (güvenilen hosta gidecek) bir SYN/Ack ile cevap verir (ki güvenilen host DoS saldırısı ile uğraşırken bu gelen TCP segment’ini işlemeyi başarsa bile bir hata olduğunu düşünecek ve hemen hedefe bir RST gönderecektir). Eğer herşey planlandığı gibi giderse SYN/ACK zor durumda olan güvenilen makine tarafından düşürülecektir. (1) den sonra, saldırgan hedefe SYN/ACK gönderecek kadar yeterli bir süre tanımalıdır (saldırgan bu segment’I göremez). Sonra (3) de saldırgan hedefe tahmin edilen sıra numarası ile (+1 çünlü biz ACK’liyoruz) bir ACK gönderir. Eğer saldırgan tahmininde doğruysa hedef ACK’yi kabul edecektir. Hedef makina kandırılmıştır ve bilgi transferi başlatılabilir (4).
Genelde, hedef sisteme girildikten sonra saldırgan sonradan daha kolay girebilmek için bir backdoor bırakır (genelde `cat + + >> ~/.rhosts` yapılır. Bu çeşitli sebeplerden iyi bir fikirdir: hızlıdır, tekrar-girebilmeye izin verir, ve interaktif değildir. Unutmayınki saldırgan hedeften gelen hiçbir trafiği görmez. Bu yüzden tüm cevaplar bilinmeyene gönderilmektedir.)
--[ Niye yapılabilmesine izin var? ]--
IP-Spoofing yapılabiliyor çünkü güvenilen servisler ağ adresine dayalı kimlik tanılama yapabiliyor. IP kolaylıkla taklit edilebileceğinden adres sahtekarlığı yapmak zor değil. Saldırının en zor kısmı sıra numarası tahmini çünkü tamamen tahmine dayalı. Bilinmeyenler ve tahminler minimuma indirgendiğinde saldırının gerçekleşmesi için daha çok şans vardır. Bir makine tüm gelen TCP’ye dayalı bağlantılarını Wietse Venema’nın TCP wrapper (sarıcı) ları ile sarsada hala bu saldırdan etkileniyor. TCP wrapper’lar kimlik tanılama için makine ismi yada IP adresine güvenirler.
[BÖLÜM 3 – KORUNMA]
--[ Güvenmeyin ve Güvenilen olmayın ]--
Bu saldırıyı önlemenin kolay yollarından biri adrese-dayalı kimlik tanılaması yapmamak. Tüm r* komutlarını kaldırın, tüm .rhosts dosyalarını kaldırın ve /etc/hosts.equiv dosyasını boşaltın. Bu tüm kullanıcıları uzaktan erişim için başka yollara zorlar (telnet, ssh, skey, vs).
--[ Paket Filtreleme ]--
Eğer siteniz Internet’e direk bağlı ise router’ınız size yardımcı olabilir. Önce sadece iç ağınızadki makinelerin güven-ilişkilerinde yer alabileceğinden emin olun ( iç ağdaki hiçbir makine ağın dışındaki bir makineye güvenmemeli). Sonra iç ağdan geliyormuş gibi görünen ve dışardan (Internet) gelen tüm trafiği filtreleyin.
--[ Kriptografik Metodlar ]--
IP spoof’u engellemenin en belirgin örneklerinden biri tüm ağ trafiğinin şifrelenmesi ve/veya kimlik tanılaması yapılmasıdır. Bu konuda çeşitli çözümler mevcut fakat bunların standart olması için biraz zaman geçmesi gerek.
--[ ISN – Başlangıç Sıra Numaralarını rastlantısallaştırma (randomizing) ]--
Sıra numaraları rastgele seçilmediğinden (veya rastgele arttırılmadığından) bu saldırı işe yarıyor. Bellovin, TCP için sıra numarası alanını parçalamaya dayalı bir çözüm sunuyor. Her bağlantının kendine ait ayrı bir sıra numarası alanı olmalı. Sıra numaraları önceki gibi artacaktır fakat bu alanlardaki numaralandırma arasında en ufak bir ilişki bulunmamaktadır. Önerilen formül aşağıdaki gibidir:
ISN=M+F(yerelmakine,yerelport,uzaktakimakine,uzaktakiport)
M 4 mikrosaniyelik zamanlayıcı ve F de kriptografik hash’dir. F dışarıdan hesaplanamamalı yoksa saldırgan hala sıra numaralarını tahmin edebilir. Bellovin F’nin bağlantı ID’sinin bir hash’I olmasını ve gizli bir vektör (rastgele bir sayı veya makinenin boot zamanı ile birleştirilen makineye ait bir gizli şey) tavsiye ediyor.
Saygılar.