Ana içeriğe geç

Bölüm 46:Güvenlik Duvarları

12 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. Son Söz

Tünelin ucundan çıktın ve paket hedef ağın sınırında duruyor. Buraya kadar hiçbir kutu onu geri çevirmedi.

Sınırdaki kutu çevirebilir. Orada bir kural kümesi var ve paket geçmeden önce tek tek yargılanıyor. Peki o kural neye bakıyor?

Sınırda duran şey bir politika

Tünelleme paketi bir başkasının gövdesine koyup dış zarfın arkasına alıyordu; buradaki kutu ise tam tersini yapıyor ve zarfı açıp okuyor. Güvenlik duvarı bir cihaz adı değil, bir sınır tarifi. Kurumun iç ağı ile internetin geri kalanı arasına bir hat çekiyor, sonra o hattı kimin geçeceğine karar veriyor. Tarifin içinde kasa diye bir şey yok; sınır var, bir de o sınırda uygulanan politika. Rafta duran kutuyu değil, kutunun uyguladığı kuralı satın alıyorsun.

Politikanın varsayılanı kapalı: açık olan ne varsa, biri onu tek tek açmış demektir. Gerekçeyi üç maddede toplayabilirsin: hizmet reddi saldırılarını durdurmak, iç verinin izinsiz okunmasını ya da değiştirilmesini engellemek, iç ağa yalnızca yetkilendirilmiş erişime izin vermek. Bu kutuyu savunmanın tamamı sayma; kimlik doğrulama ve şifreleme onun yanında duruyor.

Üç tür var: durumsuz paket süzgeçleri, durum takipli paket süzgeçleri, uygulama geçitleri. Sıralamanın bir mantığı var: her tür, bir öncekinin göremediğini görmek için doğdu.

Bir kural satırı neye bakıyor?

Durumsuz süzgeç kararını paket paket veriyor ve elinde hiç geçmiş tutmuyor. Baktığı alanları tek tek sayabilirsin: kaynak IP adresi, hedef IP adresi, TCP ya da UDP kaynak ve hedef port numaraları, ICMP mesaj türü, bir de TCP başlığındaki SYN ile ACK bitleri.

Bu kısa listenin ne kadar iş gördüğü şaşırtıcı. IP başlığındaki protokol alanı, yükün hangi protokole ait olduğunu söylüyor: ICMP için 1, IGMP için 2, TCP için 6, EGP için 8, UDP için 17. Protokol alanı 17 olan datagramları düşüren tek bir satır, ağdaki her UDP akışını kesiyor. Tek satırla ne kadar şey kapatabileceğini görmek, bu kutuyu neden dikkatle yazman gerektiğini de anlatıyor.

ACK biti segmentin bir onay taşıdığını söylüyor; RST, SYN ve FIN bayrakları da bağlantı yönetimini taşıyor. Dışarıdan gelen ve ACK biti 0 olan TCP segmentlerini düşürürsen dış istemciler içeriye bağlantı açamıyor. İç istemcilerin dışarıya açtığı bağlantılar çalışmayı sürdürür, çünkü onlara dönen paketlerde ACK kuruludur. Tek bit, kapının yönünü belirler.

Kurallar ICMP tür numaralarına da yazılır. Tür 8 ping isteğini, tür 0 cevabını taşır. Tür 11 kod 0 TTL’in tükendiğini, tür 3 kod 3 hedef portun ulaşılamaz olduğunu bildirir. TTL alanı her yönlendiricide bir azalır ve sıfıra düşünce paket silinir; traceroute tam bu davranışın üstüne kuruludur. Ağının haritalanmasını istemiyorsan dışarı çıkan TTL-aşıldı mesajlarını düşürürsün. Keşif orada körelir. Aynı mantıkla yayın adresine giden ICMP paketleri de düşürülür, çünkü ağının smurf tipi bir hizmet reddi saldırısında araç olmasını istemezsin.

Bunun bedeli de var. Bir ICMP mesajı tür, kod ve hataya yol açan datagramın ilk 8 baytını taşır. Yol MTU keşfi susturulduğunda kara deliğe dönüyordu; kuralı yazan taraftan bakınca aynı bedel tek satırlık bir ICMP reddinin içinde duruyor.

Port numarası bir makinenin hangi kapısını gösteriyordu; kural satırındaki port koşulu o uzayın bir dilimini keser. Port uzayı 0 ile 65.535 arasında uzanır. En büyük değer 65.535 olduğuna göre alan 16 bittir.

İlk eşleşen satır kazanır

Kural satırları bir tabloda toplanır ve tablonun adı erişim kontrol listesidir. Yapısı iki sütundan ibarettir: bir aksiyon, bir koşul. Gelen paket listeye yukarıdan girer ve ilk eşleşen satırın aksiyonu uygulanır. Tarama orada durur. Sıra bu yüzden ayrıntı sayılmaz; politikanın kendisidir.

Peki hiçbir satır eşleşmezse ne olur? Listenin sonunda yazılmamış bir satır durur ve o satır her şeyi reddeder. Adı örtük rettir. Yazmadığın kural, yazdığın en güçlü kuraldır.

Somut bir kurum ağı kuralım. Kullanıcılar 198.51.100.0/24 bloğunda otursun, dışa açık web sunucusu 198.51.100.20 adresinde dursun.

aksiyonkaynakhedefkoşul
izin198.51.100.0/24dışarısıTCP hedef port 443
izindışarısı198.51.100.0/24TCP kaynak port 443, ACK kurulu
izin198.51.100.0/24dışarısıUDP hedef port 53
izindışarısı198.51.100.20TCP hedef port 443
rether şeyher şeyörtük

Dört izin satırı ve bir örtük ret; her paket en kötü durumda beş karşılaştırma görür. Dönüş satırının koşuluna klasik olarak bir de kaynak portun 1.023’ten büyük olması yazılır. Kulağa dar geliyor. Oysa o koşul 64.512 portu birden kapsar ve tek başına neredeyse hiçbir şey elemez.

Liste yönlendiricide iki ayrı yerde işler: paket alındığı arayüzde bir kez, yönlendirme kararından sonra çıkış arayüzünde ikinci kez süzülür. Satırlar dardan genişe doğru dizilir; ters sıra, dar bir kuralı hiç çalışmayan bir satıra çevirir. Kolayca gözden kaçan bir tuzak daha var. Oluşturulan liste bir arayüzle ilişkilendirilmezse yazılmamış sayılır.

Listelerin kendisi de ikiye ayrılır. Standart liste yalnızca kaynak adrese bakar; genişletilmiş liste kaynağın yanında hedefe, protokol numarasına ve port numarasına da bakabilir. Klasik komut satırında türü liste numarası belirler: 1-99 arası standart, 100-199 arası genişletilmiş IP listesidir. İsimli listelerde hatalı bir satır, başına no yazılarak tek tek silinebilir. Numaralı listede bu mümkün değildir; liste baştan yazılır. Adres kümesini kısa yazmak içinse joker maske kullanılır; bitleri alt ağ maskesinin tam tersi anlama gelir.

Süzgeç neyi hatırlar, neyi hiç göremez?

Durumsuz süzgeç, bütün bu inceliğe rağmen kaba bir alettir. Hiçbir TCP bağlantısı kurulmamışken bile, kaynak portu 443 ve ACK biti kurulu bir paketi içeri alır. İkinci satırın koşuluna uyuyor, o kadar.

Durum takipli süzgeç bağlantının geçmişini tutuyor. Her TCP bağlantısının kurulumunu ve yıkımını izliyor: SYN’i görüyor, FIN’i görüyor, aradaki paketin anlamlı olup olmadığına karar veriyor. Erişim kontrol listesine fazladan bir sütun ekleniyor ve o sütun tek bir şey söylüyor: bu satırdaki paketi içeri almadan önce bağlantı durum tablosuna bak.

Tablonun anahtarı tanıdık bir four-tuple. İki adres ile iki port, yani 32 + 32 + 16 + 16 bit eder. Toplamı 96 bit, bayta çevirince 12 bayt, üstüne bir de protokol numarası biner. Çeviri tablosu da aynı four-tuple’ı tutuyordu; buradaki tablo yapı olarak onun kardeşidir.

Satırların sonsuza kadar durmasını da bekleme. Hareketsiz bağlantılar zaman aşımına uğruyor ve süresi dolan girdinin paketleri artık içeri alınmıyor. UDP tarafında bu konforu bulamıyorsun: izlenecek bir bağlantı durumu olmadığı için süzgeç UDP’ye çoğu zaman ya hep ya hiç uyguluyor.

Bu belleğin bir bedeli olduğunu da unutma. Tablodaki her satır bir bağlantının kimliğini taşıyor ve bir yerde durmak zorunda; zaman aşımının sebebi de bu, çünkü tablo sonsuz büyüyemiyor. Tersinden okununca aynı cümle bir kapasite sınırı veriyor: durum tutan her kutu, hatırladığı şeyi bir saldırı yüzeyi olarak satın alıyor.

Kutunun ilk paketten sonra neyi hatırladığını izleyelim:

Aynı görünen iki paketi ayıran tek satır
kurum ağı 198.51.100.0/24internetiç makine198.51.100.41güvenlik duvarıdurum takiplidış sunucu203.0.113.7giden akışaynı dörtlükarşılıksız paketbağlantı durum tablosuiç uç 198.51.100.41:51500dış uç 203.0.113.7:443tabloda satırı yok
İç makine bağlantıyı açıyor. 198.51.100.41 adresindeki makine dışarıdaki sunucunun 443 portuna bir SYN gönderiyor. Paket sınırdan çıkarken listenin giden satırıyla eşleşiyor.
  1. İç makine bağlantıyı açıyor. 198.51.100.41 adresindeki makine dışarıdaki sunucunun 443 portuna bir SYN gönderiyor. Paket sınırdan çıkarken listenin giden satırıyla eşleşiyor.
  2. Kutu tabloya satır yazıyor. Satırın anahtarı iki adres ile iki port. Durumsuz bir süzgeçte böyle bir kayıt hiç oluşmaz; kural tablosunun yanındaki bellek tam olarak bu satırdır.
  3. Paket dış sunucuya çıkıyor. Sınırın dışında olan biten kutuyu ilgilendirmiyor. Elinde tuttuğu tek şey, az önce yazdığı satırın kendisi.
  4. Dönen yanıt satırla eşleşiyor. Yanıt geldiğinde kutu önce tabloya bakıyor. Dörtlü orada yazılı olduğu için paket anlamlı sayılıyor ve iç makineye veriliyor.
  5. Karşılıksız paket düşüyor. Aynı anda gelen ikinci paketin başlıkları da kurallara uyuyor: ACK biti kurulu, kaynak portu 443. Tabloda satırı olmadığı için içeri alınmıyor.

Üçüncü tür daha derine iniyor. Uygulama geçidi başlıkla yetinmiyor, uygulama verisinin kendisine bakıyor; ters vekil de iki ayrı bağlantı kurup aralarında veri taşıyordu. Bu türe buradan eklenecek iki şey daha var. Geçit tek başına çalışmıyor: yönlendiricideki süzgeç, geçitten çıkmayan bağlantıları bloklamazsa geçidi atlamak serbest kalıyor. Bedeli de kalıcıdır, çünkü özel muamele isteyen her uygulama kendi geçidini ister ve istemci yazılımı o geçide nasıl ulaşacağını bilmek zorundadır.

Şimdi üç türün de ortak kör noktasına gel. Bütün bu kurallar kaynak adrese güveniyor, oysa kaynak adres güvenebileceğin bir alan değil. IP kimlik sahteciliği, sahte kaynak adresli bir paketi ağa enjekte etmektir; alanı dolduran gönderendir ve kimse doğrulamaz. Savunma da sınırdaki kutuyla bitmez: yerel ağda anahtar üzerinde IP Source Guard gibi bir özellik açılır.

İkinci kör nokta bundan da derinde duruyor. Paket süzme yalnızca TCP/IP başlıklarına bakıyor ve oturumlar arasında hiç ilişki kurmuyor. Saldırı tespit sistemini tam bu iki eksik için kuruyorlar. Derin paket incelemesi yapıyor: paketin içeriğine bakıp bilinen virüs ve saldırı dizilerinden oluşan bir veritabanıyla karşılaştırıyor. Birden çok paket arasındaki ilişkiyi de inceliyor. Port taraması, ağ haritalama ve hizmet reddi saldırısı ancak paketler birlikte bakıldığında görünür.

Hizmet reddi saldırısının tanımı tam buraya oturuyor. Saldırgan hedefi bozmaya çalışmıyor, dolduruyor: bant genişliği ya da sunucu kapasitesi ne kadarsa sahte trafikle tüketiyor ve meşru isteğe sıra kalmıyor. Yarı açık bağlantı kuyruğunu dolduran SYN seli tanıdık; durum tablosu aynı doldurma hamlesine güvenlik duvarında da açık. Dağıtık biçimini üç adımda kuruyorlar: önce hedefi seçiyorlar, sonra ağa dağılmış makineleri ele geçiriyorlar, en sonunda saldırıyı o makinelerden başlatıyorlar. Kaynağı tek bir yerde arama; binlerce makineden geliyor, sınırdaki kutu o trafiği süzmek için önce onu görmek zorundadır ve gördüğü her yeni four-tuple için tablosunda yer açar.

Bu doldurma hamlesinin en eski biçimine karşı zarif bir savunma geliştirilmiş ve mantığını öğrenmen işine yarayacak. SYN seli, sunucuyu kendisi için yer ayırmaya zorlayarak çalışıyordu: her sahte SYN, tabloda bir satır açtırıyordu. Karşı hamle de tam buna cevap veriyor — hiç yer ayırma.

Yöntemin adı SYN çerezi. Sunucu yarı açık bağlantı için bellek ayırmak yerine, o bağlantıya ait bilgiyi kendi göndereceği başlangıç sıra numarasının içine gömüyor. Numarayı rastgele seçmiyor; kaynak adres, kaynak port, hedef adres, hedef port, kaba bir zaman sayacı ve yalnızca sunucunun bildiği bir gizli anahtarı bir özet işlevine sokuyor ve çıkan değeri numara olarak kullanıyor.

Üçüncü mesaj geldiğinde sunucunun elinde hiçbir kayıt yok — ama gerek de yok. Gelen onay numarasından bir eksiltiyor, aynı özeti kendi yeniden hesaplıyor ve tutup tutmadığına bakıyor. Tutuyorsa bu üçüncü mesaj gerçekten kendi gönderdiği ikinci mesaja cevaptır; bağlantıyı o anda kuruyor. Tutmuyorsa mesajı atıyor.

Sahte kaynak adresli bir SYN seli artık hiçbir şey doldurmuyor, çünkü doldurulacak bir yer yok. Saldırgan gerçekten yer ayırtmak istiyorsa üçüncü mesajı da göndermek zorunda; o da kaynak adresini gizleyememek demek.

Bedeli de var ve nerede olduğu öğretici. Sunucu durum tutmadığı için, el sıkışma seçeneklerini — pencere ölçekleme, seçici onay — hatırlayacak yeri de yok. Bu yüzden SYN çerezi normalde kapalı durur ve yalnızca kuyruk taşmaya başlayınca devreye girer. Savunma, saldırı yokken ödenmeyen bir bedelle çalışıyor.

Azaltmanın işe yaradığı bir örneği de görebilirsin. Kök alan adı sunucularına yönelik dağıtık saldırılar bugüne kadar başarıya ulaşamadı: trafik süzme bir yandan, yerel sunucuların üst düzey alan sunucularının adreslerini önbellekte tutması bir yandan, sorguların çoğunu köke hiç uğratmıyor.

Tek bir tespit noktasıyla da yetinemiyorsun. Sensörleri ağın farklı köşelerine dağıtıyorlar ve her biri başka bir denetimi üstleniyor; dışa açık sunucular da iç ağdan ayrılmış bir askersiz bölgede duruyor.

Dışarıdan bakınca bütün bu düzeneği tek bir kelimede göreceksin. Tarayıcı bir portu filtreli işaretlediğinde, arada bir süzgeç olduğunu ama portun ardında ne olduğunu çözemediğini söylüyordur. Ping’e cevap gelmemesini de tek bir şeye yorma: ya makine hiç ayakta değildir, ya da bir süzgeç ICMP’yi yutuyordur. Susmayı kanıt sayamazsın.

Aradaki adam nereye oturuyor?

Trafiği okumak ya da değiştirmek isteyen birinin önce çözmesi gereken bir sorun var: trafiğin kendi üzerinden geçmesi gerekiyor. Saldırının tamamı bu tek adımda saklı ve adımı atmanın sayılı yolu var. Her yol bir katmanda bir yalan söylemekten ibaret.

katmanyöntemsöylenen yalanne durdurur
fizikselsahte kablosuz access point“tanıdığın ağ benim”ağ adının değil sertifikanın doğrulanması
bağARP zehirlemesi“o IP adresi benim kartımda”dinamik ARP denetimi, port güvenliği
bağsahte DHCP sunucusu“varsayılan geçidin benim”anahtarda DHCP gözetimi
yol ilanı kaçırma“o öneke giden en iyi yol benden geçiyor”öneke imza doğrulama, ilan süzme
ad çözmesahte DNS cevabı“o adın adresi bu”imzalı bölge, şifreli ad çözme

Beş satırın ortak noktası, hiçbirinin şifreyi kırmaya çalışmaması. Saldırgan matematikle uğraşmıyor; yalnızca kendini yolun ortasına koyuyor. Yolun ortasında olmak da tek başına hiçbir şeyi okutmuyor — okuyabilmesi için trafiğin ya şifresiz olması ya da kendisini karşı taraf olarak kabul ettirmesi gerekiyor.

İkincisi tam olarak sertifikanın engellediği şey. Saldırgan araya girse bile, sunucu adına imzalanmış geçerli bir sertifika üretemediği sürece tarayıcı bağlantıyı kuramaz. Bu yüzden gerçek dünyada ortadaki adam saldırıları şifreyi kırarak değil, üç kestirmeden biriyle yürür:

Buradan çıkan kural şu: ağın güvenli olduğunu varsaymak yerine, karşı tarafın kim olduğunu her seferinde doğrula. Kafedeki kablosuz ağın adı doğru olabilir ama adı kimse imzalamıyor; sunucunun sertifikasını ise imzalıyor.

İnternet kısıtlamaları hangi katmanda uygulanıyor?

Aynı düzenek bir de tersinden çalışıyor. Trafiğin üzerinden geçtiği yerde duran biri, onu okumak yerine durdurmayı seçebilir. Erişim kısıtlaması dediğimiz şey teknik olarak bir süzme kararıdır ve her yöntem başka bir katmanda iş görür. Katman da iki şeyi belirler: yan hasarın büyüklüğünü ve yöntemin ne kadar hedefli olabildiğini.

yöntemhangi katmandane yapıyoryan hasarı
ad çözme cevabını değiştirmead çözmeresolver sahte ya da boş cevap döndürüro adı kullanan her hizmet birden düşer
adres ya da önek düşürmehedefe giden paket iletilmezaynı adresi paylaşan bütün siteler kapanır
el sıkışmadaki alan adına bakmataşıma üstüşifreli oturum kurulmadan önceki açık alan adı okunurçok az; yöntem hedefli çalışır
protokol parmak iziderin paket incelemesiiçeriğe değil trafiğin şekline bakarmeşru kullanım da yakalanır
hız kısmaengellemez, kullanılamaz hâle getirirölçmesi ve kanıtlaması zor

Sıralamada bir yön var. Web trafiğinin neredeyse tamamı şifrelendikçe içeriğe bakarak süzme imkânsızlaştı, ve süzme içerikten üstveriye kaydı: hangi adı sorduğun, hangi adrese gittiğin, el sıkışmanın hangi alan adını açıkta bıraktığı. Şifreli ad çözme birinci sütunu, el sıkışmanın açık kısmını da kapatan uzantılar üçüncü sütunu daraltıyor. Aynı hamlenin her seferinde iki sonucu oluyor: mahremiyet artıyor, hedefli süzme zorlaşıyor, buna karşılık kalan tek kaba araç olan adres engellemesinin yan hasarı büyüyor.

Kurum ağındaki içerik süzgeci ile ülke çapındaki erişim engeli teknik olarak aynı araçları kullanıyor. Aralarındaki fark araçta değil, kimin hangi yetkiyle uyguladığında ve neyin denetime açık olduğunda.

Özet

Peki, ne öğrendik?

  • Güvenlik duvarı bir sınır politikasıdır: iç ağı internetten ayırır, varsayılanı kapalıdır ve tek tek açılmamış olan her şeyi reddeder.
  • Durumsuz süzgeç sayılı alana bakar: iki adres, iki port, ICMP türü ve TCP bayrakları; kararını her pakette baştan verir.
  • Örtük ret listenin yazılmayan son satırıdır: ilk eşleşme kazandığı için satır sırası politikanın kendisi olur.
  • Durum takibi kural tablosunun yanına bellek ekler: bağlantı durum tablosundaki four-tuple, dönen paketin anlamlı olup olmadığını söyler.
  • Süzgecin iki kör noktası vardır: kaynak adres doğrulanamaz ve oturumlar arası ilişki görülemez; saldırı tespit sistemi tam bu boşluğa girer.

Beş satırlık liste kararını verdi ve paket sınırdan çıktı. Bundan sonrası senin ağın değil, operatörün ağı. Peki oradaki ağ senin evdekine benziyor mu?

47. bölüme devam et: Operatör ve Metro Ağları