Covenant Command & Control Framework - Kurulumu ve İncelemesi

 Herkese merhabalar, bugün sizlere .NET ile geliştirilen ve kullanıcı dostu olarak bulduğum(ilk etapta) bir c2 framework olan "Covenant" C2 Framework'ü tanıtacağım.

Empire Powershell açık kaynak post-exploitation ve c2 frameworkler arasında en bilindiği olsa gerek, ayrıca BC-SECURITY tarafından geliştirilen Starkiller isimli GUI ile etkili bir kullanımı olduğu da aşikar(fakat CLI her zaman vazgeçilmezimdir).Bende sadece bununla yetinmeyip alternatiflerini incelemek istediğimde Google'da "open source c2 framework" sorgusunu gerçekleştirdim ve karşıma 15 adet frameworkun listelendiği bir liste çıktı.Bu listede yer alan frameworklerin çoğunu belirli bir zaman içerisinde yüzeysel olarak inceledim ve içlerinde en beğendiklerim Merlin ve Covenant olmuştu fakat Merlin tarafında kullanım açısından Covenant'a nazaran ciddi bir güçlük olduğundan bugün bu yazımı Covenant üzerine yazmayı uygun gördüm.

Yeni nesil komuta kontrol sunucusu olarak karşımıza çıkan Covenant ve diğer yeni nesil komuta kontrol araçlarının ortak özellikleri ;

- Kullanıcı dostu olmaları ( Kurulum ve kullanımının kolaylığı açısından)

- Çapraz platform desteği( Windows,Linux,Osx)

- Web tabanlı kullanıcı dostu arayüz

- Github'da açık kaynak olarak sunulması

- Postgresql,sqlite gibi hafif ve güvenilir veri tabanları kullanması

- Kimlik doğrulaması ile çoklu kullanıma izin vermesi

- Elde edilen verileri/bilgileri erişim kolaylığı için bir sekmede ayrı olarak muhafaza etmesi diyebiliriz.

Covenant yukarıdaki özelliklerin hepsine uymakla birlikte, ilk deneyimlerime dayanarak daha önce c2 dünyasına hiç girmemiş birisi için oldukça güzel bir başlangıç olduğunu farkettim.Gerek web arayüzündeki kolaylığı ve anlaşılabilirliği, gerek kurulum aşamasındaki rahatlığı ile bu söylediklerimi destekliyor.

Merlin c2 de gördüğüm sıkıntılardan birisi de kurulum aşamasında insanı yoran aşamalara sahip olmasıdır.Kurulum aşamasında çok aşamalı evreler, daha önce bu tarz deneyimlerde bulunmamış birisi için oldukça zor olacaktır ki Merlin için döküman aramak, samanlıkta iğne aramaya dönüşüyor bir noktadan sonra ( :) ).


Kurulum aşamasına geçmeden önce gerekli bilgiyi aktardığımı düşünerek kurulum aşamasına geçiyorum.


"git clone --recursive-submodules https://github.com/cobbr/Covenant" komutu ile ilgili repodan covenantı ediniyoruz.


"Covenant/Covenant" dizinine geçiş yapıyoruz


"wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb" komutu ile Microsoft paketini indiriyoruz.(Burada atlamamamız gereken nokta eğer Debian değil de başka bir linux dağıtımı kullanıyorsanız ilgili adresten o dağıtıma uygun paketi indirmelisiniz, ben Parrot Os üzerinde kurulum gerçekleştirdiğim için Debian 10 paketini kullandım.)

Ardından "sudo dpkg -i packages-microsoft-prod.deb" komutu ile paketi açıyoruz.

"apt-get install -y apt-transport-https" komutu ile Covenant'ın bağımlı olduğu paketlerden birisini ediniyoruz.


ve son olarak projeyi build ve run edebilmemiz için "dotnet-sdk-3.1" i indiriyoruz.Bu proje dotnet sürümü olarak 3.1 i istediği için indirdiğimiz sürüme dikkat etmekte fayda var.


"botnet build" komutu ile build işlemi gerçekleştiriyoruz.

ve son olarak dotnet run komutu ile çalıştırıyoruz.Sondan bir önceki satırda da gösterildiği üzere tarayıcıda localhost'un 7443 portuna geçiyoruz.


Bizi ilk olarak bir register ekranı karşılıyor.Ben bu kurulumu test amaçlı gerçekleştirdiğim için admin:admin kullanıcı adı ve şifresi ile kayıt gerçekleştiriyorum.  

Şimdi oturum açmadan önce sizlere Covenant'ın içeriği hakkında bir kaç ön bilgi vermekte fayda olduğunu düşündüğümden bir kaç kavrama değineceğim.

Covenant Sunucusu(Covenant Server) : Covenant sunucusu C# ile geliştirilmiş bir komuta kontrol merkezidir.Docker desteğini de içinde bulundurduğu için harika bir çapraz platform desteği ile ön plana çıkarken bir yandan da API desteği sağlamaktadır.Ek olarak veritabanı olarak sqlite kullanmaktadır.

Grunt : Grunt kavramı ilk başta yabancı gelsede, daha önce Empire kullananların Agent olarak bildiği kavramdır aslında.Grunt'ı hedeflere yerleştirdiğimiz implant olarak tanımlayabiliriz.Grunt'lar hedef Covenant sunucusunda oluşturduğumuz bir Listener ile mutlaka iletişime geçerler.Grunt'lar tarafından yürütülen görevler ve hatta Grunt'ı ayakta tutan stagerlar, tespit edilmekten kaçmak için dinamik olarak derlenmektedir.
Şimdi oturum açma ve sonrası adımlarına geçebiliriz.



Oturum açtığımızda bizi bir Dashboard karşılamakta.Bu dashboard da Grunt'lar,Listener'lar ve Grunt'lar üzerinde yürütülen görevleri görebilmekteyiz.


Listener sekmesine geldiğimizde kolaylıkla bir dinleyici oluşturabildiğimizi görüyoruz.Burada gerekli sekmeleri doldurup bir dinleyiciyi hazır hale getirebiliyoruz.Dilersek bu dinleyicinin SSL kullanmasını da ayarlayabiliyoruz.



Oluşturduğumuz dinleyicinin durumunu da oluşturduktan sonra görebiliyoruz.


Launcher sekmesinde, hedef sistemde bir Grunt ayağa kaldırmamız için bir çok seçenek olduğunu görmekteyiz.Ben sizler için .dll ve .exe oluşturup, herhangi bir antivirüsten kaçınma yapmadan kaç antivirüs tarafından tespit edildiğini inceledim.


Herhangi bir işlemden geçirmeden, Covenant tarafından generate edildiği haliyle .dll launcher 69 antivirüs ün 14 ü tarafından zararlı olarak tespit edilmektedir, buna Windows Defender da dahil.


Launcherımızı .exe olarak oluşturduğumuzda ise 71 antivirüsten 38 i tarafından yakalandığını da görmekteyiz ki bu gayet kötü bir oran.

Ayrıca şunu da belirtmeliyim ki ben şu an deneme aşamasında olduğum için virustotal üzerinden bu testleri yapmaktayım fakat sizler kendi crypt yada obfuscation testleriniz için raporlama yapmayan deneyicileri kullanmalısınız.Aksi takdirde FUD iken 30/60 gibi sayılarla karşı karşıya kalabilirsiniz.


Grunt sekmesine geldiğimizde burası bizi ajanların karşıladığı sekmedir.Burada Grunt'ların ;
Name(Adı,ID'si)
Hostname(Client'ın host adı)
User(Kullanıcısı)
Integrity(Bütünlüğü)
LastCheckIn(Son etkin olduğu zaman)
Status(durumu,Aktif/Deaktif)
Note(not)
Template(Teması yani GruntHTTP,GruntSMB,GruntBridge,Brute durumu)

bilgilerini görmekteyiz.


Görevler sekmesinde de 90 tane görev atayabildiğimizi görüyoruz.Sayısının çokluğundan ötürü görevlere tek tek değinmeyeceğim, sizler açıklaması ile birlikte inceleyebilirsiniz.


Bir de grafik sekmemiz mevcut ki raporlama vs. gibi durumlar için gayet işe yarar olduğunu düşünüyorum.


Yeni nesil komuta kontrol sunucularının elde edilen verileri/giriş bilgilerini ayrı bir noktada muhafaza etmesinden bahsetmiştik.Covenant'ta bu işlemi Data sekmesinde bizler için yapmaktadır.Grunt'ların elde ettiği verilere buradan kolaylıkla erişebilir yada saklayabiliriz.


Son olarak Users sekmesine bakacak olursak burada çoklu kullanım için birden fazla kullanıcı oluşturabiliriz.Burada benim oluşturduğum admin kullanıcısını görmekteyiz.

Şimdilik yazımın sonuna geldik.En kısa zamanda bu yazının devam niteliği olarak Covenant ile Launcher oluşturup hedef sistemde çalıştırıcaz, içerdeki hareketleri güvenlik çözümleri tarafından tespit edilebiliyor mu, Grunt'lar Covenant Server ile ilk haberleştiğinde ağ trafiğinde ne gibi olaylar oluyor bunları inceleyeceğiz ve hatta vakit ayırabilirsem Covenant ile oluşturduğumuz .dll veya .exe dosyalarımızı nasıl antivirüsler tarafından tanınmaz hale getireceğimizi de ekleyeceğim.

Soru ve cevaplarınız için emrehuseyinkahyaoglu@gmail.com adresinden benimle iletişime geçebilirsiniz.İyi günler dilerim.