DNS Beacon Cobalt Strike’ın güzel özelliklerinden bir tanesidir,çünkü bizden taskleri indirmek için DNS requestlerini kullanır.Bizden dönen DNS Response ise Beacon’a sleep moduna yada tasklerini nasıl indirmesi gerektiğini söyler.
Data Channels
DNS Beacon kendisine verdiğimiz taskleri DNS TXT records , DNS AAAA records , veya DNS A recordlarını kullanarak indirebilir.
Bu beacon targetta aktifken bile modlarını değiştirme esnekliğine sahiptir.Bunu da “mode” komutunu kullanarak Beacon’un data channelini değiştirebiliriz.
- “mode dns” DNS A record data channel
- “mode dns6” DNS AAAA record data channel
- “mode dns-txt" DNS TXT record data channelıdır.
Default olarak DNS TXT record data channel aktiftir.
!! DNS Beaconda önemli olarak bilinmesi gereken bir şey vardır , biz bir beacon sessionu elde ettiğimizde hacklenilen sistem hakkında herhangi bir bilgi dönmez bunu görmek için beacon sessiona herhangi bir komut verip çıktıyı aldığımızda sistem hakkında bilgileri elde etmiş oluruz.
DNS Listener Kuralım
Yukarıda değindiğimiz gibi bir listener oluşturmak için
Cobalt Strike -> Listeners
Add Kısmı ile New Listener paneli açılır ve buradan payload type olarak Beacon DNS seçeriz.
Dns Recordları ise aşağıda görüldüğü gibidir.
Yukarıdaki olay şudur dotnetguard.blog’un Name Server’i -> beacon.dotnetguard.blog’u işaret eder.
From <https://d.docs.live.net/799d94c5e4ea017a/COBALT_GUNCEL.docx>
Dikkat etmeniz gereken nokta ise beacon(2).dotnetguard.com’un A recordunun Team server’a işaret ediyor olmasıdır.
Parametreler :
DNS Hosts : Beacon’a bir yada daha fazla domain eklemek için [+] kısmına basılır.Tabi belirttiğiniz domainler için Cobalt Strike team server’i bu domainler üzerinde yetkiye sahip olmalıdır (authoritative).
Bir DNS A kaydı oluşturun ve bunu Cobalt Strike sunucunuza yönlendirin. Cobalt Strike de ki team serverimizin A kaydına birkaç domaininize yada subdomainlere atamak için DNS NS kayıtlarını kullanabilirsiniz. (yukarıda yaptığımız gibi) Cobalt Strike team server’ına tabi birden fazla kayıt da verilebilir mesela siz sub-domain oluşturursunuz oluşturduğunuz sub-domain yada farklı birkaç domain varsa bunlar’ın DNS kayıtları Cobalt Strike team server’ının A kaydını işaret etmesi gerek.
En son sectionlarda kayıtlar ve record örnekleri verilmiştir.Biz sadece elimizde bir team server varmış gibi devam edip temellerini öğreniyoruz.
Host Rotation Strategy : Bu parametre ise , networkten çıkış için beaconların davranışlarını configure eder tabi birkaç seçeneği var bunlar daha iyi anlaşılır :
- round-robin : Verilen host namelerin listesinin sırasıyla döngü yaparak her biri için tek tek sırayla seçim yapar ve her bir host bir bağlantı için kullanılır.
- random : Herhangi bir bağlantı kurulmaya çalışıldığı anda listeden rastgele host name seçilir yani random olarak host name seç.
- failover-xx: Çalışan olan host’u mümkün olduğunca kullanmak için seç yani bir host ayakta mı değilmi önce o öğrenilir daha sonra bu host seçilir.
- rotate-xx: Her bir hostu belirli bir süre kullanmak için seçilir.
Max Retry Strategy : Bu parametre , beacon’umuzun davranışını belirler şöyle ki art arda team server’a istek atar ve bu ardışık isteklerin başarısız numaraya örneğin 10 defa denenmesi sonucunda failed olursa beaconumuz çıkış yapar yani işini bitir artık diyoruz.
- none: Burda başarısız bağlantılar olsa bile çıkış yapma diyoruz.
- exit-xxx: Şöyle bir syntax’ı vardır , exit-[max_attempts]-[increase_attempts]-[duration][m,h,d]
- max attempts : başarısız connectionların sayısıdır.
- increase_attempts : Sleep time süresini arttırmadan önceki art arda denenilen başarısız connectionların sayısıdır.
- duration ise yeni uyku zamanı için dakika,saat ve gün sayısıdır.
Aşağıya bıraktığım max retry strategy için
DNS Host (Stager) : Bu kısım DNS Beacon’un TXT record stagerini belirtir.
Profile : Team server’i ilk başlattığımızda verdiğimiz Malleable C2 profili belirtilir.
DNS Port (Bind) : Beacon payload serverimizin bağlanacağı port’u belirtir.Bu seçenek redirector kullanıldığında mantıklıdır mesela bir redirector’ümüz olsun 53.porttan bağlantıları kabul ediyor ve daha sonra bu bağlantıyı bizim team server’da ki belirttiğimiz porta gönderiyor.Bu yapıda Bind işlemi kullanılabilir. (Redirector nedir konusu anlatılacak)
DNS Resolver : Bir DNS Beacon’un hedefin kendi kullandığı DNS çözümleyicisi (resolver) tarafından değil de bizim specific olarak belirttiğimiz bir DNS resolver tarafından çıkmasını isteyebiliriz.Örneğin target 8.8.8.8 kullanıyor olsun fakat biz bunu 1.1.1.1 yada herhangi bir DNS Resolver belirtip yazabiliriz. Artık bizim beaconumuz networke çıkarken bu belirtilen dns adresine göre resolve edip çıkış yapacaktır.
Save ile kaydedip listeneri başlatabiliriz.