June 6, 2026
Network Pusulası #9 — ARP: IP ile MAC Arasındaki Köprü ve Saldırgan İçin Açık Kapı
Ağda iki tür adresimiz olduğunu öğrendiğimde — IP ve MAC — aklıma bir soru takılı kalmıştı: “Madem IP adresi var, MAC adresine ne gerek…
Toprak Külekçioğlu
5 min read
Ağda iki tür adresimiz olduğunu öğrendiğimde — IP ve MAC — aklıma bir soru takılı kalmıştı: "Madem IP adresi var, MAC adresine ne gerek var? Madem MAC adresi var, IP adresine ne gerek var?" Sonra anladım ki ikisi de gerekli, ikisi farklı işler yapıyor. Ama daha derin bir soru vardı: "Bir cihaz başka bir cihaza paket yollayacak, IP'sini biliyor, peki MAC'ini nereden bilecek?"
İşte tam bu boşluğu dolduran protokol ARP. Açılımı Address Resolution Protocol, yani "Adres Çözümleme Protokolü." Görevi tek bir cümleyle özetlenebilir: "Bilinen bir IP adresinden, o IP'nin sahibinin MAC adresini bulmak."
Bu yazıda ARP'nin nasıl çalıştığını, neden var olduğunu, paketin yolculuğunda nerelerde devreye girdiğini ve sonunda da bu masum görünen mekanizmanın saldırgan eline geçtiğinde nasıl bir Man-in-the-Middle silahına dönüştüğünü göreceğiz.
Önce Sorunu Görelim: IP Var, MAC Yok
Bir paketin ağda dolaşabilmesi için iki bilgiye ihtiyacımız var: nereye gideceği ve şu an bir sonraki cihaza nasıl ulaşacağı. IP adresi nihai hedefi söylüyor — "ben şu IP'ye gideceğim." Ama bir Ethernet frame'i yola çıkmak için MAC adresine ihtiyaç duyuyor. Çünkü switch dünyası MAC adresleri üzerine kuruludur, IP'yle ilgilenmez, görmez bile.
Şimdi düşün. PC3 (10.0.10.5), aynı ağdaki başka bir cihaza (10.0.10.7) paket yollayacak. PC3'ün elinde:
- Hedef IP: 10.0.10.7 ✓ biliyor
- Hedef MAC: ??? bilmiyor
Hedef MAC olmadan frame oluşturulamaz. Frame'in başlığına ne yazılacak? Boş bırakılırsa switch onu nereye göndereceğini bilemez. İşte tam bu noktada ARP devreye giriyor.
ARP'nin Çözümü: Sor ve Cevap Al
ARP'nin çalışma mantığı çocuk basitliğinde aslında. Bir senaryoyu sahne sahne yaşayalım:
Sahne 1 — PC3 kendine sorar:
PC3 paketi göndermeye karar verir, ama önce kendi belleğine bakar. Her cihazın bir ARP cache (ARP tablosu) tutar — yani "şu IP = şu MAC" eşleşmelerinin notlarını. PC3 bakar: "10.0.10.7 için bir kayıt var mı?"
Eğer varsa, harika — doğrudan kullanır. Eğer yoksa (ilk kez konuşuyorlar), sormak gerekir.
Sahne 2 — PC3 ağa bağırır (ARP Request):
PC3 ağa bir mesaj yayar:
"Selam herkese, 10.0.10.7'nin sahibi kim? MAC adresini bana söyle. Bu arada ben 10.0.10.5'im, benim MAC'im de şu."
Bu mesaj broadcast olarak gönderilir. Yani hedef MAC olarak FF:FF:FF:FF:FF:FF kullanılır — bu "ağdaki herkes bunu alsın" anlamına gelir. Ağdaki tüm cihazlar bu broadcast'i alır ve okur.
Sahne 3 — Sahibi cevap verir (ARP Reply):
Ağdaki diğer cihazlar mesajı alır, bakar, "bu IP ben değilim" der ve görmezden gelir. Sadece 10.0.10.7'nin sahibi olan cihaz, "aa bu benim IP'm" der ve PC3'e cevap verir. Bu cevap broadcast değil, unicast — yani sadece PC3'e gönderilir:
"10.0.10.7 benim, MAC adresim AA:BB:CC:DD:EE:FF"
Sahne 4 — PC3 deftere yazar ve paketi yollar:
PC3 cevabı alır, ARP cache'ine "10.0.10.7 = AA:BB:CC:DD:EE:FF" diye kaydeder. Artık frame'i tam hazırlayabilir: hedef MAC alanına bu değeri koyar, paketi gönderir. Bir dahaki sefere tekrar sormaz, doğrudan tablosundan bakar. ARP kayıtları genelde 4 saat (Cisco varsayılanı) tutulur, sonra silinir — değişimleri yakalamak için.
İşte ARP'nin bütün hikayesi bu. "IP biliyorum, MAC lazım" → "ağa sor" → "sahibi cevaplasın" → "deftere yaz." Hepsi bu.
Önemli Detay: Farklı Ağa Giderken Ne Olur?
Bu kısımda yeni başlayanların kafası karışır. Yukarıdaki örnek aynı subnet'teki iki cihazdı. Peki PC3, başka bir subnet'teki bir cihaza (mesela 10.0.100.10'daki bir sunucuya) paket gönderecekse ne olur?
PC3 önce kendine sorar: "Hedef benim ağımda mı?" IP'leri ve subnet mask'ını karşılaştırır. Farklı subnet. PC3 şöyle düşünür: "Bu hedef yerel değil, doğrudan ulaşamam. Gateway'ime yollayayım, oradan gitsin."
Şimdi kritik nokta: PC3 bu durumda 10.0.100.10'un MAC'ini sormaz. Çünkü ona doğrudan ulaşamayacak zaten. Onun yerine kendi gateway'inin (router'ın) MAC adresini ARP ile sorar. Paketi router'a teslim eder, gerisini router halleder.
Yani ARP her zaman bir sonraki durağın MAC'ini bulmak için çalışır — ister nihai hedef olsun, ister gateway. ARP sadece kendi yerel ağı içinde anlam taşır; uzaktaki bir cihazın MAC'ini asla doğrudan sormaz.
Bu mantık önceki yazılarda anlattığım katmanlarla birleşiyor: IP uzağı görür, MAC yereli görür, ARP de "yerelde bir sonraki adımın MAC'i ne" sorusunu çözer.
ARP Tam Olarak Nerede Devreye Giriyor?
Bir cihaz ARP'yi her paket göndermek istediğinde değil, MAC'ini bilmediği biriyle konuşmak istediğinde kullanır. Yani ARP cache'i boşsa veya kayıt eskimişse. Bir kere öğrendiyse zaten tablosundan bakar, sormaz.
ARP genelde iki anda devreye girer:
Birincisi: Aynı ağdaki bir cihazla iletişim kurmaya başladığında. "Yan masadaki bilgisayara dosya göndereceğim, MAC'i lazım" anı.
İkincisi: Farklı ağa paket göndermeye karar verdiğinde. Bu durumda hedefin değil, gateway'in MAC'ini sorar. Çünkü paket önce gateway'e gidecek.
Burada bir ayrım önemli: Düz switch'ler ARP yapmaz. Switch'in IP'yle işi olmadığı için sormaz, cevaplamaz. ARP yapan taraflar: bilgisayarlar, sunucular, telefonlar, router'lar ve Layer 3 switch'ler. Yani IP adresi taşıyan her cihaz.
ARP'nin Karanlık Yüzü: ARP Spoofing
Şimdi pentest tarafına geliyoruz. ARP'nin bütün bu masum yapısının içinde bir zafiyet var, hem de çok büyük: ARP cevaplarını doğrulayan bir mekanizma yok.
Bir düşün. Cihaz ARP Request gönderiyor — "10.0.10.1 kimin?" Cevap geliyor: "Ben, MAC'im şu." Cevap veren gerçekten o IP'nin sahibi mi? Kimse kontrol etmiyor. ARP soran cihaz gelen cevaba körü körüne inanır, tablosuna yazar, kullanır.
Saldırgan tam bu güveni istismar eder. Saldırının adı ARP Spoofing ya da ARP Poisoning. Man-in-the-Middle ailesinin klasiklerinden, hem de en kolaylarından.
Saldırının Mantığı
Mantık çok basit. Saldırgan ağa bağlanır ve sahte ARP cevapları üretmeye başlar. İki tarafa da yalan söyler:
Kurbana (mesela bir bilgisayara) der ki: "Selam, ben gateway'im. MAC'im şu." (Aslında saldırganın kendi MAC'i)
Gateway'e der ki: "Selam, ben şu kurban bilgisayarım. MAC'im şu." (Yine saldırganın MAC'i)
İki taraf da bu cevaplara inanır. Tablolarına saldırganın MAC'ini yazarlar. Bu andan itibaren:
- Kurban gateway'e paket göndermek istediğinde, paket aslında saldırgana gider
- Gateway kurbana cevap göndermek istediğinde, paket yine saldırgana gider
- Saldırgan ortada oturup paketleri okur, sonra gerçek hedefe iletir
Kurban ve gateway hiçbir şeyin farkında değil. İletişim devam ediyor sanıyorlar, sadece biraz yavaşlamış gibi. Ama saldırgan ortadaki çevirmen, bütün trafiği görüyor.
Bu pozisyondaki saldırgan şunları yapabilir:
- Trafiği dinler — şifresiz protokollerde parolalar, çerezler, formlar ortaya çıkar
- Trafiği değiştirir — gelen sayfaya zararlı kod ekleyebilir, dosya indirmeyi manipüle edebilir
- Trafiği keser — DoS yapabilir, bağlantıyı koparır
Bu saldırı pentest dünyasında en bilinen Man-in-the-Middle tekniğidir. Kali Linux'taki arpspoof, Ettercap veya Bettercap gibi araçlarla dakikalar içinde kurulur. Tam da bu yüzden iç ağ güvenliğinde ARP en sık konuşulan zafiyetlerden biri.
Savunma — ARP'yi Düzeltemeyiz, Çevresine Duvar Öreriz
ARP Spoofing'in en sinir bozucu tarafı şu: protokolün kendisi savunmasız ve düzeltmek imkansız. ARP IPv4'ün temeli, "ARP'yi değiştirelim" demek "bütün interneti baştan yapalım" demek. O yüzden savunma protokolde değil, etrafında kurulur.
İki ana savunma katmanı var:
Dynamic ARP Inspection (DAI): Cisco switch'lerin en güçlü ARP koruma özelliği. Etkinleştirildiğinde, switch ağdan geçen her ARP paketini denetler. Sahte ARP cevapları gördüğü anda paketi düşürür, geçirmez. Bu özelliğin çalışması için switch'in "hangi IP gerçekten hangi cihaza ait" bilgisine sahip olması gerekir — bunu da DHCP Snooping denen bir özellikle yapar. DHCP Snooping switch'in DHCP trafiğini izleyip her cihazın aldığı IP-MAC eşleşmesini tablosuna yazmasını sağlar. DAI bu tabloya bakar, gelen ARP cevabında iddia edilen eşleşme tabloyla uyumsuzsa "sahte" der ve atar.
Pratikte kurumsal ağların çoğunda DHCP Snooping + DAI ikilisi standart hale gelmiştir. Bu ikili etkinleştirildiğinde ARP Spoofing saldırısı doğmadan ölür.
Statik ARP girişleri: Çok kritik cihazlar için (mesela ana sunucular, gateway'ler) cihazın ARP tablosuna manuel ve kalıcı kayıt eklersin. Bu kayıtlar ARP cevaplarıyla değiştirilemez. Saldırgan ne kadar sahte cevap gönderirse göndersin, kayıt sabit kalır.
Dezavantajı şu: her cihazda her kritik IP için ayrı ayrı kayıt tutmak büyük ağlarda imkansız. O yüzden bu yöntem genelde sadece çok kritik noktalarda kullanılır.
Bir Detay: IPv6'da ARP Yok
Önceki yazılarda IPv6'yı konuşmuştuk. IPv6 dünyasında ARP'nin yerini NDP (Neighbor Discovery Protocol) alır. Görevi aynı — IP'den MAC bulmak — ama yöntemi farklı. Broadcast yerine multicast kullanır, daha verimli çalışır.
Ne yazık ki NDP'nin de aynı temel sorunu var: cevapları doğrulayan bir mekanizma yok. Yani NDP Spoofing diye bir saldırı türü de var, IPv6 dünyasının ARP Spoofing'i. Aynı mantık, farklı protokol. Sorun protokolde değil, kimin kim olduğunu doğrulayan mekanizmanın olmayışında.
🧭 Network Pusulası: Bu Yazıda Ne Öğrendik?
- ARP, bilinen bir IP'den o IP'nin sahibinin MAC adresini bulan protokoldür. IP ve MAC katmanları arasındaki köprüdür.
- Çalışma şekli: cihaz broadcast ARP Request gönderir, sahibi unicast ARP Reply ile cevaplar, sonuç ARP cache'e yazılır.
- ARP sadece yerel ağ içinde çalışır. Uzak hedef için gateway'in MAC'i sorulur, hedefin değil.
- ARP'nin temel zafiyeti: cevapları doğrulayan bir mekanizma yok. Bu ARP Spoofing saldırısına yol açar — saldırgan kendini gateway gibi göstererek Man-in-the-Middle pozisyonu kazanır.
- Savunma: DHCP Snooping + Dynamic ARP Inspection (DAI) en güçlü pratik. Kritik cihazlar için statik ARP girişleri ek koruma sağlar.
- IPv6'da ARP'nin yerini NDP alır, benzer zafiyetlere açıktır.
ARP, ağın en temel taşlarından biri ve aynı zamanda en zayıf noktalarından biri. Bir yandan IP-MAC katmanlarını birbirine bağlıyor, bir yandan da saldırgan için açık kapı bırakıyor. Bu yüzden iyi bir ağ tasarımı ARP'yi tek başına bırakmaz, etrafına savunma katmanları örer.
Bir sonraki yazıda NAT'a bakacağız — yerel ağdaki cihazların internete nasıl çıktığını, bir router'ın IP adreslerini nasıl tercüme ettiğini göreceğiz. 🧭