SMET – Symmetric Meterpreter Encryption Tools
Zararlı yazılımların gelişmesiyle birlikte antivirüs uygulamalarıda gelişim göstermektedir. Çoğu zaman gerçekleştirdiğimiz testlerde antivirüs uygulamalarını atlatmak zorunda kalırız. Tahmin edeceğiniz üzere, karşılaştığımız işletim sistemlerinin büyük çoğunlu Windows’tur. Dolayısıyla geliştirdiğim bu araç da Windows işletim sistemlerinde çalışmakta olup, oluşturacağı meterpreter zararlısı da yine Windows işletim sistemiyle uyumlu çalışmaktadır. Bu yazımda Meterpreter için simetrik bir şifreleme aracı yazarak, meterpreter shellcode umuzu antivirüslerden kaçırmaya çalışacağız.
Github: https://github.com/mindspoof/SMET/
SMET (Symmetric Meterpreter Encryption Tools) aracını çalıştırdığımızda aşağıdaki ekran ile karşılaşacağız.
Basit bir arayüze sahip olan SMET ile aşağıdaki tabloda yer alan meterpreter zararlılarını ve encryption türlerini kullanabiliriz.
Yukarıdaki tabloda görüleceği üzere SMET, Base64, Rijndael – AES ve DES türlerinde encryption yapabilen, hem Windows Form Application hem de Console Application türlerinde çıktı verebilen ve 5 ayrı Payload türünü destekleyen bir uygulamadır diyebiliriz.
SMET, temel olarak bir Windows Form ve 3 sınıftan oluşmaktadır. Bunlar MainForm, MeterpreterBuilder.cs, Compiler.cs ve Encrypter.cs’dir. MainForm’dan Payload türü, encryption ve type seçildikten sonra ilgili sınıflara veri aktarımı sağlanır. MeterpreterBuilder.cs, temel meterpreter shellcode’unun C# uygulamasına uygun hale getirildiği sınıftır. Compiler.cs, MeterpreterBuilder.cs sınıfından gönderilen C# kodlarının build edilerek çalıştırılabilir hale gelmesini sağlayan sınıftır. Encrypter.cs sınıfı ise, Rijndael – AES ve DES için MeterpreterBuilder sınıfına iletilen encryption çözme işlemlerini üstlenir.
Kodları biraz detaylandıracak olursak eğer,
IP, Port bilgileri girildikten sonra seçilen encryption türü, payload ve uygulama türü tespit edilerek MeterpreterBuilder sınıfının ilgili metoduna gönderilmektedir. Yukarıdaki ekran görüntüsüne göre klasik Reverse Meterpreter seçilmiş ve MeterpreterBuilder sınıfından “SaveReverseMeterpreter” metodu tetiklenmiştir.
Seçilen SaveReverseMeterpreter metodu yukarıdaki gibidir. Bu metod içerisinde yer alana “strMtr” isimli string türündeki değişkende compile edilecek windows/meterpreter/reverse_tcp türündeki payloada ait shellcode’u çalıştırmak için C# kodları bulunmaktadır. Değişkende yer ve diğer bağımlılıklar düzenlenerek Compiler sınıfındaki Form metodu çağrılmaktadır.
Compiler sınıfındaki Form metodunda ise “strProgramCs” ve “strFrmDesignerCs” adında const string türünde 2 adet değişken kullanılmaktadır. Bunun sebebi şudur; C#’da Windows Form türünde bir kodu compile ederken “Program.cs” ve üretilen main formun “*.Designer.cs” türünde iki dosyaya daha ihtiyaç duymasındır. Bu yüzden standart olarak bu iki dosyada oluşturularak payload’un compile edilmesini sağladım.
Ardından işletim sisteminde yüklü olan .Net Framework versiyonu kontrol edilerek, en güncel frameworkün derleyicisi kullanılarak, oluşturulan C# kodları compile edilir ve meterpreter payload’umuz uygulamanın çalıştırıldığı dizine çıkartılır.
SMET, şuan için 2 simetrik algoritma desteklemektedir. Sonraki versiyonlarda simetrik algoritma sayısı ve payload desteğini genişleteceğim. Her iki yöntemde de encrypt edilmiş olan shellcode sırayla base64’e, base64’den de byte array türüne çevrilerek çalıştırılmaktadır.
Şimdi her ne kadar virustotale göndermeyin, yakalanma oranı artar desem de birileri gönderecek. O yüzden kendim gönderip, sonuçları buradan göstereyim istiyorum.
Windows/meterpreter/reverse_tcp Payload’u için Base64 ile encode edilmiş shellcode’un çıktısı aşağıdaki gibidir.
Windows/meterpreter/reverse_tcp Payload’u için Rijndael – AES ile ecrypt edilmiş shellcode’un çıktısı aşağıdaki gibidir.
Windows/meterpreter/reverse_tcp Payload’u için DES ile ecrypt edilmiş shellcode’un çıktısı aşağıdaki gibidir.
Meterpreter shellcode’un C# ile nasıl çalıştırıldığına dair şu yazımı okuyabilirsiniz:
Msfvenom aracının kullanımı için de şu yazımı okuyabilirsiniz: