İçeriğe geç
academia.sh

Ders 06 / 18

ARP

IP adresinden donanım adresine çözümleme, istek–yanıt döngüsü, önbellek davranışı, vekil ve ücretsiz kullanım biçimleri ile adres zehirlenmesi.

İçindekiler

Önceki ders bir çerçevenin hedef alanına donanım adresi yazıldığını gösterdi. Oysa uygulamalar hedefi IP adresiyle belirtir: örnek ağdaki istemci 198.51.100.20 adresine gitmek ister, geçidinin 192.168.10.193 olduğunu bilir, ancak bu adreslerin hiçbirinin donanım karşılığını bilmez.

İki adres uzayı arasında bir köprü gerekir. Bu dersin sorusu, o köprünün nasıl kurulduğu ve kurulurken hangi varsayımların yapıldığıdır.

İki Adres Uzayı

IP adresi ile MAC adresi arasında hesaplanabilir bir ilişki yoktur. Biri ağ yöneticisinin veya bir kiralama hizmetinin atadığı mantıksal bir addır; diğeri arayüzün donanımına bağlı fiziksel bir addır. Aynı makine ağdan ağa taşındığında IP adresi değişir, MAC adresi değişmez.

Eşleme hesaplanamadığına göre sorulmalıdır. ARP (Address Resolution Protocol) bu soruyu soran protokoldür. Yöntem doğrudandır: yerel ağın tamamına “şu IP adresi kimde?” diye yayın yapılır ve adresin sahibi yanıt verir.

ARP, IP’nin içinde taşınmaz; Ethernet çerçevesinde 0x0806 tür değeriyle doğrudan taşınır. Bu, önceki konuda söylenen “bazı protokoller iki katmanı birden ilgilendirir” saptamasının somut örneğidir: ARP mesajı bir ağ katmanı adresi taşır, ama ağ katmanı başlığı kullanmaz.

Mesajın Alanları

ARP mesajı 28 bayttır ve dokuz alandan oluşur.

Alan Boyut Örnek değer
Donanım türü 2 bayt 1 (Ethernet)
Protokol türü 2 bayt 0x0800 (IPv4)
Donanım adresi uzunluğu 1 bayt 6
Protokol adresi uzunluğu 1 bayt 4
İşlem 2 bayt 1 istek, 2 yanıt
Gönderen donanım adresi 6 bayt Soruyu soranın MAC adresi
Gönderen protokol adresi 4 bayt Soruyu soranın IP adresi
Hedef donanım adresi 6 bayt İstekte sıfır, yanıtta doludur
Hedef protokol adresi 4 bayt Sorulan IP adresi

Uzunluk alanlarının varlığı, protokolün Ethernet ve IPv4 ile sınırlı olmadığını gösterir: biçim, farklı adres genişliklerine sahip teknolojiler için tasarlanmıştır.

Aşağıdaki program, örnek ağdaki istemcinin geçidini sorduğu isteği ve gelen yanıtı kurar.

import ipaddress
import struct

BICIM = "!HHBBH6s4s6s4s"


def mac_paketle(mac: str) -> bytes:
    return bytes(int(x, 16) for x in mac.split(":"))


def mac_yaz(ham: bytes) -> str:
    return ":".join(f"{b:02x}" for b in ham)


def arp_mesaji(islem: int, gonderen_mac: str, gonderen_ip: str,
               hedef_mac: str, hedef_ip: str) -> bytes:
    return struct.pack(
        BICIM,
        1,          # donanım türü: Ethernet
        0x0800,     # protokol türü: IPv4
        6,          # donanım adresi uzunluğu
        4,          # protokol adresi uzunluğu
        islem,      # 1 = istek, 2 = yanıt
        mac_paketle(gonderen_mac), ipaddress.ip_address(gonderen_ip).packed,
        mac_paketle(hedef_mac), ipaddress.ip_address(hedef_ip).packed,
    )


def arp_yaz(ham: bytes) -> None:
    a = struct.unpack(BICIM, ham)
    islem = {1: "istek", 2: "yanıt"}[a[4]]
    print(f"işlem={islem:5s} gönderen={mac_yaz(a[5])} / {ipaddress.ip_address(a[6])}"
          f"  hedef={mac_yaz(a[7])} / {ipaddress.ip_address(a[8])}")


istek = arp_mesaji(1, "00:00:5e:00:53:01", "192.168.10.196",
                   "00:00:00:00:00:00", "192.168.10.193")
yanit = arp_mesaji(2, "00:00:5e:00:53:00", "192.168.10.193",
                   "00:00:5e:00:53:01", "192.168.10.196")

print("mesaj boyu:", len(istek), "bayt")
print(istek.hex())
arp_yaz(istek)
print(yanit.hex())
arp_yaz(yanit)

Çıktı:

mesaj boyu: 28 bayt
000108000604000100005e005301c0a80ac4000000000000c0a80ac1
işlem=istek gönderen=00:00:5e:00:53:01 / 192.168.10.196  hedef=00:00:00:00:00:00 / 192.168.10.193
000108000604000200005e005300c0a80ac100005e005301c0a80ac4
işlem=yanıt gönderen=00:00:5e:00:53:00 / 192.168.10.193  hedef=00:00:5e:00:53:01 / 192.168.10.196

İstek mesajındaki hedef donanım adresi alanı sıfırdır — sorunun kendisi budur. Yanıtta bu alan dolar ve gönderen ile hedef rolleri yer değiştirir.

İstek ve Yanıtın Taşınması

Mesajın kendisi kadar, onu taşıyan çerçevenin adresleri de önemlidir:

ARP isteği ARP yanıtı
Çerçeve kaynak adresi 00:00:5e:00:53:01 00:00:5e:00:53:00
Çerçeve hedef adresi ff:ff:ff:ff:ff:ff 00:00:5e:00:53:01
Ulaştığı cihazlar Yayın alanının tamamı Yalnız soruyu soran

İstek yayınla gider, çünkü sorulan adresin hangi cihazda olduğu bilinmemektedir. Yanıt ise tekil adrese gider: yanıtlayan, isteğin içindeki gönderen alanlarından soru sahibinin her iki adresini de öğrenmiştir.

Bu asimetrinin bir yan etkisi vardır: yayın alanındaki her cihaz isteği görür ve isterse gönderenin eşlemesini kendi önbelleğine yazar. Bu davranış, ilerideki bölümde ele alınacak güvenlik sorununun temelidir.

Yerel mi Uzak mı

Bir paket gönderilmeden önce verilen ilk karar, hedefin aynı ağda olup olmadığıdır. Karar, hedef adresin kendi ağ maskesiyle karşılaştırılmasıyla verilir; maske aritmetiği Alt Ağlara Bölme dersinde kurulacaktır. Kararın sonucu, hangi adresin çözümleneceğini belirler:

Hedef Aynı ağda mı ARP ile sorulan adres Çerçevenin hedef MAC adresi
192.168.10.200 Evet 192.168.10.200 Hedefin kendi MAC adresi
198.51.100.20 Hayır 192.168.10.193 (geçit) Geçidin MAC adresi

İkinci satır, ağ mekaniğinin en sık yanlış anlaşılan noktasıdır. Uzak bir hedefe giden pakette IP hedef adresi uzak sunucudur, MAC hedef adresi geçittir. İki adres farklı cihazları gösterir ve bu bir tutarsızlık değildir: IP adresi uçtan uca hedefi, MAC adresi bir sonraki sekmeyi belirtir.

Uzak sunucunun MAC adresi hiçbir zaman sorulmaz. Sorulamaz da: ARP isteği yayınla gider ve yayın yönlendiriciyi geçmez.

ARP Önbelleği

Her çözümleme için yayın yapmak pahalı olacağından, sonuçlar bir önbellekte tutulur. Örnek ağdaki istemcinin önbelleği, geçidiyle konuştuktan ve aynı bölümdeki bir yazıcıya eriştikten sonra şu içeriğe sahiptir:

IP adresi MAC adresi Durum
192.168.10.193 00:00:5e:00:53:00 Ulaşılabilir
192.168.10.210 00:00:5e:00:53:04 Ulaşılabilir
192.168.10.205 Eksik (yanıt beklenmekte)

Girdiler kalıcı değildir. Bir süre kullanılmayan girdi silinir; silinme, bir cihazın ağ kartı değiştiğinde veya adres başka bir cihaza geçtiğinde eşlemenin kendini düzeltmesini sağlar. Girdi silindikten sonraki ilk gönderim yeniden çözümleme başlatır ve o gönderim biraz gecikir.

Önbellek durumunu okumak için kullanılan komutlar ve çıktı biçimleri işletim sistemine göre değişir. Değişmeyen içerik, yukarıdaki tabloda gösterilen üç bilgidir: protokol adresi, donanım adresi ve girdinin durumu.

Ücretsiz ve Vekil Kullanım

Ücretsiz ARP (gratuitous ARP), bir cihazın kendi adresini kimse sormadan duyurmasıdır: hedef protokol adresi kendi adresi olan bir istek yayınlanır. Üç işe yarar. Adres çakışmasını sezdirir — yanıt gelirse aynı adres başka bir cihazdadır. Yedek bir cihaz devralma sırasında adresi üstlendiğini duyurur ve anahtarların tablolarını tazeler. Bir arayüz açıldığında komşuların eski eşlemelerini günceller.

Vekil ARP (proxy ARP), bir yönlendiricinin kendisine ait olmayan bir adres için yanıt vermesidir. Sorulan adres uzaktaysa yönlendirici kendi MAC adresini verir ve trafiği üstlenir. Ağ maskesi hatalı yapılandırılmış istemcileri çalışır durumda tutar; ancak sorunun kendisini gizlediği ve önbelleklerde birbirinin aynı çok sayıda girdi ürettiği için tanıyı zorlaştırır.

ARP Zehirlenmesi

ARP’nin tasarımında kimlik doğrulama yoktur. Yanıtı kimin gönderdiği denetlenmez; hatta istenmemiş bir yanıt bile birçok gerçekleştirimde önbelleğe yazılır. Bunun sonucu ARP zehirlenmesi (ARP poisoning) adı verilen saldırıdır.

Aynı yayın alanındaki bir cihaz, 192.168.10.193 adresinin kendi MAC adresinde olduğunu bildiren yanıtlar gönderirse, komşularının önbellekleri bozulur ve geçide gitmesi gereken trafik saldırgana yönlenir. Saldırgan trafiği geçide ileterek bağlantıyı ayakta tutabilir; bu durumda kullanıcı hiçbir kesinti görmez.

Açığın kaynağı bir gerçekleştirim hatası değil, protokolün tasarım varsayımıdır: aynı yerel ağdaki cihazlar güvenilir kabul edilmiştir. Karşı önlemler bu yüzden ARP’nin dışındadır:

  • Yayın alanlarını küçültmek ve güvenilmeyen cihazları ayrı ağlara koymak.
  • Anahtar üzerinde ARP denetimi: bir bağlantı noktasından yalnızca o cihaza atanmış adreslerin duyurulmasına izin vermek.
  • Kritik eşlemeleri sabitlemek.
  • Uçtan uca şifreleme ve kimlik doğrulama kullanmak: trafiği dinleyen bir aracı, içeriği okuyamaz veya değiştiremez.

Son madde, uçtan uca ilkesinin bir uygulamasıdır: ağın içindeki bir katmanın güvenlik sözü veremediği durumda, sözün uçlarda verilmesi gerekir.

IPv6’daki Karşılığı

IPv6, ARP’yi kullanmaz. Karşılık gelen işlev komşu keşfi (neighbor discovery) adıyla ICMPv6’nın içine taşınmıştır ve yayın yerine çok noktaya gönderim kullanır: soru, yalnızca sorulan adresle ilgili çok noktaya gönderim grubuna iletilir. Bu, yayın alanındaki her cihazın her soruyu işlemesini önler. Komşu keşfi ayrıca adres çakışması sınaması ve yönlendirici duyurusu gibi işlevleri de üstlenir; bunlar IPv6 dersinde ele alınacaktır.

Özet

  • IP adresi ile MAC adresi arasında hesaplanabilir bir ilişki yoktur; eşleme ARP ile sorulur.
  • ARP isteği yayınla gider, yanıt tekil adrese döner; mesaj 28 bayttır ve IP başlığı kullanmaz.
  • Hedef aynı ağdaysa hedefin kendi adresi, değilse geçidin adresi çözümlenir; uzak hedefe giden pakette IP hedefi sunucu, MAC hedefi geçittir.
  • Çözümleme sonuçları süreli bir önbellekte tutulur; süre dolduğunda eşleme kendini düzeltir.
  • Ücretsiz ARP adres duyurusu ve çakışma sınaması için, vekil ARP başka bir ağın adresini üstlenmek için kullanılır.
  • ARP’de kimlik doğrulama yoktur; zehirlenmeye karşı önlemler yayın alanını küçültmek, anahtar düzeyinde denetim ve uçtan uca şifrelemedir.

Sonraki Adım

Buraya kadar IP adresleri bir etiket gibi kullanıldı: 192.168.10.196 yazıldı, anlamı sorgulanmadı. Oysa bu sayının içinde bir yapı vardır — bir bölümü ağı, bir bölümü o ağdaki düğümü gösterir. Sonraki ders IPv4 adresinin bit yapısını, ağ ile düğüm bölümlerinin ayrımını ve özel amaçlar için ayrılmış blokları ele alacak.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat